如何使用 GetX 使用 Firestore 流填充列表

Posted

技术标签:

【中文标题】如何使用 GetX 使用 Firestore 流填充列表【英文标题】:How to Populate List with Firestore stream using GetX 【发布时间】:2020-08-03 16:42:50 【问题描述】:

我正在尝试填充 RxList (GetX Flutter package) 所以我可以在我的 Listview.builder 中显示实时数据。我尝试在我的 Getx 控制器中使用以下代码:

final videos = List < Video > ().obs;

@override
void onReady() async 
  videos.bindStream(loadVideos());
  super.onInit();


Stream <List<Video>> lista() 
  Stream <QuerySnapshot> stream =
    Firestore.instance.collection('videos').snapshots();

  return stream.map((qShot) => qShot.documents
    .map((doc) => Video(
      title: doc.data['title'],
      url: doc.data['url'],
      datum: doc.data['datum']))
    .toList());


loadVideos() async 
  await
  for (List < Video > tasks in lista()) 
    videos.addAll(tasks);
  

但我得到以下异常:

“Future”不是“Stream”类型的子类型

【问题讨论】:

【参考方案1】:

只需使用 BindStream 来收听您的 Stream,如下所示:

final videos = List<Video>().obs;

@override
void onInit() async 
  videos.bindStream(lista());
  super.onInit();


Stream <List<Video>> lista() 
  Stream <QuerySnapshot> stream =
    Firestore.instance.collection('videos').snapshots();

  return stream.map((qShot) => qShot.documents
    .map((doc) => Video(
      title: doc.data['title'],
      url: doc.data['url'],
      datum: doc.data['datum']))
    .toList());

【讨论】:

想问一下,如果我想在屏幕上对用户输入进行过滤并在 Firestore.collection where 条件下使用它,我该如何实现?

以上是关于如何使用 GetX 使用 Firestore 流填充列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GetX 可观察变量?

如果我们在 GetX 上使用 bottomNavigationBar,如何使用内部导航

如何使用 GetX 订阅另一个 Controller 中的更改?

如何使用 GetX 包管理 Flutter Web URL 路由?

如何使用 GetX 实现 Flutter TextFormField 验证器?

如何在彼此内部使用 2 个 getx 控制器?