FutureBuilder学习
使用异步操作的时候,一定要记住三个状态:等待、错误、正常。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Future学习'),
),
body: FutureBuilder(
//TODO: 通过传入的future来监听,future发生变化时,自动叫builder函数
future: Future.value(123),
//TODO: 初始值 设置以后snapshot.data里面开始就有值,出错后状态才会改成error
initialData: 66,
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
//todo snapshot 返回future最近的状态
switch (snapshot.connectionState) {
case ConnectionState.none:
//TODO:future为null
break;
case ConnectionState.waiting:
// TODO: future 未完成状态
return CircularProgressIndicator();
break;
case ConnectionState.active:
// TODO: stream的状态
break;
case ConnectionState.done:
// TODO: future完成 data和error 只能有一个
var str = snapshot.hasError ? snapshot.error : snapshot.data;
return Text('DONE:$str');
}
return CircularProgressIndicator();
},
),
);
}
可以不用state判断,只需要判断是否等待,然后判断是否错误.
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
}
// TODO: future完成 data和error 只能有一个
var str = snapshot.hasError ? snapshot.error : snapshot.data;
return Text('DONE:$str');
}
那么FutureBuilder和streamBuilder的区别下篇讲。FutureBuilder可以理解为只获取结果,调用=》一个等待的状态=》结束得到数据。