You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter+Firebase Firestore报NoSuchMethodError:调用null的id属性求助

Flutter Firebase Firestore 报错排查:NoSuchMethodError: The getter 'id' was called on null

错误栈追踪

E/flutter (13517): [ERROR:flutter/shell/common/shell.cc(93)] Dart Unhandled Exception: NoSuchMethodError: The getter 'id' was called on null.
E/flutter (13517): Receiver: null
E/flutter (13517): Tried calling: id, stack trace: #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:38:5)
E/flutter (13517): #1      EnterpriseFirebaseApi.fetchEnterprisesByUser (package:paprika_app/authentication/services/enterprise_services.dart:22:42)
E/flutter (13517): #2      AuthenticationRepository.fetchEnterprisesByUser (package:paprika_app/authentication/resources/authentication_repository.dart:33:30)
E/flutter (13517): #3      AuthenticationBloc._fetchEnterprisesByUser (package:paprika_app/authentication/blocs/authentication_bloc.dart:143:10)
E/flutter (13517): #4      AuthenticationBloc.userLogged.<anonymous closure> (package:paprika_app/authentication/blocs/authentication_bloc.dart:103:15)
E/flutter (13517): <asynchronous suspension>
E/flutter (13517): #5      AuthenticationBloc.userLogged (package:paprika_app/authentication/blocs/authentication_bloc.dart:99:5)
E/flutter (13517): <asynchronous suspension>

对应报错代码片段

来自EnterpriseFirebaseApi.fetchEnterprisesByUser方法第22行:

/// Looking for enterprises with this user
await FirebaseFirestore.instance
    .collection('enterprises_users')
    .where('userId', isEqualTo: user.id)
    .where('state', isEqualTo: 'A')
    .get()
    .then((docs) {
  docSnapshotList.addAll(docs.docs);
});

问题原因

错误直接指向代码中的user.id——此时user对象为null,调用其id属性触发了空指针异常。说明调用fetchEnterprisesByUser方法时,传入的user参数是空值。

解决方案

  1. 添加参数非空校验
    在fetchEnterprisesByUser方法开头加入空值判断,提前拦截异常:
// 假设方法定义为 Future<List<...>> fetchEnterprisesByUser(User? user)
if (user == null) {
  // 抛出明确错误或返回空结果,根据业务需求选择
  throw ArgumentError("user参数不能为空");
  // 或者 return [];
}
// 后续执行原Firestore查询逻辑
  1. 追溯调用链路
    检查AuthenticationBloc._fetchEnterprisesByUser到fetchEnterprisesByUser的调用过程,确认传递的user是否已正确初始化:
  • 确认是否从Firebase Auth获取到了有效的用户实例(比如FirebaseAuth.instance.currentUser是否不为null)
  • 避免在用户未完成登录流程时调用该查询方法
  1. 利用Dart空安全强制非空
    将fetchEnterprisesByUser的user参数声明为非空类型,编译阶段就阻止空值传入:
Future<List<DocumentSnapshot>> fetchEnterprisesByUser(required User user) {
  // 方法逻辑
}

内容的提问来源于stack exchange,提问作者Vishvam Moliya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:05:26