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

//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))
// }
// }
//}