Флаттер, анимация навигации не плавная, когда я пытался получить 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, когда я пытаюсь перейти на новую страницу.

0 ответов

Другие вопросы по тегам