Dart 来自其他小部件的颤振句柄输入文本字段

Dart 来自其他小部件的颤振句柄输入文本字段,dart,flutter,Dart,Flutter,我正在使用GeekyAnts的Flitter登录主页动画。您可以在以下网站上找到它: 我无法处理在字段中输入的用户名和密码值,因为这些字段是通过一个名为FormContainer的小部件从登录页面调用的,该小部件包含两个名为InputFieldArea的其他小部件。 在TextFormField中使用onChanged时,我不知道如何使这些值到达父LoginPage类 您能帮助我了解如何处理登录页面中字段的更改以使登录正常工作吗 谢谢 使用文本编辑控制器,如中所述 TextFormField将

我正在使用GeekyAnts的Flitter登录主页动画。您可以在以下网站上找到它:

我无法处理在字段中输入的用户名和密码值,因为这些字段是通过一个名为FormContainer的小部件从登录页面调用的,该小部件包含两个名为InputFieldArea的其他小部件。 在TextFormField中使用onChanged时,我不知道如何使这些值到达父LoginPage类

您能帮助我了解如何处理登录页面中字段的更改以使登录正常工作吗


谢谢

使用
文本编辑控制器
,如中所述

TextFormField
将控制器作为构造函数参数,您可以通过类似的构造函数将其传递给
InputFieldArea

class InputFieldArea extends StatelessWidget {
  final TextEditingController controller;
  final bool obscureText;
  // ...

  const InputFieldArea({Key key, this.controller, this.obscureText}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.orange,
      // ...
      child: TextFormField(
        controller: controller,
        obscureText: obscureText,
        // ...
      ),
    );
  }
}
控制器必须存储在
状态
,这样,如果由于某种原因重新生成小部件,控制器就不会重新创建:

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final _usernameController = TextEditingController();
  final _passwordController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Column(
        children: <Widget>[
          InputFieldArea(
            controller: _usernameController,
            obscureText: false,
          ),
          InputFieldArea(
            controller: _passwordController,
            obscureText: true,
          ),
          RaisedButton(
            onPressed: () {
              // example how to read the current text field values
              print('username: ${_usernameController.text}, password: ${_passwordController.text}');
            },
          )
        ],
      )
    );
  }
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
final _usernameController=TextEditingController();
final _passwordController=TextEditingController();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
正文:专栏(
儿童:[
输入域面积(
控制器:\ u usernameController,
模糊文本:false,
),
输入域面积(
控制器:_passwordController,
蒙昧文字:对,
),
升起的按钮(
已按下:(){
//如何读取当前文本字段值的示例
打印('username:${u usernameController.text},password:${u passwordController.text}');
},
)
],
)
);
}
}
另外,请查看