Flutter Firestore:带有初始数据的 FirestoreBuilder

Flo*_*ran 3 dart firebase flutter google-cloud-firestore

我正在制作我的第一个 Flutter 应用程序,遇到了一个问题,但没有找到任何解决方案。

我有一个渲染 Firestore 文档的视图,有两种方法可以到达该视图:

  • 从我已经加载文档的列表中
  • 来自带有 uid 作为参数 (args) 附加的动态链接

因此,为了监听文档更改并在从链接到达时加载数据,我使用了 FirestoreBuilder,如下所示:

    return FirestoreBuilder<EventDocumentSnapshot>(
        ref: eventsRef.doc(args.uid),
        builder: (context, AsyncSnapshot<EventDocumentSnapshot> snapshot, Widget? child) {
          if (!snapshot.hasData) {
            return Container();
          }
          Event? event = snapshot.requireData.data;
          
          return Scafold(); //Rest of my rendering code
        }
     );
       
 
Run Code Online (Sandbox Code Playgroud)

当我已经拥有数据但仍监听更改时,如何避免首次调用 Firebase?主要问题是我的英雄动画因此无法工作。

我尝试使用 aStreamBuilderinitialDataparam,但由于它期待流,所以我不知道如何转换我的数据。

Flo*_*ran 5

好吧,经过多次尝试,我自己找到了解决方案,所以我添加了可以为 null 的 Model 对象作为initialData,但让我挣扎的是如何在构建器中获取数据。您必须根据数据的来源调用不同的方法。

    return StreamBuilder(
        initialData: args.event
        ref: eventsRef.doc(args.uid),
        builder: (context, AsyncSnapshot<dynamic> snapshot) {
          // Here is the trick, when data is coming from initialData you only
          // need to call requireData to get your Model
          Event event = snapshot.requireData is EventDocumentSnapshot ? snapshot.requireData.data : snapshot.requireData;
          
          return Scafold(); //Rest of my rendering code
        }
     );
Run Code Online (Sandbox Code Playgroud)