首页 > 解决方案 > 如何避免“空检查运算符使用空值” Flutter Firestore

问题描述

我尝试从集合中获取文档并映射到模型,到目前为止一切都很好。问题是当我添加包含无效字段的文档时,会发生错误。

这是我的模型课 这是我的模型课

我的主页

class HomePage extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 final _plantsProvider = Provider.of<PlantsProvider>(context);
 List<Plant> plants;
 return Scaffold(
  body: Container(
    child: SafeArea(
        child: StreamBuilder(
      stream: _plantsProvider.fetchPlantsStream(),
      builder: (_, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasData && snapshot.data!.docs.length > 0) {
          plants = snapshot.data!.docs.map(
            (doc) {
              return Plant.fromJSON(doc.data(), doc.id);
            },
          ).toList();
          return ListView.builder(
            itemCount: plants.length,
            itemBuilder: (buildContext, index) =>
                ListTile(title: Text(plants[index].name!)),
          );
        } else
          return CircularProgressIndicator();
      },
      )),
    ),
  );
 }
}

正确的文件

在此处输入图像描述

错误的文档,仅当我添加包含错误字段的文档时才会发生错误。在这种情况下,其他. 有什么办法控制吗?

在此处输入图像描述

错误 在此处输入图像描述

标签: flutterdartdart-null-safety

解决方案


这行代码导致错误:

plants[index].name!

告诉 linter name的null assertion operator (!)值永远不能为空。这允许您plants[index].name用作String. 由于name有时可以为null,所以最好使用?操作符,表示该值为类型String?

解决此问题的一种方法是告诉 linter 该值可以为 null 并使用提供备用值的 null 检查:

plants[index]?.name ?? 'Name'

推荐阅读