【发布时间】:2020-09-12 18:42:35
【问题描述】:
我正在为 Flutter Web 应用程序创建一个从 Firestore 数据库中获取数据的卡片列表,但会抛出此错误:
- "The following JSNoSuchMethodError was thrown building
UserList(dirty, dependencies: [InheritedProvider<List<ClientUser>>],
state: _UserListState#ab779): NoSuchMethodError: invalid member on
null: 'length'"
这是我用来构建列表的代码:
class _UserListState extends State<UserList> {
@override
Widget build(BuildContext context) {
final users = Provider.of<List<ClientUser>>(context);
return ListView.builder(
itemBuilder: (context, index) {
return UserTile(user: users[index]);
},
itemCount: users.length,
);
}
在我的数据库服务文件中,我是这样从数据库中获取快照并从快照中获取列表的:
List<ClientUser> _clientListFromSnapshot(QuerySnapshot snapshot) {
return snapshot.documents.map((doc) {
return ClientUser(
name: doc.data['name'] ?? '', difficulty: doc.data['difficulty'] ?? 5);
}).toList();
}
// get users stream
Stream<List<ClientUser>> get users {
return userCollection.snapshots().map(_clientListFromSnapshot);
}
这是我声明 StreamProvider 的方式:
return StreamProvider<List<ClientUser>>.value(
value: UserDatabaseService().users,
我哪里错了??
【问题讨论】:
-
您是否尝试在返回
ListView.builder之前对用户添加空检查? -
您需要检查您从数据库中返回的信息,以验证它是否为空。根据错误,Flutter 表明您正在使用空值。正如@ShubhamGupta 提到的,请在您的代码中添加异常处理,以更好地验证错误。
-
谢谢大家!空检查工作
-
使用此链接可能会有所帮助
标签: flutter google-cloud-firestore flutter-web