【问题标题】:Add Flutter method channel to the IOS share extension将 Flutter 方法通道添加到 IOS 共享扩展
【发布时间】:2022-11-07 19:46:18
【问题描述】:

我想在 iOS 共享扩展中添加 Flutter 平台通道(这甚至可能吗?

在主应用程序的 AppDelegate 我会简单地使用这样的东西:

let controller : FlutterViewController = window?.rootViewController as! FlutterViewController

let channel = FlutterMethodChannel(name: "<channelName>",
                                                binaryMessenger: controller.binaryMessenger)

在 FlutterMethodChannel 初始化中,需要 FlutterBinaryMessenger 类型的 binaryMessenger。

在 ShareViewController 中,我尝试创建 FlutterAppDelegate 类型的类,并在那里创建 FlutterViewController 但结果控制器是空的。

   @objc class ExtDelegate: FlutterAppDelegate {
func invokeMethod(
    ) -> Bool {
  let controller = (window.rootViewController as! FlutterViewController)
  let methodChannel =
      FlutterMethodChannel(name: "task-identifier", binaryMessenger: controller.binaryMessenger)
        methodChannel.invokeMethod("fetchImage", arguments: "Arg-s")
      return true
    }
}

关于如何实现这一点的任何想法?

【问题讨论】:

    标签: ios swift flutter share-extension flutter-method-channel


    【解决方案1】:

    步骤1: 使用此链接 https://docs.flutter.dev/development/add-to-app/ios/add-flutter-screen?tab=engine-swift-tab

    第2步: 我更喜欢使用 UIViewControllerRepresentable 作为这个

    导入颤振 结构 FlutterView: UIViewControllerRepresentable {

    typealias UIViewControllerType = FlutterViewController
    
        var callbackPressBack: (() -> Void)?
    
    func makeUIViewController(context: Context) -> FlutterViewController {
    
        let controller = FlutterViewController(project: nil, nibName: nil, bundle: nil)
        let mainChannel = FlutterMethodChannel(name: "com...... From flutter",
                                               binaryMessenger: controller.binaryMessenger)
    
        mainChannel.setMethodCallHandler({
            (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
            // This method is invoked on the UI thread.
            
            print("Method (call.method)")
            
            if call.method == "back" {
                print("BACK")
                callbackPressBack?()
            }
        })
        return controller
    }
    
    func updateUIViewController(_ uiViewController: FlutterViewController, context: Context) {
        // Updates the state of the specified view controller with new information from SwiftUI.
    }
    

    }

    第 3 步:使用 SwiftUI 使用它

    结构 FlutterSwiftUI:查看 { var body: 一些视图 { 颤振视图 () } }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多