Это мое первое приложение во Flutter, все было хорошо и гладко, но теперь, когда я немного заблокирован.

Я не могу перемещаться между CupertinoTabBar и моим экраном входа в систему (у которого его не должно быть), как показано на изображении.

Вход в систему работает нормально, и когда он получает ответ 200 от сервера, он переходит к представлению с помощью CupertinoTabBar.

Но когда я нажимаю кнопку LogOut, мне нужно вернуться к loginView без какой-либо панели вкладок.

Единственный способ, которым я смог вернуться к входу в систему, таков:

Navigator.push(context, CupertinoPageRoute(builder: (context) => LoginView()),);

И это сохраняет мой LoginView внутри tabBar в стеке виджетов, и, что еще хуже, если я снова войду в систему, я в конечном итоге наложу еще один tabBar на предыдущий.

Что может быть лучшим подходом для этого?

Navigate beetwen screen without navigation an CupertinoTabBar

Большое спасибо, Габи

1
Gabi 5 Дек 2019 в 15:24

1 ответ

Вы можете использовать pushAndRemoveUntil для извлечения маршрутов, которые вам не нужны в стеке. Вероятно, вы хотите удалить все такие маршруты:

Navigator.of(context).pushAndRemoveUntil(CupertinoPageRoute(builder: (context) => LoginView()), (r) => false);

Или, если ваш текущий маршрут выходит из системы, вы можете заменить его маршрутом входа в систему, и стек маршрутов останется прежним:

Navigator.of(context).pushReplacement(CupertinoPageRoute(builder: (context) => LoginView()));
0
Igor Kharakhordin 5 Дек 2019 в 16:57
Спасибо!! ваше решение не сработало, потому что проблема была не в навигаторе, моя ошибка. Я смешивал Scaffold на экране входа в систему с CupertinoTabScaffold на другом в качестве родительского виджета. Теперь, когда я упростил CupertinoTabBar под эшафотом, он работает хорошо.
 – 
Gabi
7 Дек 2019 в 21:45