根据快照大小处理querysnapshot的方式?

the way of dealing with querysnapshot according to the size of snapshot?

您好,我现在正在尝试使用 fetchAllPosts 函数获取 Stream<List<Post>>

toPosts 是一个将 QuerySnapshot 转换为 Stream 的转换器。

// firebase_provider.dart

  Stream<List<Post>> fetchAllPosts() {
    return _firestore
        .collection('Posts')
        .orderBy('commenttime', descending: true)
        .snapshots()
        .transform(toPosts);
  }

此 Stream 值将用作 feed_page.dart

中 StreamProvider 中的 ListView
// feed_page.dart

  Widget build(BuildContext context) {
    return StreamProvider<List<Post>>.value(
      value: firestoreProvider.fetchAllPosts()

但是,如果快照是空的,我想在 feed_page.dart(不是在 ListView 中)

中以不同的方式处理它

我该如何处理?下面的方法是我试过的,但我不确定在这种情况下最后一个 else 语句中应该放些什么。或者我觉得会有更好的办法

  Stream<List<Post>> fetchAllPosts2() {
    if (_firestore
            .collection(COLLECTION_POSTS)
            .orderBy(KEY_POSTTIME, descending: true)
            .snapshots()
            .length
            .toString() !=
        "0") {
      return _firestore
          .collection(COLLECTION_POSTS)
          .orderBy(KEY_POSTTIME, descending: true)
          .snapshots()
          .transform(toPosts);
    } else {
      return ???????????;
    }
  }

请帮帮我 ;-)

您是否尝试过 FutureBuilder 方法?


class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
            body: FutureBuilder<List<String>>(
          future: fetchFunction(),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting)
              return CircularProgressIndicator();
            else if (snapshot.connectionState == ConnectionState.done) {
              return snapshot.data.isEmpty?Text("empty list"):ListView(children: [...snapshot.data.map.((post)=>Text(post)),],);
            }
          },
        ),
      ),
    );
  }
}