Flutter 错误:对 null 值使用了 Null 检查运算符

Flutter Error: Null check operator used on a null value

提问人:MaybeExpertDBA 提问时间:9/15/2021 更新时间:9/15/2021 访问量:714

问:

我想在 flutter 中开发银行应用程序。 但是我收到此错误:在空值上使用空检查运算符 我尝试了“颤振通道稳定”,但它不起作用,还尝试了“!”运算符(如您在代码中看到的那样),但它不起作用...... :(

请帮帮我.. 注意:容器小部件很长,这就是我没有选择复制的原因。

  Widget projectWidget() {
        return FutureBuilder<List<Histories>>(
            future: dbHelper.getHistories(),
            builder: (context, snapshot) {
              if (snapshot.hasData && snapshot.data!.length > 0) return Container();
              return ListView.builder(
                itemCount: snapshot.data!.length,
                itemBuilder: (context, index) {
                  Histories histories = snapshot.data![index];
                  return Container();
                },
              );
            });
      }
Android iOS 颤振 dart null

评论


答:

1赞 FrancescoPenasa 9/15/2021 #1

你的 if 语句有问题,以这种方式,你尝试在数据仍然不存在时访问数据,请尝试如下操作

return FutureBuilder<List<Histories>>(
        future: dbHelper.getHistories(),
        builder: (BuildContext context, AsyncSnapshot<List<Histories>> snapshot) {
          if (snapshot.connectionState == ConnectionState.done)  {
            return ListView.builder(
                itemCount: snapshot.data!.length,
                itemBuilder: (context, index) {
                  Histories histories = snapshot.data![index];
                      return Container();
                },
              );
          } else if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(child: CircularProgressIndicator());
          } else {
            print('error');
            return Text('error');
          }
        });

或者你可以用你的 if 语句代替它,如下所示if (snapshot.connectionState == ConnectionState.done)

return FutureBuilder<List<Histories>>(
        future: dbHelper.getHistories(),
        builder: (BuildContext context, AsyncSnapshot<List<Histories>> snapshot) {
          if (snapshot.hasData && snapshot.data!.length > 0)  {
            return ListView.builder(
                itemCount: snapshot.data!.length,
                itemBuilder: (context, index) {
                  Histories histories = snapshot.data![index];
                      return Container();
                },
              );
          } else if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(child: CircularProgressIndicator());
          } else {
            print('error');
            return Text('error');
          }
        });
2赞 aman 9/15/2021 #2

在构建器内部,其他条件是错误的。使用当前代码,即使快照没有数据,它也会尝试调用,这就是导致 null 错误的原因。snapshot.data!.length

Widget projectWidget() {
        return FutureBuilder<List<Histories>>(
            future: dbHelper.getHistories(),
            builder: (context, snapshot) {
              if (snapshot.hasData && snapshot.data!.length > 0) 
              return ListView.builder(
                itemCount: snapshot.data!.length,
                itemBuilder: (context, index) {
                  Histories histories = snapshot.data![index];
                  return Container();
                },
              );

               else 
                return Center(child: CircularProgressIndicator());
            });
      }