1

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 中提取方法时。我收到一条错误消息,提示“选择的结尾包含不属于语句的字符。我检查了一切和代码对我来说似乎都是正确的,但它仍然无法正常工作,请您帮帮我。我将所有代码导入到代码片段中,以便您可以在页面上看到所有代码。

在此处输入图像描述

4

1 回答 1

1

我不知道是不是这样,但你确实+在行尾有一些随机的47

其次,我假设您想在Column其中返回TextFields 和其他小部件,但是有一堆用逗号分隔的小部件。

因此,您可能丢失了代码的顶部

于 2022-02-13T23:00:52.780 回答