import 'package:flutter/material.dart';
import 'package:time_trackerpractice/common_widgets/form_submit_button.dart';
import 'package:time_trackerpractice/services/auth.dart';
enum EmailSignInFormType{signIn,register}
class EmailSignInForm extends StatefulWidget {
EmailSignInForm({@required this.auth});
final AuthBase auth;
@override
_EmailSignInFormState createState() => _EmailSignInFormState();
}
class _EmailSignInFormState extends State<EmailSignInForm> {
final TextEditingController _emailController = TextEditingController();
final TextEditingController _passwordController =TextEditingController();
String get _email=>_emailController.text;
String get _password=> _passwordController.text;
EmailSignInFormType _formType = EmailSignInFormType.signIn;
void _submit() async {
try {
if (_formType == EmailSignInFormType.signIn) {
await widget.auth.signInWithEmailAndPassword(_email, _password);
} else {
await widget.auth.signInWithEmailAndPassword(_email, _password);
}
} catch (e) {
print(e.toString());
}
Navigator.of(context).pop();
}
void _toggleFormType(){
setState(() {
_formType = _formType == EmailSignInFormType.signIn?
EmailSignInFormType.register: EmailSignInFormType.signIn;
});
}
List<Widget> _buildChildren() {
final primaryText = _formType == EmailSignInFormType.signIn ? 'Sign in' : 'Create account';
final secondaryText = _formType == EmailSignInFormType.signIn
? 'Need an account? Register'
: 'Have an account? Sign in';
return [
TextField(
controller: _emailController,
decoration: InputDecoration(
labelText: 'Email',
hintText: 'test@test.com',
),
autocorrect: false,
keyboardType: TextInputType.emailAddress,
textInputAction: TextInputAction.next,
),
SizedBox(height: 8.0),
TextField(
controller: _passwordController,
decoration: InputDecoration(
labelText: 'Password',
),
obscureText: true,
textInputAction: TextInputAction.done,
),
SizedBox(height: 8.0),
FormSubmitButton(
text: primaryText,
onPressed: _submit,
),
SizedBox(height: 8.0),
FlatButton(
child: Text(secondaryText),
onPressed: _toggleFormType,
),
];
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment:CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min,
children: _buildChildren(),
),
);
}
}
我正在为我的电子邮件和密码自定义文本字段。当我从 emailController 和 passwordController 中提取方法时。我收到一条错误消息,提示“选择的结尾包含不属于语句的字符。我检查了一切和代码对我来说似乎都是正确的,但它仍然无法正常工作,请您帮帮我。我将所有代码导入到代码片段中,以便您可以在页面上看到所有代码。