本文最后更新于 807 天前,其中的信息可能已经有所发展或是发生改变。
1. FutureBuilder
Center(
child: FutureBuilder(
// initialData: "加载中",
// future: Future.delayed(Duration(seconds: 2), () => "123"),
future: Future.delayed(Duration(seconds: 2), () => throw "网络错误error"),
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot){
// snapshot.connectionState
if(snapshot.hasError) {
return Text("${snapshot.error}");
}
// initialData
if(snapshot.hasData) {
return Text("数据 ${snapshot.data}");
}
return CircularProgressIndicator();
},
),
),
);
2. StreamBuild(StreamController)
默认: 单次监听 (无监听时 会缓存事件)
多监听: StreamController.broadcast(); (无监听时 不会缓存事件)
其他Stream构建方式
Stream<DateTime> getDate() async*{
while(true) {
await Future.delayed(Duration(seconds: 1));
yield DateTime.now();
}
}
StreamController _streamController = StreamController();
// StreamController _streamController = StreamController.broadcast();
int index = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Test'),
),
body: Center(
child: StreamBuilder(
stream: _streamController.stream,
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot){
// snapshot.connectionState
if(snapshot.hasError) {
return Text("${snapshot.error}");
}
// initialData
if(snapshot.hasData) {
return Text("数据 ${snapshot.data}");
}
return CircularProgressIndicator();
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
_streamController.sink.add("event ${index++}");
},
),
);
}