Как вызвать контроллер быстрого просмотра с помощью контроллера навигации во флаттере через канал метода Flutter - PullRequest
1 голос
/ 07 мая 2020

Я пытаюсь вызвать UINavigationController, который я определил в отдельном файле под названием «MainNavigationController.swift», через частную функцию, которую я определил в моем файле AppDelegate.swift под названием «callNavigator ()». Я вызываю этот метод из Flutter стороны через канал метода, который успешно отправляет обратно сообщение о том, что происходит какое-то взаимодействие «На стороне Flutter / Dart нет проблем». Я хочу, чтобы функция отображала sh вид поверх экрана флаттера с помощью навигатора, определенного в «MainNavigationController.swift». Код в моем MainNavigationController.swift выглядит следующим образом:

import Foundation
    import UIKit

    class MainNavigationController: UINavigationController{
        override func viewDidLoad() {
            super.viewDidLoad()
        }
        private func navigateToMainInterface() {
            let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
           guard let mainNavigationVc = mainStoryboard.instantiateViewController(withIdentifier:"MainNavigationController") as? MainNavigationController else {
                return

            }
            present(mainNavigationVc, animated: true, completion: nil)

        }
    }
Then I am trying to call this class in my "AppDelegate.swift file" through my "callNavigator()" private function as a constructor. The code is as follows in the Appdelegate.swift file :


    @UIApplicationMain
    @objc class AppDelegate: FlutterAppDelegate {
      override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?

      ) -> Bool {
        let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
        GeneratedPluginRegistrant.register(with: self)      

        let navigatorChannel = FlutterMethodChannel(name: "com.fluttertonative/navigateToCameraSDK", binaryMessenger:  controller.binaryMessenger)
       navigatorChannel.setMethodCallHandler ({
          [weak self] (call: FlutterMethodCall, result: FlutterResult) -> Void in
          // Note: this method is invoked on the UI thread.
          guard call.method == "getSwiftNavigator" else {
            result(FlutterMethodNotImplemented)
            return
          }
          self?.callNavigator()

       })
        GeneratedPluginRegistrant.register(with: self)
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
      }
        private func receiveGreeting(result: FlutterResult){
            result("Hello from Swift Code...")
        }
        private func callNavigator(){
            MainNavigationController()

        }
    }

Однако, Я получаю предупреждение в Xcode о том, что функция callNavigator, пытающаяся вызвать «MainNavigationController», не использует свой результат, в котором говорится: «Результат инициализатора 'UINavigationController' не используется». Я новичок в Swift и не уверен, что делать.

Я установил начальный навигатор на FlutterViewController в моем Main.storyBoard, где я поместил фиктивный текст. Я хочу, чтобы при вызове канала метода со стороны Flutter запускалась функция callNavigator, которая, в свою очередь, вызывала MainNavigationController в файле MainNavigationController.swift, который должен был открыть новое представление поверх на экране Flutter.

Мне нужна помощь в достижении этого, поскольку я новичок в Swift Language

тогда мой код дротика следующий:

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  static const navigateToCameraSDK = const MethodChannel('com.fluttertonative/navigateToCameraSDK');

  String _greeting = 'awaiting swift call..';


  Future _getnavigator() async{
    try {
      final result = navigateToCameraSDK.invokeMapMethod('getSwiftNavigator');
      print(result);
    } on PlatformException catch (e){
      print('error:$e');
      _greeting = 'error occured:$e';
    }
    setState(() {
      _greeting ='call successful you have got the swift Navigator';
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Container(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Text(_greeting),
              CupertinoButton(
                child: Text('call swift to get the navigator'),
                onPressed: _getnavigator,
                borderRadius:BorderRadius.all(Radius.circular(13.0)),
                color: Colors.blue[300],
              ),
            ],
          ),
        ));
  }
}

и моя раскадровка выглядит следующим образом: Flutter View Controller является исходным контроллером просмотра. введите описание изображения здесь: enter image description here

...