【问题标题】: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: 一些视图 {
颤振视图 ()
}
}