import Foundation import FLAnimatedImage var flutterMethodChannelPenguinIn:FlutterMethodChannel? = nil fileprivate var mainViewController:FlutterViewController! class HMGPenguinInPlatformBridge{ private let channelName = "launch_penguin_ui" private static var shared_:HMGPenguinInPlatformBridge? class func initialize(flutterViewController:FlutterViewController){ shared_ = HMGPenguinInPlatformBridge() mainViewController = flutterViewController shared_?.openChannel() } func shared() -> HMGPenguinInPlatformBridge{ assert((HMGPenguinInPlatformBridge.shared_ != nil), "HMGPenguinInPlatformBridge is not initialized, call initialize(mainViewController:MainFlutterVC) function first.") return HMGPenguinInPlatformBridge.shared_! } private func openChannel(){ flutterMethodChannelPenguinIn = FlutterMethodChannel(name: channelName, binaryMessenger: mainViewController.binaryMessenger) flutterMethodChannelPenguinIn?.setMethodCallHandler { (methodCall, result) in print("Called function \(methodCall.method)") if let arguments = methodCall.arguments as Any? { if methodCall.method == "launchPenguin"{ print("====== launchPenguinView Launched =========") self.launchPenguinView(arguments: arguments, result: result) } } else { result(FlutterError(code: "INVALID_ARGUMENT", message: "Storyboard name is required", details: nil)) } } } private func launchPenguinView(arguments: Any, result: @escaping FlutterResult) { let penguinView = PenguinView( frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height), viewIdentifier: 0, arguments: arguments, binaryMessenger: mainViewController.binaryMessenger ) let penguinUIView = penguinView.view() penguinUIView.frame = mainViewController.view.bounds penguinUIView.autoresizingMask = [.flexibleWidth, .flexibleHeight] mainViewController.view.addSubview(penguinUIView) let args = arguments as? [String: Any] // let loaderImageData = args["loaderImage"] as? FlutterStandardTypedData else { // print("loaderImage data not found in arguments") // result(FlutterError(code: "ARGUMENT_ERROR", message: "Missing loaderImage data", details: nil)) // return // } // let loadingOverlay = UIView(frame: UIScreen.main.bounds) // loadingOverlay.backgroundColor = UIColor.black.withAlphaComponent(0.5) // Semi-transparent overlay // loadingOverlay.autoresizingMask = [.flexibleWidth, .flexibleHeight] // Display the GIF using FLAnimatedImage // let animatedImage = FLAnimatedImage(animatedGIFData: loaderImageData.data) // let gifImageView = FLAnimatedImageView() // gifImageView.animatedImage = animatedImage // gifImageView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height) // gifImageView.center = loadingOverlay.center // gifImageView.contentMode = .scaleAspectFit // loadingOverlay.addSubview(gifImageView) // if let window = UIApplication.shared.windows.first { // window.addSubview(loadingOverlay) // // } else { // print("Error: Main window not found") // } penguinView.onSuccess = { // Hide and remove the loader // DispatchQueue.main.async { // loadingOverlay.removeFromSuperview() // // } } result(nil) } }