FutureBuilder主要用于异步通信。
首先定义了一个异步的Future 方法, getText().
之后在FutureBuilder里面执行了这个异步方法类。builder里面定义了根据各种case返回相应的数据。
Future<String> getText() async {
await Future.delayed(const Duration(seconds: 1));
try {
// throw Exception('has exception');
return 'get data';
} catch (e) {
return Future.error(e);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('next page'),
),
body: FutureBuilder<String>(
future: getText(),
builder: (context,snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator(),);
}
// error handling
if (snapshot.hasError){
return Center(child: Text(snapshot.error.toString()));
}
if (snapshot.hasData) {
return Center(child: Text(snapshot.data!));
}
return const Center(child: Text('no data'));
},
)
);
}
}