- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
为简单起见,假设我有两个屏幕:
StoriesListScreen
StoryDetailsScreen
填充 StoriesListScreen
我使用 Stream
从 Firestore 获取一些数据:
Stream<QuerySnapshot> getFirstTenStories() {
return _firestore.collection('stories').limit(10).snapshots();
}
然后我使用这个 Stream
在StreamBuilder
在StoriesListScreen
并将它包含的文档映射到一些 Story
对象。然后我使用 ListView.builder
这创造了一些 StoriesListTile
采取 Story
的对象对象作为参数,以便它们可以呈现列表中的每个对象。
所以一切都很好......
但是当用户点击 StoriesListTile
, 我想打开 StoryDetailsScreen
并显示该特定 Story
的详细信息对象。
自 Story
对象此时存在并且已经在 StoriesListTile
中传递对象,我可以很容易地传入这个 Story
反对 StoryDetailsScreen
:
Navigator.of(context).push(MaterialPageRoute(builder: (context) => StoryDetailsScreen(_story));
所以它工作正常,但是......
我希望能够听到用于创建 Story
的数据的任何变化。对象。
目前,如果我在 Firestore 中的数据发生变化,那么我在 StoriesListScreen
中的列表会发生变化将自动更新,因为它使用 Stream<QuerySnapshot>
.
我想在 StoryDetailsScreen
中做同样的事情但我传递给 StoryDetailsScreen
的内容屏幕不是 Stream
, 它是一个 Story
不会更新的对象。
一个解决方案可能是从 Firestore 获取这个故事数据并使用 Stream<DocumentSnapshot>
在StreamBuilder
在StoryDetailsScreen
,所以如果数据发生变化,它会自动更新。但这将意味着浪费另一个 Firestore 读取,因为我已经有了这些数据。
那么我怎样才能传入 Stream<DocumentSnapshot>
对于我的 StoryDetailsScreen
的特定文档?是否可以从 Stream<QuerySnapshot>
中提取它我已经有了?
最佳答案
我真的很喜欢这个问题,你让我重新考虑我是如何编写我的应用程序的,我现在想知道现在是否还有更好的方法。谢谢!
我认为从根本上说,这个问题是关于将业务逻辑(流中的数据)与 UI(当前加载的页面)分开。
我会考虑使用 Provider并创建一个服务来提供应用程序中的任何小部件都可以访问的流。这样你就有了一个单一的服务来监听变化,更新数据,应用程序中的所有其他东西都在监听那个流。
这就是您要找的吗?
编辑
监听数据库更改的流是否收费?
答案是“视情况而定”这是来自 Cloud Fire-Store Billing documentation .
监听查询结果
Cloud Firestore 允许您监听查询结果并在查询结果发生变化时获得实时更新。
当您收听查询结果时,每次添加或更新结果集中的文档时,您都需要为一次读取付费。由于文档已更改而从结果集中删除文档时,您也需要为阅读付费。 (相比之下,删除文档后,您无需为阅读付费。)
此外,如果监听器断开连接超过 30 分钟(例如,如果用户下线),您将像发出全新查询一样为读取付费。
关于flutter - 如何从 QuerySnapshot 中获取特定文档的 DocumentSnapshot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57345261/
我有一个异步方法来返回带条件的Firebase查询的文档长度,并且o已在该方法中使用await实现。代码如下。 //////////////////////// getUreadMsgCount(gr
我对 flutter 和云存储有疑问。我的数据库连接正在运行,可以创建新条目,但是我的Stream返回空文档。 我的database.dart类: final CollectionReference
也许这是一个新手问题,但是我正在学习动荡,异步,等待, future 之类的东西还不适合我。无论如何,我想做的是从“field.documents [index] [“name”]”中获取值并建立一个
我在下面的代码中遇到以下错误:querySnapshot.forEach 不是函数。我还尝试使用 documentSnapshot 功能,但它也不起作用。 constructor(props) {
我正在尝试从一组团队中返回选定的团队。看来我需要将快照转换为 Team 对象。我怎么做?有没有更简单的方法将快照转换为数组?我是 firebase/angular 的新手,所以希望我遗漏了一些简单的东
我正在听 firestore 中的一系列文档(作为聊天应用程序的一部分)。我是通过使用一个服务来做到这一点的,它创建了一个 Stream如下: _snapshots$ = Firestore.inst
我的代码目前有问题,我正在尝试在数据库中获取特定的数据。我要执行的操作是“收集”>“我要获取的特定文档”>“字段(我的阵列数据)”。到目前为止,我有一个代码可以执行我想做的事情,但是问题是它仅获取文档
我想问一下集合中是否有一个文档,其“test”字段等于1 2或4。但是很遗憾,我没有找到合适的解决方案。 这是我的方法不幸的是,这在这里不起作用(等于1 | 2 | 4)。是否还是运算符? (|) F
我偶然发现了一个奇怪的问题。我正在尝试完成一个简单的事情-将所有内容从QuerySnapshot转换为某种类型的集合。 fun createReminder(reminder: Reminder) =
public class MainActivity extends AppCompatActivity { private static final String TAG = "100";
我正面临 Firebase 快照的问题。我成功地将我的 Fierbase 帐户与我的 Xcode 项目联系起来。我能够更改 Firestore 云中的数据。但我无法阅读。这是我的功能: class U
我在 Swift 中开发了一个应用程序,我得到了一个包含数字的数组,我想在 Firebase 中获取一些数据。 问题是 getDocuments 扰乱了我的迭代。 当我用打印输出进行测试时,第一个打印
我想跳出 forEach 循环。考虑一下: db.collection('users').get().then(querySnapshot => { if (!querySnapsho
为简单起见,假设我有两个屏幕: StoriesListScreen StoryDetailsScreen 填充 StoriesListScreen我使用 Stream 从 Firestore 获取一些
我想检查 querySnapShot 是否为空。我该怎么做? 这是我的代码: function getOrders(userid) { db.collection("users").doc(use
尝试从 Firestore 实时数据库访问数据,但我一直收到这条消息和其他几条消息。在这种情况下如何访问数据?提前谢谢你 class HomePage extends StatefulWidget {
我正在尝试对数据库进行查询,以获取子集合“Angular 色”的所有文档以重定向到不同的路线。 let userRef1 = db.collection('users').doc(currentUse
未处理的异常:使用firebase在Flutter googlesignin中类型'Future'不是'QuerySnapshot'类型的子类型。 :user.uid).get(); 它用于使用Fir
我尝试为我的应用程序实现 Streambuilder,但在尝试我的代码时出现错误。这是我得到的错误: The following NoSuchMethodError was thrown buildi
定义的Stream,我从类构造函数中调用uid Stream get hotels { // print("$uid in stream"); return ownerCollecti
我是一名优秀的程序员,十分优秀!