0

所以我对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 它显示有一个列表中每个项目的实例。问题是当我尝试显示列表时,它给了我这个错误:必须向文本小部件提供非空字符串。'package:flutter/src/widgets/text.dart':断言失败:第 360 行 pos 10:'data != null'

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

4

2 回答 2

0

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

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

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

于 2020-11-13T23:37:06.343 回答
0

尝试这样做:

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());
      }
}),

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

于 2020-11-13T23:06:59.090 回答