Flutter 按“完成”后,文本字段中写入的文本消失

Flutter 按“完成”后,文本字段中写入的文本消失,flutter,textfield,Flutter,Textfield,我在我的应用程序中使用一个文本字段来写评论,当用户键入文本并按下按钮时,文本应该写入数据库。然而,我有一个问题,那就是当我写下文本,然后按完成或从键盘返回,文本消失,然后没有评论要添加。即使在按“完成”或“返回”后,是否仍可以在文本字段中保存文本值 String _text; final formKey = GlobalKey<FormState>(); Form( key: formKey, child: Column(children: <Widget&g

我在我的应用程序中使用一个文本字段来写评论,当用户键入文本并按下按钮时,文本应该写入数据库。然而,我有一个问题,那就是当我写下文本,然后按完成或从键盘返回,文本消失,然后没有评论要添加。即使在按“完成”或“返回”后,是否仍可以在文本字段中保存文本值

String _text;
final formKey = GlobalKey<FormState>();

Form(
    key: formKey,
    child: Column(children: <Widget>[
      TextFormField(
        autocorrect: false,
        decoration: InputDecoration(labelText: "Text:"),
        onSaved: (str) => _text = str,
      )
    ]));

然后将参数中的_text变量作为键值传递。

不确定输入消失的原因,但可以使用TextEditingController并将该控制器传递给TextField。 然后使用controller.text访问TextField的值

这里有一个小例子

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  String databaseText;
  TextEditingController controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: TextField(
            controller: controller,
            onEditingComplete: () {
              databaseText = controller.text;
              print(databaseText);
            },
          ),
        ),
      ),
    );
  }
}

尝试在InputDecoration中修改contentPadding。例如:

contentPadding: EdgeInsets.symmetric(horizontal: 2, vertical: 0)

相应的颤振错误报告如下所示

有,用户,问:

因此,使用StatefulWidget的原因是,即使在重建过程中,状态也会被保留,因此我可以使用它来保存我的TextEditingController

这是正确的吗

以及:

确切地说:-

一般来说,在无状态Widget/InheritedWIdget中只创建原语。对于其他一切,你都需要一个状态

因此,这似乎是官方的答案:如果您创建的不是原语,那么您将需要一个状态。

使用TextEditingController,并记住在构建方法之外的其他地方初始化它。