Как заставить модуль Flutter вернуться к собственной активности Android после того, как собственная активность Android запускает вторичный маршрут?
Я добавляю флаттер в существующий проект Android, и все работает нормально, кроме одного:
В моем проекте Andrid есть только один модуль Flutter в этом модуле Flutter. У меня есть два маршрута, которые будут отображаться в разных частях проекта Android:
initialRoute: '/',
routes: {
'/': (_) => MyHomePage(),
'/settings': (_) => _SettingsPage()
}
В Android Activity, если я начну новое действие Flutter следующим образом:
startActivity(
FlutterActivity
.withCachedEngine(flutterEngineId)
.build(this)
)
Он запустит Flutter с маршрутом страницы по умолчанию (/
), что является ожидаемым результатом. Затем на этой странице Flutter, если я вернусь назад, он вызовет движок Flutter и вернется к активности Android. Пока все хорошо.
Но если я запускаю действие Flutter с настраиваемым начальным маршрутом, а затем нажимаю кнопку "Назад", он не запускает движок Flutter и переходит к действию Android, а к исходному маршруту Flutter (в данном случае /
маршрут).
startActivity(
FlutterActivity
.withNewEngine()
.initialRoute("/settings")
.build(this)
)
Почему у нас такое поведение, если мы указываем начальный маршрут при запуске FlutterActivity
?
И если это ожидаемое поведение, то как лучше всего заставить его перейти к активности Android?
2 ответа
Вот выдержка из документации:
Если имя маршрута начинается с косой черты, то оно рассматривается как «глубокая ссылка», и до того, как этот маршрут будет отправлен, маршруты, ведущие к нему, также будут отправлены. Даже если бы маршрут был просто / a, приложение началось бы с / и / a загружено. https://api.flutter.dev/flutter/material/MaterialApp/initialRoute.html
Вы можете попробовать переименовать свой маршрут «/ settings» в «settings».
Попробуйте SystemNavigator.pop(), чтобы выделить самый верхний маршрут флаттера.
Подробнее на https://api.flutter.dev/flutter/services/SystemNavigator/pop.html.