【发布时间】:2020-01-25 14:22:14
【问题描述】:
我不确定如何处理 Flutter StreamBuilder。我找到了 3 个案例,并且想知道哪一个会比其他的更好。或者,除了这些情况,还有其他更好的处理方式。
另外,ConnectionState.active 和 ConnectionState.done 有什么区别?我是否应该使用 snapshot.data 等到 ConnectionState.done (Case 1 或 Case 2)。
案例 1:
return StreamBuilder(
builder: (context, snapshot) {
if (snapshot.hasError) return Text('Error');
switch (snapshot.connectionState) {
case ConnectionState.none:
case ConnectionState.waiting:
return CircularProgressIndicator();
case ConnectionState.active:
case ConnectionState.done:
return Text('${snapshot.data}');
}
return null;
},
);
案例 2:
return StreamBuilder(
builder: (context, snapshot) {
if (snapshot.hasError) return Text('Error');
switch (snapshot.connectionState) {
case ConnectionState.none:
case ConnectionState.waiting:
case ConnectionState.active:
return CircularProgressIndicator();
case ConnectionState.done:
return Text('${snapshot.data}');
}
return null;
},
);
案例 3:
return StreamBuilder(
builder: (context, snapshot) {
if (snapshot.hasError) return Text('Error');
if (!snapshot.hasData) return CircularProgressIndicator();
return Text('${snapshot.data}');
},
);
【问题讨论】:
-
如果连接状态没有改善用户体验,显示一条消息。如果连接状态已完成,请检查 snapshot.hasData 是否显示小部件或错误是否再次显示消息。活动和等待可用于显示指标或您喜欢的任何内容。活动意味着(基本)连接处于活动状态。
-
感谢您的评论。我以为检查snapshot.hasData和ConnectionState只是粒度问题,所以我不知道如果ConnectionState.done,我仍然需要检查snapshot.hasData。另一件事是只有在ConnectionState.done时,我应该访问snapshot.data,或者我也可以在ConnectionState.active时使用snapshot.data和Widget?
标签: flutter dart flutter-layout