【问题标题】:Flutter Error: The body might complete normally, causing 'null' to be returned, but the return type is a potentially non-nullable typeFlutter 错误:主体可能正常完成,导致返回“null”,但返回类型可能是不可为空的类型
【发布时间】:2021-06-26 15:16:03
【问题描述】:

我正在使用启用了 null 安全性的新 dart 版本 。

有了这个任务列表:

  List<Task> tasks = [
    Task(name: 'find a way to live happy'),
    Task(name: 'Listen to music!!!'),
    Task(name: 'Live in the other world till ur power is off'),
  ];

当我尝试在这样的 ListView.builder 构造函数中使用它时:

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: tasks.length,
      itemBuilder: (context, index) {
         TaskTile(
          taskTitle: tasks[index].name,
          isChecked: tasks[index].isDone,
          checkboxCallback: (bool? checkboxState) {
            setState(() {

              tasks[index].toggleDone();
            });
          },
        );
      },
    );
  }

我收到此错误:

错误:主体可能正常完成,导致返回“null”,但返回类型可能是不可为 null 的类型。

运行日志中出现此错误:

错误:必须返回非空值,因为返回类型“Widget”不允许为空。

更多信息,Task 类定义如下:

class Task {
  String name;
  bool isDone;

  Task({this.name = '', this.isDone = false});

  void toggleDone() {
    isDone = !isDone;
  }
}

【问题讨论】:

    标签: flutter dart flutter-listview dart-null-safety


    【解决方案1】:

    您没有返回 TaskTile 小部件:

    return ListView.builder(
      itemCount: tasks.length,
      itemBuilder: (context, index) {
         TaskTile(
    

    应该是:

    return ListView.builder(
      itemCount: tasks.length,
      itemBuilder: (context, index) {
         return TaskTile(
    

    【讨论】:

    • 那是描述性的,下次我会小心并从这个错误中吸取教训,这确实花费了我的时间和大量的搜索,但它对我没有用,因此错误非常愚蠢. @patrick-ohara 谢谢;
    【解决方案2】:

    您忘记在您的itemBuilder 中使用return

    使用

    ListView.builder(
      itemBuilder: (context, index) {
        return TaskTile(...); // <-- 'return' was missing 
      },
    )
    

    【讨论】:

    • 可怜我!!!我错过了什么,天哪!!!问题是,由于他们添加了 null 安全性,每次都会出现许多错误,因此我很困惑。也许当我习惯了 null 安全性时,我可能会更容易阅读错误。此外,我认为 Dart 提供的错误描述对我有误导性,它没有直接通过 IMO 点。非常感谢@copsonroad
    猜你喜欢
    • 2021-11-15
    • 2021-09-29
    • 2022-08-06
    • 2021-11-21
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多