也许标题有点混乱,这就是问题所在。
当我导航到新页面时,我将发送一个http请求并显示正在加载的微调器,当我返回http响应时,页面内容将被替换。
但是有时http响应太快,我总是在动画尚未完成时得到响应,因此加载微调器将在动画过程中替换为页面内容。
在替换时,动画会被卡住一点。
我正在尝试在动画制作完成后发送http请求,但是我没有找到解决方法。
有人有解决这个问题的想法吗?
推送到新页面:
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => NewPage(id)),
);
NewPage小工具:
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');
}
});
我当前的方法是使用streambuilder,因此当我尝试导航到新页面时,它将立即发出http请求。