Активность Flutter не перемещается после того, как сообщение получено от собственной стороны iOS через MethodChannel
Я разрабатываю приложение flutter, которое должно представлять собственный интерфейс, и для этого я использую MethodChannel
чтобы установить связь между flutter
и iOS Native
и я могу передавать данные из представления флаттера в собственный и навигационный собственный пользовательский интерфейс, и как только собственный пользовательский интерфейс отклоняется, я отправляю сообщение обратно во флаттер. Я борюсь с навигацией по флаттер-экрану после получения сообщения с родной стороны.
Позвольте мне объяснить более подробно: я создал объект канала, а затем вызвал собственную функцию из флаттера как:
Future<Null> _openNewPage() async {
final response = await channel.invokeMethod("openPage", ["Hi From Flutter"]);
}
Код iOS в didFinishLaunchingWithOptions
:
let flutterController : FlutterViewController = window?.rootViewController as! FlutterViewController
let channel: FlutterMethodChannel = FlutterMethodChannel(name: "CHANNEL", binaryMessenger: flutterController.binaryMessenger)
channel.setMethodCallHandler { [unowned self] (methodCall, result) in
guard let arg = (methodCall.arguments as! [String]).first else { return }
switch methodCall.method {
case "openPage":
self.openSecondPage(result: result)
default:
debugPrint(methodCall.method)
result(methodCall.method)
}
}
self.openSecondPage
имеет код навигации по собственному пользовательскому интерфейсу iOS и работает правильно.
После того, как этот пользовательский интерфейс отклонен, сообщение о результате передается через параметр для flutter. Этот метод обрабатывает результат здесь Future<dynamic> _handleMethod(MethodCall call) async {}
.
в этом методе я продвигаю активность флаттера как:
Navigator.of(context).push(MaterialPageRoute(builder: (context) => PreviewActivity(videoFile: path)));
Но это не сработало, может ли кто-нибудь помочь мне.
ОБНОВЛЕНО:
Собственный код, передающий данные в представление флаттера:
let flutterVC = UIApplication.shared.keyWindow?.rootViewController as? FlutterViewController
let channel = FlutterMethodChannel(name: "CHANNEL", binaryMessenger: flutterVC as! FlutterBinaryMessenger)
channel.invokeMethod("sendFromNative", arguments: path)
а на стороне флаттера я реализовал код как:
DashBoardParentScreen({Key key, this.guestUserType}) : super(key: key){
channel.setMethodCallHandler(_handleMethod);
}
Future<dynamic> _handleMethod(MethodCall call) async {
switch (call.method) {
case 'sendFromNative':
String text = call.arguments as String;
print("PathFromNative:: $text");
pushPreviewScreen(text);
}
}
pushPreviewScreen(String path){
print("calledFunction:: $path");
Navigator.of(context).push(MaterialPageRoute(builder: (context) => PreviewActivity(videoFile: path)));
}
Как только собственный метод отправит сообщение стороне флаттера, мне нужно показать другой экран предварительного просмотра.