原生集成Flutter(iOS)代码
2020-07-22 本文已影响0人
fanren
一、配置原生项目的appDelegate
class AppDelegate: FlutterAppDelegate {
override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
self.setupWindow()
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
...
}
二、原生调用flutter
- 原生打开main.dart首页
let controller = FlutterViewController()
self.present(controller, animated: true, completion: nil)
- 原生打开fluttter页面,设置将要打开的页面
let controller = FlutterViewController()
controller.setInitialRoute("login")
self.present(controller, animated: true, completion: nil)
Flutter根据Router来设置将要显示的页面
void main() => runApp(_widgetForRoute(window.defaultRouteName));
Widget _widgetForRoute(String route){
switch (route){
case 'myApp':
return MyApp();
case 'login':
return LoginApp();
default:
return MyApp();
}
}
- 原生调用Flutter,传参数
let controller = FlutterViewController()
// 设置FlutterEventChannel
let sendDataEvent = FlutterEventChannel(name: "com.wiseinfoiot.sendData",
binaryMessenger: controller as! FlutterBinaryMessenger)
sendDataEvent.setStreamHandler(self)
extension ViewController: FlutterStreamHandler {
func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
// 传参数,这里传15601896003
events("15601896003")
return nil
}
func onCancel(withArguments arguments: Any?) -> FlutterError? {
return nil
}
}
Flutter接收参数
EventChannel event = EventChannel("com.wiseinfoiot.sendData");
@override
void initState() {
super.initState();
event.receiveBroadcastStream(1111).listen(onEvent);
}
void onEvent(Object event) {
setState(() {
phone = event.toString();
});
}
三、Flutter调用原生方法
- 无参调用
原生注册方法
- 无参调用
let channel = FlutterMethodChannel(name: "com.wiseinfoiot.common", binaryMessenger:
controller as! FlutterBinaryMessenger)
channel.setMethodCallHandler { (method, result) in
// 这里method.method是调用方法的名字
if method.method == "dismiss" {
self.dismiss(animated: true, completion: nil)
}
}
Flutter调用原生方法
MethodChannel channel = MethodChannel("com.wiseinfoiot.common");
void _incrementCounter() async {
// 调用原生的方法dismiss
await channel.invokeMethod("dismiss");
}
- 传参调用
原生注册方法
- 传参调用
let channel = FlutterMethodChannel(name: "com.wiseinfoiot.common", binaryMessenger:
controller as! FlutterBinaryMessenger)
channel.setMethodCallHandler { (method, result) in
if method.method == "calculate" {
if let argument = method.arguments as? String {
// result返回数据
result("返回数据\(argument)")
}
}
}
Flutter调用方法
MethodChannel channel = MethodChannel("com.wiseinfoiot.common");
void _incrementCounter() async {
var result = await channel.invokeMethod("calculate", "123");
// result是方法的返回值
setState(() {
phone = result;
});
}