#flutter #flutter-navigation
#флаттер #flutter-навигация
Вопрос:
В приложении flutter я подключил один собственный экран, используя канал платформы. После этого я хочу вернуться в flutter и открыть новый экран flutter, но я не могу открыть экран.
Я следую следующему шагу: 1) Из flutter я вызываю собственный экран по каналу метода. 2) После этого из native я вызываю flutter по каналу метода, но в этом процессе я получаю данные из native, но другой экран не открыт.
У меня есть такая реализация:
Future<dynamic> searchCallHandler(MethodCall call) async {
switch (call.method) {
case 'openSearch':
print('call callMe : arguments = ${call.arguments}');
navigatorKey.currentState.push(
MaterialPageRoute(builder: (context) => SearchLocation()),
);
return Future.value('called from platform!');
default:
print('Unknowm method ${call.method}');
throw MissingPluginException();
break;
}
}
в приведенном выше коде получите значение аргументов, но не переходите на экран поиска flutter.
Комментарии:
1. то же самое (( github.com/flutter/flutter/issues/75314
Ответ №1:
Вам нужно понять, как flutter работает с native here и стеком действий.
В приложении flutter есть одно основное действие, которое расширяет FlutterActivity
. Все ваши представления и экраны отображаются в этом действии. Поэтому, когда вы открываете свое приложение, в собственном стеке активности Android есть только одно действие ( FlutterActivity
).
Теперь, когда вы вызываете метод для запуска нового Activity
на собственном, он запускает новый Activity
, а собственный стек действий Android имеет 2 действия.
После этого, когда вы вызываете:
navigatorKey.currentState.push(
MaterialPageRoute(builder: (context) => SearchLocation()),
);
через канал метода flutter все еще переходит к новому экрану в своей собственной activity ( FlutterActivity
), которая находится за текущей видимой собственной активностью.
Итак, решение таково:
Вызовите finish()
перед вызовом openSearch
метода из собственного конца.
Это уничтожит текущую встроенную активность и позволит FlutterActivity
выйти на передний план, и вы сможете увидеть экран поиска в flutter.
Комментарии:
1. Спасибо. Завершение действия работает, но если я не хочу завершать собственное действие, потому что при обратном нажатии я хочу увидеть это действие. Можно ли добиться этого с помощью другого решения?