【问题标题】:the getter 'text' was called on null flutter在 null 颤动上调用了 getter 'text'
【发布时间】:2020-05-31 20:47:28
【问题描述】:

我的 Flutter 应用中出现此错误:

NoSuchMethodError:在 null 上调用了 getter 'text'。 接收方:空 尝试调用:文本 也可以看看: https://flutter.dev/docs/testing/errors

import 'package:flutter/material.dart';

void main() {
  runApp(
    NewApp()
  );
}

class NewApp extends StatefulWidget {
  NewApp({Key key}) : super(key: key);

  @override
  _NewAppState createState() => _NewAppState();
}

class _NewAppState extends State<NewApp> {
  TextEditingController textController;

  @override
  Widget build(BuildContext context) {
    return Container(
       child: Column(
         children: <Widget>[
           TextField(
            controller: textController,
          ),
          Text(
            textController.text
          )
         ],
       )
    );
  }
}

【问题讨论】:

  • 通常你应该解释你试图解决的问题,但是我觉得这个错误很模糊。在一个完美的世界中,错误会说“textController尚未初始化”

标签: flutter variables dart controller null


【解决方案1】:

您似乎尚未初始化您的TextEditingController。可以这样声明的时候初始化,

TextEditingController textController = TextEditingController();

必须在使用它之前对其进行初始化,否则实例 textController 将保持为空,而 textController.text 在空时被调用。

【讨论】:

    【解决方案2】:

    您收到错误是因为 textController 尚未实例化,因此其值为 null。您可以使属性调用为 null-aware 以跳过错误:

    textController?.text
    

    你会得到其他错误。修复其他错误后,该应用程序将正常运行,但我怀疑它是否符合您的要求。

    【讨论】:

      【解决方案3】:

      你有几个错误,所以我将发布整个工作代码。您缺少 MaterialApp 和 Scaffold 小部件。这些是您的应用程序运行所必需的(每个屏幕都需要脚手架)。

      至于您的 TextController,您必须检查控制器是否存在,以及 controller.text 是否有值,否则当您的小部件需要一个字符串时,您会尝试分配 null。我在这里用三元表达式解决了这个问题。

      condition ? if yes block : if no block

      完整代码:

      import 'package:flutter/material.dart';
      
      void main() {
        runApp(NewApp());
      }
      
      class NewApp extends StatefulWidget {
        NewApp({Key key}) : super(key: key);
      
        @override
        _NewAppState createState() => _NewAppState();
      }
      
      class _NewAppState extends State<NewApp> {
        TextEditingController textController;
      
        @override
        Widget build(BuildContext context) {
          return MaterialApp(
            home: Scaffold(
              body: Container(
                  child: Column(
                children: <Widget>[
                  TextField(
                    controller: textController,
                  ),
                  Text(textController != null && textController.text != null
                      ? textController.text
                      : "")
                ],
              )),
            ),
          );
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-29
        • 1970-01-01
        • 1970-01-01
        • 2020-01-21
        • 1970-01-01
        • 2021-08-11
        • 2020-11-04
        相关资源
        最近更新 更多