【问题标题】:How to avoid "null check operator used null value" Flutter Firestore [duplicate]如何避免“空检查运算符使用空值” Flutter Firestore
【发布时间】:2021-07-11 01:25:28
【问题描述】:

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

这是我的模型课

我的主页

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

正确的文件

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

错误

【问题讨论】:

    标签: flutter dart dart-null-safety


    【解决方案1】:

    这行代码导致错误:

    plants[index].name!
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 2021-11-11
      • 2021-11-10
      • 2021-10-29
      • 2021-02-25
      • 2023-01-05
      • 2021-08-11
      • 2022-06-15
      相关资源
      最近更新 更多