Flutter从Firebase拉取用户信息时Object类型未定义docs getter错误如何解决
问题原因
这个报错是Dart的类型推断失败导致的,具体有3个错误点:
StreamBuilder没有指定泛型,Dart默认将snapshot.data识别为Object类型,该类型下没有docs属性,所以报错。- 你调用的
getUserByDefault是未实现的空方法,实际可用的用户查询方法是你已经写好的getUserByUserName,调用错误会导致拿不到正确的QuerySnapshot流。 - 你定义的
usersStream变量没有显式声明类型,会进一步加大Dart类型推断的误差。
修复步骤
- 给
usersStream变量添加显式类型声明
// 页面中定义usersStream的位置修改为: Stream<QuerySnapshot>? usersStream;
- 修正搜索按钮点击事件的方法调用,替换成已经实现的查询方法
onsearchBtnClick() async { isSearching = true; setState(() {}); usersStream = await DatabaseMethods() .getUserByUserName(searchUsernameEditingController.text); setState(() {}); }
- 给
StreamBuilder加上泛型约束,明确snapshot.data的类型
Widget searchUsersList() { return StreamBuilder<QuerySnapshot>( stream: usersStream, builder: (context, snapshot) { return snapshot.hasData ? ListView.builder( itemCount: snapshot.data!.docs.length, shrinkWrap: true, itemBuilder: (context, index) { DocumentSnapshot ds = snapshot.data!.docs[index]; return Image.network(ds["imgUrl"]); }, ) : const Center( child: CircularProgressIndicator(), ); }, ); }
修改完成后重启项目即可解决报错。
内容的提问来源于stack exchange,提问作者ABDUL RAZAK S
相关产品推荐
相关产品推荐

