【发布时间】:2019-09-14 19:14:44
【问题描述】:
我正在像这样使用StreamBuilder -
StreamController streamController = StreamController.broadcast();
StreamBuilder(
stream: streamController.stream,
builder: (BuildContext context, AsyncSnapshot snapshot) {
return (snapshot.hasData == true) //THIS CONDITION!!!
? CircularProgressIndicator()
: myWidget();
)
我正在像这样添加到我的信息流中 -
onPressed: () {
streamController.add(null);
},
我无法理解显示进度指示器或小部件应检查的条件。因为我没有传递任何数据,所以我不能使用hasData。我尝试传递虚拟数据,但hasData 永远不会变为假(即使在异步函数结束后)。
我尝试使用connectionState,但它始终处于活动状态。我不知道为什么它没有变为waiting 状态。当我使用FutureBuilder 时会这样。 (我以为我可以检查状态是否为waiting,显示进度指示器,但这不起作用。为什么??)
请帮忙。
【问题讨论】:
-
你想用
streamController.add()方法实现什么?调用onPressed时会发生什么? -
我调用一个 API 并等待它完成。由于它有点慢,我想在完成之前显示进度指示器。
-
所以你需要
FutureBuilder,而不是StreamBuilder -
当按下按钮时调用此 API,所以最初当屏幕打开时,我只希望
myWidget出现。当我们必须在打开屏幕时调用 API 时,我们不使用FutureBuilder吗?
标签: asynchronous dart flutter stream