我刚刚转换了我的项目 Null Safety,但出现错误提示
The method '[]' can't be unconditionally invoked because the receiver can be 'null'. Try making the call conditional (using '?.') or adding a null check to the target ('!').
我有点迷惑我不知道该怎么办。
return ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: snapshot.data['Interest'].length ,// i am getting error here
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.only(top: 12.0),
child: bottomCardList(
'assets/1 (6).jpeg',
snapshot.data['Interest'][index]// i am getting error here
.toString(),
() {}),
);
});
}),
谢谢
答案 0 :(得分:0)
发生的情况是,在切换到空安全之后,您不能直接使用可以为空的变量编写语句,而不检查它们是否为空。在这种情况下,变量 snapshot.data 可以为 null,因此您必须相应地编写代码。尝试将您的代码转换为:
return ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: snapshot.data!['interest'].length,
// i am getting error here
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.only(top: 12.0),
child: bottomCardList(
'assets/1 (6).jpeg',
snapshot.data?['Interest'][index] // i am getting error here
.toString(),
),
);
},
);
现在,有了这个,您的 itemCount 错误应该会消失(如果没有,请更新您的 cloud_firestore 插件,它不是空安全的)。至于您在bottomCardList 中遇到的错误,这取决于您的bottomCardList 参数是否为空安全。如果bottomCardList 的类型为bottomCardList(String someVar, String someOtherVar),则可以将其更改为bottomCardList(String someVar, String? someOtherVar)。然后,在您的 bottomCardList 代码中,您必须确保处理 someOtherVar 可以为 null 的情况。
您可以查看此视频以了解更多信息:https://www.youtube.com/watch?v=iYhOU9AuaFs
编辑 对于“未定义对象错误”:
我假设您的构建器参数类似于:
builder: (context, snapshot) {
return ListBuilder etc. etc.
}
尝试将其更改为:
builder: (context, AsyncSnapshot<DocumentSnapshot<Map<String, dynamic>>> snapshot) {
return ListBuilder etc. etc.
}
并且错误应该消失。 DocumentSnapshot 是如果您正在执行 collection.docs.snapshots()。如果您正在执行 collection.snapshots(),请使用 QuerySnapshot 等。