Активность 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)));
  }

Как только собственный метод отправит сообщение стороне флаттера, мне нужно показать другой экран предварительного просмотра.

0 ответов

Другие вопросы по тегам