我有使用StreamBuilder
构建脚本的脚本,这是我的脚本
@override
Widget build(BuildContext context) {
return Material(
child: Scaffold(
appBar: AppBar(
title: Text(widget.categoryName),
),
body: Container(
height: MediaQuery.of(context).size.height,
child: Column(
children: <Widget>[
Divider(
height: 20.0,
),
Flexible(
child:StreamBuilder<List<Products>>(
stream: _productController.stream,
builder: (context, snapshot) {
if (snapshot.hasError) {
return errMess(context, "Failed to fetch data");
} else {
if (snapshot.hasData) {
if (snapshot.data.length > 0) {
return ProductList(categoryId: widget.categoryId,category: snapshot.data,onLoad: (categoryId, limit, offset) {
loadProduct(categoryId, limit, offset);
}
);
} else {
return Container(width: 0.0, height: 0.0);
}
} else {
return CupertinoActivityIndicator();
}
}
},
)),
Divider(
height: 25.0,
),
],
),
)
)
);
}
我的代码没有错误,但是当流返回null
我在GridView
结果之前显示的null
内的数据时,我有一个关于获取数据的问题离开了。
我知道StreamBuilder
填充了Container
,因为结果是null
。那么我该如何处理呢?我想继续显示我的GridView
答案 0 :(得分:0)
StreamBuilder具有一个属性调用initialData,可用于创建初始快照。在您的代码中,尝试将其设置为Products的空列表,并删除snapshot.hasData和snapshot.data.length> 0的条件以呈现ProductList,我想这是网格,直到流加载之前都没有数据真正的产品。
类似的东西:
Flexible(
child:StreamBuilder<List<Products>>(
initialData: <Products>[],
stream: _productController.stream,
builder: (context, snapshot) {
if (snapshot.hasError) {
return errMess(context, "Failed to fetch data");
} else {
return ProductList(categoryId: widget.categoryId,category: snapshot.data,onLoad: (categoryId, limit, offset) {
loadProduct(categoryId, limit, offset);
}
);
}
}
},
)),
希望有帮助!