You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
6.9 KiB
Swift
154 lines
6.9 KiB
Swift
//import Flutter
|
|
//import UIKit
|
|
//
|
|
//@UIApplicationMain
|
|
//@objc class AppDelegate: FlutterAppDelegate {
|
|
// override func application(
|
|
// _ application: UIApplication,
|
|
// didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
|
// ) -> Bool {
|
|
// GeneratedPluginRegistrant.register(with: self)
|
|
//
|
|
// weak var penguin = self.registrar(forPlugin: "penguin")
|
|
// let penguinFactory = PenguinViewFactory(messenger: penguin!.messenger())
|
|
// self.registrar(forPlugin: "PenguinView")!.register(penguinFactory, withId: "penguin_lib")
|
|
// return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
|
// }
|
|
//}
|
|
|
|
|
|
|
|
import Flutter
|
|
import UIKit
|
|
|
|
@UIApplicationMain
|
|
@objc class AppDelegate: FlutterAppDelegate {
|
|
var flutterEngine: FlutterEngine?
|
|
|
|
|
|
override func application(
|
|
_ application: UIApplication,
|
|
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
|
) -> Bool {
|
|
flutterEngine = FlutterEngine(name: "my flutter engine")
|
|
guard let flutterEngine = flutterEngine else {
|
|
fatalError("Flutter engine initialization failed")
|
|
}
|
|
flutterEngine.run()
|
|
GeneratedPluginRegistrant.register(with: flutterEngine)
|
|
GeneratedPluginRegistrant.register(with: self)
|
|
let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
|
|
let channel = FlutterMethodChannel(name: "com.aamir/launch_penguin_ui",
|
|
binaryMessenger: controller.binaryMessenger)
|
|
|
|
channel.setMethodCallHandler { [weak self] (call: FlutterMethodCall, result: @escaping FlutterResult) in
|
|
|
|
if let arguments = call.arguments as? [String: Any],
|
|
let storyboardName = arguments["storyboardName"] as? String {
|
|
if call.method == "launchPenguin"{
|
|
// if let penguinModel = PenguinModel(from: arguments) {
|
|
// self.model = penguinModel
|
|
// initPenguin(args: penguinModel)
|
|
// } else {
|
|
// print("Error: Failed to initialize PenguinModel from arguments")
|
|
// }
|
|
self?.launchPenguinView(arguments: arguments, result: result)
|
|
//let penguinView =
|
|
// PenguinView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height), viewIdentifier: 0, arguments: arguments, binaryMessenger: controller.binaryMessenger)
|
|
// let penguinUIView = penguinView.initPenguin(args: penguinModel)
|
|
// penguinUIView.frame = self.view.bounds
|
|
// penguinUIView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
|
// self.view.addSubview(penguinUIView)
|
|
// self?.launchStoryboard(named: storyboardName, result: result, arguments: arguments )
|
|
}
|
|
else {
|
|
result(FlutterMethodNotImplemented)
|
|
}
|
|
} else {
|
|
result(FlutterError(code: "INVALID_ARGUMENT", message: "Storyboard name is required", details: nil))
|
|
}
|
|
|
|
}
|
|
|
|
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
|
|
}
|
|
|
|
private func launchStoryboard(named storyboardName: String, result: @escaping FlutterResult, arguments: [String: Any]) {
|
|
let storyboard = UIStoryboard(name: storyboardName, bundle: nil)
|
|
|
|
guard let flutterEngine = flutterEngine else {
|
|
result(FlutterError(code: "ENGINE_UNAVAILABLE", message: "Flutter engine is not available", details: nil))
|
|
return
|
|
}
|
|
|
|
guard let viewController = storyboard.instantiateViewController(withIdentifier: "PenguinViewController") as? PenguinViewController else {
|
|
result(FlutterError(code: "INVALID_VIEW_CONTROLLER", message: "Unable to instantiate view controller", details: nil))
|
|
return
|
|
}
|
|
|
|
// Use the custom initializer
|
|
viewController.setProperties(flutterEngine: flutterEngine, arguments: arguments)
|
|
|
|
// let penguinViewController = PenguinViewController(flutterEngine: flutterEngine, arguments: arguments)
|
|
|
|
if let rootViewController = window?.rootViewController {
|
|
rootViewController.present(viewController, animated: true, completion: nil)
|
|
result("Storyboard \(storyboardName) launched successfully")
|
|
} else {
|
|
result(FlutterError(code: "UNAVAILABLE", message: "Root view controller is not available", details: nil))
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
private func launchPenguinView(arguments: [String: Any], result: @escaping FlutterResult) {
|
|
guard let controller = window?.rootViewController as? FlutterViewController else {
|
|
result(FlutterError(code: "NO_CONTROLLER", message: "No Flutter view controller found", details: nil))
|
|
return
|
|
}
|
|
|
|
let penguinView = PenguinView(
|
|
frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height),
|
|
viewIdentifier: 0,
|
|
arguments: arguments,
|
|
binaryMessenger: controller.binaryMessenger
|
|
)
|
|
|
|
let penguinUIView = penguinView.view()
|
|
penguinUIView.frame = controller.view.bounds
|
|
penguinUIView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
|
|
|
controller.view.addSubview(penguinUIView)
|
|
|
|
result(nil) // Call result to indicate the method was successfully handled
|
|
}
|
|
}
|
|
|
|
// private func launchStoryboard(named storyboardName: String, result: @escaping FlutterResult, arguments arguments: [String: Any]) {
|
|
// let storyboard = UIStoryboard(name: storyboardName, bundle: nil)
|
|
// guard let viewController = storyboard.instantiateViewController(withIdentifier: "PenguinViewController") as? PenguinViewController else {
|
|
// result(FlutterError(code: "INVALID_VIEW_CONTROLLER", message: "Unable to instantiate view controller", details: nil))
|
|
// return
|
|
// }
|
|
//
|
|
// // viewController.arguments = arguments
|
|
//
|
|
// guard let flutterEngine = flutterEngine else {
|
|
// result(FlutterError(code: "ENGINE_UNAVAILABLE", message: "Flutter engine is not available", details: nil))
|
|
// return
|
|
// }
|
|
//
|
|
// viewController.flutterEngine = flutterEngine
|
|
// viewController.arguments = arguments
|
|
//
|
|
// if let rootViewController = window?.rootViewController {
|
|
// rootViewController.present(viewController, animated: true, completion: nil)
|
|
// result("Storyboard \(storyboardName) launched successfully")
|
|
// } else {
|
|
// result(FlutterError(code: "UNAVAILABLE", message: "Root view controller is not available", details: nil))
|
|
// }
|
|
// }
|
|
//}
|
|
|