当前位置: 首页 > 知识库问答 >
问题:

类“List”没有实例获取程序“documents”

东门秦迟
2023-03-14

我正在尝试实现一个功能,其中应用程序以网格模式显示除当前用户之外的所有用户的详细信息。我一直试图将快照分配给_stream,然后在StreamBuilder()中应用_stream值。但是它会抛出一个错误。

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)
 //..
 
}
//..
)

新:如果我将添加为QuerySnapshotStreamBuilder中的快照将为空,而不是抛出异常。

// NEW
     _stream = snapshots.map((querySnapshot) => querySnapshot.documents.where((documentSnapshot)
     => documentSnapshot.data["userId"] != currentUserId
     ).toList() as QuerySnapshot);

数据库类

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)
...
════════════════════════════════════════════════════════════════════════════════════════════════════

共有3个答案

益炜
2023-03-14

正如其他人所指出的,querySnapshot是一个列表

如果要返回类型为列表的流

_stream = snapshots
    .map<List<DocumentSnapshot>>((querySnapshot) => 
       querySnapshot.where((documentSnapshot) => 
          documentSnapshot.data["userId"] != currentUserId)
 );
黄逸清
2023-03-14
// NEW
     _stream = snapshots.map((querySnapshot) => querySnapshot.documents.where((documentSnapshot)
     => documentSnapshot.data["userId"] != currentUserId
     ).toList() as QuerySnapshot);

这里的querySnapshot是一个列表

您可能必须使用querySnapshot。其中()

沈子实
2023-03-14

我们不知道这个错误指向哪一行,但是如果我理解正确,原因可能是StreamBuilder属性stream的类型,它应该属于Stream类(参考)。

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

希望对大家有所帮助!

 类似资料:
  • 我想显示某个区域内的用户,但使用地理查询我得到一个错误 “类别”列表 接收器:实例(长度:1)的'_GrowableList' 尝试调用:文档

  • 我想做的是,我正在制作一个具有相同uid的所有文档的未来列表,然后使用FutureBuilder制作一个ListView。 给我错误的部分是, 这里是错误, 非常感谢。

  • 我有一个泛型类型的类,它接受构造函数参数,这样我就可以保留该类型。这是一个我在java代码中经常使用的类,所以我不想更改签名。当我尝试像这样使用构造函数时: 有办法解决这个问题吗?我无法更改的构造函数,太多的java类依赖于它。 我理解整个类型擦除问题,我真的只是想让编译器开心。

  • 问题内容: 在Java中,是否有任何可能的方法来获取某个类的所有实例? 问题答案: 实例化类(Singleton模式)时,可以使用Factory静态初始化程序,然后将工厂构造函数中的每个生成的实例添加到List中。 像这样的东西:

  • 问题内容: 我想获取某个类的对象的所有实例。 例如: 应该是或(顺序无关紧要)。 一个加号是,如果该函数将返回具有所请求类的超类的实例,尽管这不是必需的。 我能想到的一种方法是使用包含实例数组的静态类成员变量。在类的构造函数和析构函数中,我将在数组中添加或删除。如果我必须在许多类上这样做,这将很麻烦且容易出错。 问题答案: 如果您从TrackableObject类派生所有对象,则可以将此类设置为处

  • 这个示例程序将展示如何从一个URL获得一个页面。然后提取页面中的所有链接、图片和其它辅助内容。并检查URLs和文本信息。 运行下面程序需要指定一个URLs作为参数 package org.jsoup.examples; import org.jsoup.Jsoup; import org.jsoup.helper.Validate; import org.jsoup.nodes.Document