Я пытаюсь вызвать 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 является исходным контроллером просмотра. введите описание изображения здесь: 