我正在开发一个使用 StreamBuilder 和 GridView.builder 的小部件,它可以完美地填充
stream: FirebaseFirestore.instance.collection("events").where("venueId", isEqualTo: widget.venueId).snapshots()
但是,当我在一瞬间添加 order by 时,它会刷新并消失。
stream: FirebaseFirestore.instance.collection("events").where("venueId", isEqualTo: widget.venueId).orderBy("date").snapshots()
这就是我所说的地方。
class VenueGridWidgetVerticalState extends State<VenueGridWidgetVertical> {
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: FirebaseFirestore.instance.collection("events").where("venueId", isEqualTo: widget.venueId).orderBy("date").snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return const Center(child: Text('Loading events...'));
}
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 1,
mainAxisExtent: MediaQuery.of(context).size.height / 8,
),
itemBuilder: (BuildContext context, int index) {
我是否要等到它被命令在屏幕上显示结果,因为现在它似乎显示然后排序然后消失?
在订购数据之前显示加载指示器
StreamBuilder(
stream: FirebaseFirestore.instance.collection("events").where("venueId", isEqualTo: widget.venueId).orderBy("date").snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return const Center(child: Text('Loading events...'));
} else if (snapshot.data.docs.isEmpty) {
// Data fetched but not ordered yet
return const Center(child: CircularProgressIndicator());
}
return GridView.builder(
// ... rest of your GridView code
);
},
),
此代码检查两个条件:
这是一个更简单的解决方案,避免了用于排序标志的额外流和逻辑。