【问题标题】:TextFormField value disappear and How to get textFormField value?TextFormField 值消失以及如何获取 textFormField 值?
【发布时间】:2019-06-06 05:59:52
【问题描述】:

请帮忙解答我的 2 个问题。

第一个问题。为什么文本值消失了?[FIXED] by @Praneeth 我加了gif please click

我的代码就是这样使用的,

在我的小部件中,我调用了UsernameTextField 类。 小部件看起来像这样,

Widget build > WillPopScope > Scaffold > Form > ListView > children> 容器(容器下方)我还添加了key: _scaffoldKey,key: formKey,

 Container(
                padding: EdgeInsets.all(16.0),
                margin: EdgeInsets.only(top: 30.0),
                child: UsernameTextField(),
              ),

用户名文本字段()

class UsernameTextField extends StatefulWidget{
  final usernameController = TextEditingController();
  @override
  State<StatefulWidget> createState() {
    return UsernameTextFieldState(usernameController);
  }
}

class UsernameTextFieldState extends State<UsernameTextField>{
  final usernameController;
  UsernameTextFieldState(this.usernameController);

  @override
  Widget build(BuildContext context) {
    return AppTextField(
        decoration: InputDecoration(
          contentPadding: const EdgeInsets.all(20.0),
          labelText: AppTranslations.of(context)
              .text("loginpage_username"),
        ),
        myController: usernameController,
        textInputType: TextInputType.emailAddress
    );
  }
}

AppTextField() 类,我将这个类用于我的每个 TextField 小部件

class AppTextField extends StatelessWidget {
  final InputDecoration decoration;
  final myController;
  final TextInputType textInputType;
  AppTextField({
    this.decoration,
    this.myController,
    this.textInputType
  });

  @override
  Widget build(BuildContext context) {
    return TextFormField(
        controller: myController,
        keyboardType: textInputType,
        textAlign: TextAlign.left,
        decoration: decoration
    );}}

第二个问题。如何获取 textField 值?

在我的按钮onPressed()我调用了方法,我调用了validation方法,但是结果是null

usernameValidation(){
  String username = UsernameTextField().usernameController.text;
  print(username);
} 

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    首先将 UsernameTextField 类转换为 Stateful 类,方法是扩展为 StatefulWidget 而不是 StatelessWidget。 然后你可以从usernameController.text获得价值

    更新

        class UsernameTextField extends StatefulWidget{
          final usernameController = TextEditingController();
          UsernameTextField(this.usernameController)
    
          @override
          State<StatefulWidget> createState() {
            return UsernameTextFieldState(usernameController);
          }
        }
    
        class UsernameTextFieldState extends State<UsernameTextField>{
    
          @override
          Widget build(BuildContext context) {
            return AppTextField(
                decoration: InputDecoration(
                  contentPadding: const EdgeInsets.all(20.0),
                  labelText: AppTranslations.of(context)
                      .text("loginpage_username"),
                ),
                myController: widget.usernameController,
                textInputType: TextInputType.emailAddress
            );
          }
        }
    
    

    【讨论】:

    • 好的,我会试着告诉你..问题 01 怎么样。你回答问题 01 吗?
    • 是的,因为您定义 TextEditingController 的类不是有状态的小部件。它不会保存状态(您输入的文本)
    • 它的 usernameController.text;不是 UsernameTextField().usernameController.text;
    • 如何获取State类控制器值?
    • @user9139407 你修好了吗?
    猜你喜欢
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2023-04-04
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多