import Flutter import UIKit @main @objc class AppDelegate: FlutterAppDelegate { private let channelName = "com.payfrit.app/beacon" private var beaconScanner: BeaconScanner? override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { GeneratedPluginRegistrant.register(with: self) // Set up beacon scanner method channel guard let controller = window?.rootViewController as? FlutterViewController else { return super.application(application, didFinishLaunchingWithOptions: launchOptions) } beaconScanner = BeaconScanner() let channel = FlutterMethodChannel(name: channelName, binaryMessenger: controller.binaryMessenger) channel.setMethodCallHandler { [weak self] (call: FlutterMethodCall, result: @escaping FlutterResult) in guard let self = self, let scanner = self.beaconScanner else { result(FlutterError(code: "UNAVAILABLE", message: "Beacon scanner not initialized", details: nil)) return } switch call.method { case "hasPermissions": result(scanner.hasPermissions()) case "isBluetoothEnabled": result(scanner.isBluetoothEnabled()) case "startScan": var regions: [String] = [] if let args = call.arguments as? [String: Any], let regionList = args["regions"] as? [String] { regions = regionList } scanner.startScan(regions: regions) { beacons in result(beacons) } onError: { error in result(FlutterError(code: "SCAN_ERROR", message: error, details: nil)) } case "stopScan": scanner.stopScan() result(nil) default: result(FlutterMethodNotImplemented) } } return super.application(application, didFinishLaunchingWithOptions: launchOptions) } }