flutter和原生iOS,android通信MethodChannel

在開發(fā)flutter應(yīng)用的過程中, 通常需要和原生方法進(jìn)行通信, 有時還需要進(jìn)行傳值.
比如:
(1)薄扁、某些SDK不支持flutter但項目又必須要用
(2)说搅、某些原生的功能flutter不支持, 電池電量 通知是否開啟等
針對以上通信并傳值的方法進(jìn)行一個記錄

一饵蒂、flutter端實現(xiàn)
1侨拦、聲明

const platform = MethodChannel('flutterNativeChannel');

2稠通、主動調(diào)用 invokeMethod

// 不需要返回值 且不攜帶參數(shù)
await platform.invokeMethod('yourMethod');

如果需要從原生得到返回值則使用下面的方式

// 需要返回值
static Future<String> configureFlutterEngine() async {
    final result;  
    try {  
      result = await platform.invokeMethod('yourMethod');  
      return result;
    } on PlatformException catch (e) {  
       return "Failed : '${e.message}'.";  
    } 
  }

3层坠、如需攜帶參數(shù)傳遞給原生

// 攜帶一個map類型的數(shù)組, 通過yourMethod傳遞給原生
platform.invokeMethod('yourMethod', [{"fileName":  "fName"}]);  

二殖妇、iOS端實現(xiàn)
iOS端只需要進(jìn)行監(jiān)聽, 并給根據(jù)flutter的參數(shù)給出對應(yīng)的返回值, 值得注意的是yourMethod代表了一個方法標(biāo)識, 想要執(zhí)行多個通信, 需要更換不同的方法標(biāo)識, 用if else進(jìn)行判斷

1、無參數(shù)

let controller: FlutterViewController = window.rootViewController as! FlutterViewController ;
        let channel = FlutterMethodChannel(name: "flutterNativeChannel", binaryMessenger: controller.binaryMessenger)
        channel.setMethodCallHandler({ [self]
          (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
          if call.method == "yourMethod" {
             result("返回給flutter的信息")
          }
})

2破花、有參數(shù)
如果是需要攜帶一些參數(shù), 可通過 call.arguments直接過去, 比如我的參數(shù)是一個數(shù)組

 if call.method == "yourMethod" {
        let dataList: Array = call.arguments as! Array<Any>;
        result("返回給flutter的信息")
     }

三谦趣、安卓端實現(xiàn)
1、安卓原生注冊方法等待flutter調(diào)用
在MainActivity文件重寫configureFlutterEngine方法

//  重寫configureFlutterEngine獲取FlutterEngine
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {}

2旧乞、注冊監(jiān)聽

 new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), "flutterNativeChannel")
                .setMethodCallHandler(
                        (call, result) -> {
                            if (call.method.equals("yourMethod")) {
                                  // 返回數(shù)據(jù)
                                  result.success("android返回給flutter的信息");
                            }
});

3蔚润、獲取參數(shù)。和flutter對應(yīng)

ArrayList<Map> paramArray = (ArrayList<Map>) call.arguments();

四尺栖、注意
以上方法適合flutter調(diào)用原生方法獲取信息, 為一次性方法, 就是說, 一問一答flutter調(diào)用一次原生就智能返回一次信息.

如果有的需求是flutter調(diào)用原生方法一次, 原生需要持續(xù)性的給flutter提供信息此方式就不可以使用了, 此時需要用到EventChannel

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫡纠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子延赌,更是在濱河造成了極大的恐慌除盏,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挫以,死亡現(xiàn)場離奇詭異者蠕,居然都是意外死亡,警方通過查閱死者的電腦和手機掐松,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門踱侣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粪小,“玉大人,你說我怎么就攤上這事抡句√讲玻” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵待榔,是天一觀的道長逞壁。 經(jīng)常有香客問我,道長锐锣,這世上最難降的妖魔是什么腌闯? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮雕憔,結(jié)果婚禮上姿骏,老公的妹妹穿的比我還像新娘。我一直安慰自己橘茉,他們只是感情好工腋,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布姨丈。 她就那樣靜靜地躺著畅卓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蟋恬。 梳的紋絲不亂的頭發(fā)上翁潘,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音歼争,去河邊找鬼拜马。 笑死,一個胖子當(dāng)著我的面吹牛沐绒,可吹牛的內(nèi)容都是我干的俩莽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼乔遮,長吁一口氣:“原來是場噩夢啊……” “哼扮超!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹋肮,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤出刷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坯辩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馁龟,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年漆魔,在試婚紗的時候發(fā)現(xiàn)自己被綠了坷檩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片却音。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖矢炼,靈堂內(nèi)的尸體忽然破棺而出僧家,到底是詐尸還是另有隱情,我是刑警寧澤裸删,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布八拱,位于F島的核電站,受9級特大地震影響涯塔,放射性物質(zhì)發(fā)生泄漏肌稻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一匕荸、第九天 我趴在偏房一處隱蔽的房頂上張望爹谭。 院中可真熱鬧,春花似錦榛搔、人聲如沸诺凡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腹泌。三九已至,卻和暖如春尔觉,著一層夾襖步出監(jiān)牢的瞬間凉袱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工侦铜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留专甩,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓钉稍,卻偏偏與公主長得像涤躲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贡未,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容