【问题标题】:TextEditingController returns me null , not considered the input I typed inside text fieldTextEditingController 返回 null ,不考虑我在文本字段中键入的输入
【发布时间】:2021-11-15 12:25:48
【问题描述】:

questionController.text 总是返回一个空值。而不是我在 textformfield 中插入的任何内容。

class _AddQuestionState extends State<AddQuestion> {

  TextEditingController questionController = TextEditingController();
  
   
  @override
  Widget build(BuildContext context) {
    

    return Scaffold(
      body:  Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextFormField(
              controller: questionController,
              decoration: InputDecoration(
                hintText: 'description',
                hintStyle: TextStyle(
                    color: Colors.grey
                ),
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.all(Radius.circular(20.0)),
                ),
              ),),
             AddUser(questionController.text),]

}}

当我调用这个类并打印输出时,它返回 null。

使用 AddUser(questionController.text);

我使用 print(question) 打印了输出,但它返回了空字符串。

class AddUser extends StatelessWidget {
  final String question;

  
  AddUser(this.question);
  
  @override
  Widget build(BuildContext context) {
    // Create a CollectionReference called users that references the firestore collection
    CollectionReference users = FirebaseFirestore.instance.collection('Questions').doc("cse").collection("CSE");

    Future<void> addUser() {
      print(question);
      // Call the user's CollectionReference to add a new user
      return users
          .add({
        'question': question, // John Doe
        
      })
          .then((value) => print("User Added"))
          .catchError((error) => print("Failed to add user: $error"));
    }

【问题讨论】:

  • 您甚至在您的AddQuestion 小部件中调用了您的AddUser 小部件。请完成您的代码。我们不知道您传递的值是在构建树内还是在外部。
  • @RaineDaleHolgado 我更新了代码,现在检查

标签: flutter dart textfield flutter-textformfield


【解决方案1】:

当它第一次构建屏幕时会发生什么,你的AddQuestion 小部件 questionController 被设置为传递给 AddUser() 小部件的空字符串。

如果 [controller] 为 null,则 [TextEditingController] 将自动构造,其文本将初始化为 [initialValue] 或空字符串。

当您更改 questionController 中的值时,您的 AddUser() 小部件不知道更改。通过添加 setState,它将重建整个 AddQuestion 小部件并将新值传递给您的 AddUser 小部件。

试试这个例子有一个不明白的

class MyWidget extends StatefulWidget {
  const MyWidget({Key? key}) : super(key: key);

  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  TextEditingController questionController = TextEditingController();
  String? questionValue;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          children: [
            TextFormField(
              controller: questionController,
              decoration: InputDecoration(
                hintText: 'description',
                hintStyle: TextStyle(color: Colors.grey),
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.all(Radius.circular(20.0)),
                ),
              ),
            ),
            SizedBox(height: 20),
            TextButton(
              onPressed: () {
                print("questionController: ${questionController.text}");
                setState(() {
                  questionValue = questionController.text;
                });
              },
              child: Text("SETSTATE BUTTON"),
            ),
            SizedBox(height: 20),
            Text("questionValue: $questionValue"),
            SizedBox(height: 20),
            AddUser(questionController.text),
          ],
        ),
      ),
    );
  }
}

class AddUser extends StatelessWidget {
  final String question;

  AddUser(this.question);

  @override
  Widget build(BuildContext context) {
    return Text("question: $question");
  }
}

【讨论】:

    猜你喜欢
    • 2020-03-22
    • 2013-10-31
    • 1970-01-01
    • 2013-03-26
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多