如果没有结果,请处理streambuilder

时间:2019-07-15 15:12:27

标签: flutter dart

我有使用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

1 个答案:

答案 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);
                    }
                    );
                  } 
              }
            },
          )),

希望有帮助!