Как сбросить базовый маршрут в моем приложении Flutter - то есть вывести любые маршруты и заменить его новым, используя Navigator. - PullRequest
0 голосов
/ 28 августа 2018

Новичок во Flutter, пожалуйста, простите меня, если это очевидно, но я прочитал документацию и попробовал несколько вариантов Navigator, но ни один из них не работает так, как мне бы хотелось. Задача: у нас есть сложная (ну, полусложная) серия экранов и т. Д., Которые обрабатывают процесс входа / авторизации / регистрации. Это может опуститься до 3 или 4 уровней в стеке маршрутов. Это все хорошо - не беспокойтесь.

Проблема возникает, когда мы получаем успешное событие входа в систему (с нескольких разных путей) и хотим перейти на «домашнюю» страницу. Как только мы попадаем на домашнюю страницу, это должен быть новый «корень» дерева маршрутов (я уверен, что это неправильная терминология - но я думаю, что идея солидна).

Таким образом, учитывая, что мы можем быть на 1/2/3 или даже на 4 уровня ниже и хотим «вытолкнуть» и заменить весь стек (с любыми событиями перехода, пожалуйста) на новый корень верхнего уровня - какой магический набор Навигатора или методы будут делать это чисто?

Мой текущий (ужасный) подход состоит в том, чтобы передать «pop ()» уровни и выполнить вызов Navigator.pushReplacementNamed () (все они здесь называются маршрутами), но это не универсальное решение (нужно точно знать, как много уровней) и, что еще хуже, он вызывает переход «анимации» на экран «pop» на доли секунды для каждой функции pop (), что выглядит ... не очень хорошо.

ТИА!

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Navigator предоставляет больше, чем просто pop. Вы можете делать такие вещи как:

Navigator.pushNamedAndRemoveUntil(context, '/', (_) => false);

Это в основном подтолкнет дом и удалит все маршруты за новым

0 голосов
/ 28 августа 2018

Попробуйте этот код:

    Navigator.pushAndRemoveUntil(
                    context,
                    MaterialPageRoute(
                      builder: (BuildContext context) => YourInitialPage(),
                    ),
                    ModalRoute.withName('/'));

Если вы не хотите переходить, вы можете переопределить или расширить MaterialPageRoute класс

...