Flutter 类别';列表<;文档快照>';没有实例getter';文件';

Flutter 类别';列表<;文档快照>';没有实例getter';文件';,flutter,google-cloud-firestore,stream,Flutter,Google Cloud Firestore,Stream,我正在尝试实现一种功能,该应用程序在网格视图中显示除当前用户之外的所有用户详细信息。我一直在尝试将快照分配给\u流,然后在StreamBuilder()中应用\u流值。但它却抛出了一个错误 Database _database = Database(); Stream _stream; String currentUserId; @override void initState() { getCurrentUserId(); //currentUserId gets its value

我正在尝试实现一种功能,该应用程序在网格视图中显示除当前用户之外的所有用户详细信息。我一直在尝试将
快照
分配给
\u流
,然后在
StreamBuilder()
中应用
\u流
值。但它却抛出了一个错误

Database _database = Database();
Stream _stream;
String currentUserId;

@override
void initState() {
    getCurrentUserId(); //currentUserId gets its value here
    getAllUsers();
    super.initState();
}

getAllUsers() async {


 Stream<QuerySnapshot> snapshots = await _database.getAllUsers();
    
 _stream = snapshots.map((querySnapshot) => querySnapshot.documents.where((documentSnapshot)
          => documentSnapshot.data["userId"] != currentUserId
  ).toList())
}

//..

StreamBuilder(
stream: _stream,
builder: (context, snapshot) {
 if (snapshot.data != null)
 //..
 
}
//..
)
数据库类

getAllUsers() async {
    return await _firestore.collection("users").snapshots();
}
例外情况

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following NoSuchMethodError was thrown building StreamBuilder<dynamic>(dirty, state: _StreamBuilderBaseState<dynamic, AsyncSnapshot<dynamic>>#6e31f):
Class 'List<DocumentSnapshot>' has no instance getter 'documents'.
Receiver: Instance(length:2) of '_GrowableList'
Tried calling: documents

The relevant error-causing widget was: 
  StreamBuilder<dynamic> file:///Users/suriantosurianto/AndroidStudioProjects/apui/lib/fragments/home_fragment.dart:66:12
When the exception was thrown, this was the stack: 
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
#1      _HomeFragmentState.build.<anonymous closure> (package:apui/fragments/home_fragment.dart:80:42)
#2      StreamBuilder.build (package:flutter/src/widgets/async.dart:509:81)
#3      _StreamBuilderBaseState.build (package:flutter/src/widgets/async.dart:127:48)
#4      StatefulElement.build (package:flutter/src/widgets/framework.dart:4619:28)
...
════════════════════════════════════════════════════════════════════════════════════════════════════
════════ widgets库捕获到异常═══════════════════════════════════════════════════════
生成StreamBuilder时引发了以下NoSuchMethodError(脏,状态:_StreamBuilderBaseState#6e31f):
类“List”没有实例获取程序“documents”。
接收者:“\u GrowtableList”的实例(长度:2)
尝试呼叫:文档
导致错误的相关小部件是:
StreamBuilderfile:///Users/suriantosurianto/AndroidStudioProjects/apui/lib/fragments/home_fragment.dart:66:12
引发异常时,这是堆栈:
#0 Object.noSuchMethod(省道:核心补片/对象补片。省道:53:5)
#1\u HomeFragmentState.build。(包装:apui/fragments/home_fragments.dart:80:42)
#2 StreamBuilder.build(包:flatter/src/widgets/async.dart:509:81)
#3\u StreamBuilderBaseState.build(包:flatter/src/widgets/async.dart:127:48)
#4 StatefulElement.build(包:flatter/src/widgets/framework.dart:4619:28)
...
════════════════════════════════════════════════════════════════════════════════════════════════════

我们不知道该错误指向的是哪一行,但是如果我理解正确,原因可能是
StreamBuilder
属性
的类型应该是
类()

似乎
\u stream
是使用
toList
方法()从
stream
创建的
列表。我会尝试删除这个
toList
方法,看看会发生什么

我希望这会有帮助

// NEW
     _stream = snapshots.map((querySnapshot) => querySnapshot.documents.where((documentSnapshot)
     => documentSnapshot.data["userId"] != currentUserId
     ).toList() as QuerySnapshot);
这里的
querySnapshot
是一个
列表


您可能必须使用
querySnapshot。where()

正如其他人指出的,querySnapshot是一个
列表,而不是
文档快照
,因此您不能使用getter
.documents
(该getter仅用于
文档快照
,而不是
列表
),这是因为我们正在检索除当前用户之外的每个用户的
文档快照
(每个用户都有
文档快照
,因此也有
列表

如果要返回
List
类型的流,则

_stream = snapshots
    .map<List<DocumentSnapshot>>((querySnapshot) => 
       querySnapshot.where((documentSnapshot) => 
          documentSnapshot.data["userId"] != currentUserId)
 );
\u流=快照
.map((querySnapshot)=>
querySnapshot.where((documentSnapshot)=>
documentSnapshot.data[“userId”!=currentUserId)
);

错误告诉您
querySnapshot
是一个
列表
,而不是
querySnapshot
。因此,您必须将其视为一个列表。您能详细说明一下吗?
\u stream
不是列表,根据
\u stream.runtimeType
,它是一个
\u MapStream
,无论
toList()
方法如何,它都不起作用。为什么querySnapshot是一个列表??
_stream = snapshots
    .map<List<DocumentSnapshot>>((querySnapshot) => 
       querySnapshot.where((documentSnapshot) => 
          documentSnapshot.data["userId"] != currentUserId)
 );