Флаттер, анимация навигации не плавная, когда я пытался получить http ответ во время анимации
Может быть, название немного запутано, вот в чем проблема.
Когда я перехожу на новую страницу, я отправляю запрос http и показываю счетчик загрузки, содержимое страницы будет заменено, когда я получу ответ http.
Но иногда http-ответ слишком быстрый, я всегда получаю ответ, когда анимация еще не завершена, поэтому спиннер загрузки будет заменен на содержимое страницы во время анимации.
В момент замены анимация немного застрянет.
Я пытаюсь отправить запрос http после завершения анимации, но я не нашел способа сделать это.
У кого-нибудь есть идея решить эту проблему?
нажмите на новую страницу:
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => NewPage(id)),
);
NewPage Wigets:
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, когда я пытаюсь перейти на новую страницу.