【问题标题】:Textwidget is null when waiting data in futurebuilder在 futurebuilder 中等待数据时,Textwidget 为空
【发布时间】:2021-02-25 21:40:02
【问题描述】:

所以我对futurebuilder 有意见。 首先是我的代码:

FutureBuilder(
              future: DBProvider.db.getAllTasks(),
              builder:(BuildContext context, AsyncSnapshot snapshot) {
                              if (snapshot.connectionState ==
                                  ConnectionState.waiting) {
                                return Center(
                                  child: Text("Loading..."),
                                );
                              } else if (snapshot.hasData) {
                                print(snapshot.data);
                                return Column(
                                  children: List.generate(snapshot.data.length,
                                      (index) {
                                    return Text(snapshot.data[index].title); // the problem is here
                                  }),
                                );
                                     } else {
                                             return Center(
                                             child: CircularProgressIndicator());
                                     }
}),

我使用 DBProvider.db.getAllTask​​s() 获取数据,该数据将返回一个列表,然后我使用构建器呈现此数据,snapshot.data 不等于 null,因为当我打印 snapshot.data 时它显示列表中的每个项目都有一个实例。 问题是当我尝试显示列表时,它给了我这个错误: 必须向 Text 小部件提供非空字符串。 'package:flutter/src/widgets/text.dart': 断言失败:第 360 行 pos 10: 'data != null'

这个错误是因为文本小部件。 我该如何解决这个问题? 提前致谢。

【问题讨论】:

  • 标题是否为空?因为您不能将空字符串传递给文本小部件,所以它不一定是为空的 snapshot.data
  • 谢谢,是的,这似乎是我将查看我的 sql 代码并查看它是否在数据库中插入项目的问题。感谢您的帮助

标签: flutter dart flutter-futurebuilder


【解决方案1】:

您是否调试过检查,如果每个标题都有一个值并且不为空?尝试使用以下代码进行调试:

.....
print(snapshot.data);
List.generate(snapshot.data.length,
       (index) {                      
          print('$index 
          ${snapshot.data[index].title}');
     }),
.....

如果任何标题为空,您将知道错误原因。

【讨论】:

  • 谢谢,是的,这似乎是我将查看我的 sql 代码并查看它是否在数据库中插入项目的问题。感谢您的帮助
【解决方案2】:

尝试这样做:

FutureBuilder(
    future: DBProvider.db.getAllTasks(),
    builder:(BuildContext context, AsyncSnapshot snapshot) {
      if (snapshot.connectionState ==
          ConnectionState.waiting) {
        return Center(
          child: Text("Loading..."),
        );
      } else if (snapshot.hasData && snapshot.connectionState == ConnectionState.done) { /// to ensure that data is not "null"
        print(snapshot.data);
        return Column(
          children: List.generate(snapshot.data.length,
              (index) {
            return Text(snapshot.data[index].title); 
          }),
        );
      } else {
          return Center(
          child: CircularProgressIndicator());
      }
}),

让我知道它是否有效......

【讨论】:

    猜你喜欢
    • 2021-02-10
    • 2020-09-02
    • 2019-10-08
    • 2020-03-22
    • 2021-06-27
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多