【问题标题】:NoSuchMethodError: invalid member on null (Flutter Web)NoSuchMethodError:null 上的无效成员(Flutter Web)
【发布时间】: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


【解决方案1】:

正如前面在 cmets 中提到的,检查空 List 的值很可能会导致错误。一个简单的空检查器应该可以解决这个问题。

final users = Provider.of<List<ClientUser>>(context);
if (users != null && users.length > 0){
  return ListView.builder(
    itemBuilder: (context, index) {
      return UserTile(user: users[index]);
    },
    itemCount: users.length,
  );
}
else {
  // Display loading widget
  
}

【讨论】:

    猜你喜欢
    • 2021-03-08
    • 2021-04-25
    • 1970-01-01
    • 2021-07-18
    • 2021-04-28
    • 2021-08-29
    • 2021-01-14
    • 2021-10-12
    • 2021-02-22
    相关资源
    最近更新 更多