flutter - 如何避免“空检查运算符使用空值” 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();
},
)),
),
);
}
}
正确的文件
错误的文档,仅当我添加包含错误字段的文档时才会发生错误。在这种情况下,其他. 有什么办法控制吗?
解决方案
这行代码导致错误:
plants[index].name!
告诉 linter name的null assertion operator (!)
值永远不能为空。这允许您plants[index].name
用作String
. 由于name
有时可以为null,所以最好使用?
操作符,表示该值为类型String?
解决此问题的一种方法是告诉 linter 该值可以为 null 并使用提供备用值的 null 检查:
plants[index]?.name ?? 'Name'
推荐阅读
- node.js - 带有 mongoose 和 node.js 的评论部分
- github - pull-request-review-request-event 发送 webhook 的次数与审阅者的数量一样多
- azure-ad-b2c - 生产中的魔术链接和“message.state 为空或为空”
- gradle - java.lang.ClassNotFoundException: org.jsoup.Jsoup 在运行时
- powershell - 如何将 jenkinsfile 参数传递给 powershell 脚本
- reactjs - Redux-Saga 调用后组件未重新渲染
- jpa - 无法为 jpa 规范编写 junit 测试用例
- python - 仅使用入队和出队来反转队列
- r - 使用方括号和索引在 R 中进行两次子集化
- java - 当 xml 文件包含日期时,使用 import com.thoughtworks.xstream.XStream 时出现问题