根据快照大小处理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)),],);
}
},
),
),
);
}
}
您好,我现在正在尝试使用 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
// 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)),],);
}
},
),
),
);
}
}