也许标题有点混乱,这就是问题所在。
当我导航到一个新页面时,我将发送一个 http 请求并显示加载微调器,当我返回 http 响应时,页面内容将被替换。
但是有时候,http响应太快了,我总是在动画还没有完成的时候得到响应,所以在动画期间加载微调器会被替换为页面内容。
在替换的那一刻,动画会卡住一点。
我试图在动画完成后发送http请求,但我还没有找到方法。
有没有人有解决这个问题的想法?
推送到新页面:
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => NewPage(id)),
);
新页面小部件:
class _NewPageState extends State<NewPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: Repository().getItem(widget.id),
builder: (context, AsyncSnapshot<Model> itemsSnapshot) {
if (itemsSnapshot.hasError) {
return ErrorWigets();
}
if (itemsSnapshot.data == null) {
return Spinner();
}
return ListView(
children: <Widget>[
// page content
],
);
},
),
);
}
}
Http请求:
class Repository {
Observable<Model> getItem(String id) {
return Observable.fromFuture(http.get(
'api_url${id}'))
.map((response) {
if (response.statusCode == 200) {
return Model.fromJson(json.decode(response.body));
} else {
throw Exception('request Failed');
}
});
我目前的方法是使用流构建器,因此当我尝试导航到新页面时它会立即发出 http 请求。