原生集成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

let controller = FlutterViewController()
self.present(controller, animated: true, completion: nil)
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();
  }
}
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;
  });
}
上一篇 下一篇

猜你喜欢

热点阅读