iOS原生和Flutter交互

QQ20201208-150020.gif

一、Flutter調(diào)用原生方法

這里我是原生跳轉(zhuǎn)到flutter頁(yè)面,然后通過(guò)點(diǎn)擊flutter頁(yè)面的按鈕和原生交互調(diào)用原生的返回方法回到原生頁(yè)面

iOS代碼

 // 跳轉(zhuǎn)到Flutter頁(yè)面
  let flutterVC = FlutterViewController.init()
  flutterVC.setInitialRoute("presentPage")
  flutterVC.modalPresentationStyle = .fullScreen
  self.navigationController?.setNavigationBarHidden(true, animated: true)
        
  self.navigationController?.pushViewController(flutterVC, animated: true)

// 初始化交互通道FlutterMethodChannel
  let presentChannel:FlutterMethodChannel = FlutterMethodChannel.init(name: "sf.flutter.io/sf_present", binaryMessenger: flutterVC as! FlutterBinaryMessenger)


  weak var weakSelf = self
// 添加監(jiān)聽(tīng)回調(diào)
  presentChannel.setMethodCallHandler { (call, result) in
            
            print(call.method)
            print(result)
            // 當(dāng)flutter調(diào)用了原生方法后,此回調(diào)會(huì)調(diào)用
           // call.method 為方法名,call對(duì)象里面還有參數(shù)屬性
            if call.method == "getNativeResult" {
                 weakSelf?.navigationController?.popViewController(animated: true)
                
            }else if call.method == "dismiss" {
                
                print("dismiss")
            }else{
                print(FlutterMethodNotImplemented)
            }
  }

flutter代碼

// 交互通道
  static const platform = const MethodChannel('sf.flutter.io/sf_present');

  Future<void> invokeNativeGetResult() async {
    try {
      // 調(diào)用原生方法并傳參,以及等待原生返回結(jié)果數(shù)據(jù),getNativeResult是方法名,{"key": "value"}是參數(shù)
      var result =
          await platform.invokeListMethod('getNativeResult', {"key": "參數(shù)1"});
    } catch (e) {}
  }

當(dāng)點(diǎn)擊某個(gè)按鈕的時(shí)候,調(diào)用invokeNativeGetResult函數(shù),通過(guò)MethodChannel通道調(diào)用對(duì)應(yīng)的原生中的getNativeResult函數(shù),即可。同時(shí)也可以攜帶參數(shù),比如:{"key": "參數(shù)1"}

參考:http://www.itdecent.cn/p/ca0e47ffef71

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 先來(lái)個(gè)圖 1. Flutter調(diào)原生方法并返回結(jié)果給Flutter 先添加一個(gè)交互事件 flutter調(diào)用方法 i...
    loongod閱讀 8,780評(píng)論 1 10
  • 引言: 經(jīng)過(guò)前面章節(jié)的學(xué)習(xí),相信讀者已經(jīng)對(duì)flutter有了一個(gè)整體的認(rèn)識(shí),并且也能利用flutter平臺(tái)提供的一...
    謝棟閱讀 1,679評(píng)論 0 2
  • 小菜上一篇簡(jiǎn)單學(xué)習(xí)了一下 Android 原生接入 Flutter Module,現(xiàn)在學(xué)習(xí)一下兩者之間的數(shù)據(jù)交互;...
    阿策神奇閱讀 5,619評(píng)論 1 12
  • 學(xué)習(xí)Flutter也有一段時(shí)間了,今天來(lái)介紹一下Flutter是如何與原生交互的。 原生交互的重要性就不用說(shuō)了吧。...
    尤先森閱讀 2,170評(píng)論 0 0
  • 該文已授權(quán)公眾號(hào) 「碼個(gè)蛋」,轉(zhuǎn)載請(qǐng)指明出處 Flutter 說(shuō)到底只是一個(gè) UI 框架,很多功能都需要通過(guò)原生的...
    Kuky_xs閱讀 7,034評(píng)論 2 12

友情鏈接更多精彩內(nèi)容