Flutter пользовательских маршрутизации переходов вызывает initstate на выходе виджета - PullRequest
0 голосов
/ 02 апреля 2019

Я создал пользовательский PageRouteBuilder для Flutter, так как мне нужен был переход, который делает что-то вроде этого:

  • Новый экран скользит в
  • Текущий экран (старый экран) скользит out

Оба экрана скользят одновременно.

Мне удалось сделать это следующим образом:

class SlideLeftRoute extends PageRouteBuilder {
  final Widget widget;
  final Widget prevWidget;

  SlideLeftRoute({this.widget, this.prevWidget})
      : super(
      pageBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) {
        return widget;
      },
      transitionsBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) {
        List<Widget> stackWidgets = new List<Widget>();

        if (prevWidget != null) {
          stackWidgets.add(Positioned(
              child: SlideTransition(
                  position: new Tween<Offset>(
                    begin: const Offset(0.0, 0.0),
                    end: const Offset(1.0, 0.0),
                  ).animate(animation),
                  child: prevWidget)));
        }

        stackWidgets.add(Positioned(
            child: SlideTransition(
                position: new Tween<Offset>(
                  begin: const Offset(-1.0, 0.0),
                  end: const Offset(0.0, 0.0),
                ).animate(animation),
                child: child)));

        return Stack(
              children: stackWidgets,
            );
      }
  );
}

Визуально, это работает как.

Функционально у него есть неожиданное поведение: initState предыдущего виджета вызывается, когда я перемещаюсь с помощью этого построителя.

Предположим,Я нахожусь в Screen1, затем перейдите к Screen2, предоставляющему этот конструктор для Navigator.

Мой Screen1 выдвигается, в то время как Screen2 скользит в соответствии с указанным SlideTransitions.

При этом initState вызывается в Screen1.

Теперь я ожидаю, что initState вызовут для Screen2, так как я собираю его и нажимаюэто на мою навигацию.Но почему это для Screen1?

Можно ли как-нибудь избежать этого?

Спасибо!

...