1.環(huán)境準(zhǔn)備, 參考鏈接

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比克東網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式克東網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋克東地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。
2.添加國內(nèi)環(huán)境配置: 參考鏈接
3.新建
name: String類型,代表Channel的名字,也是其唯一標(biāo)識(shí)符。
messager:BinaryMessenger類型,代表消息信使,是消息的發(fā)送與接收的工具。
codec: MessageCodec類型或MethodCodec類型,代表消息的編解碼器。
fluuter中的MessageCodec用于二進(jìn)制格式數(shù)據(jù)與基礎(chǔ)數(shù)據(jù)之間的編解碼。BasicMessageChannel所使用的編解碼器就是MessageCodec。
iOS中,名稱為FlutterMessageCodec,是一個(gè)協(xié)議,定義了兩個(gè)方法:encode接收一個(gè)類型為id的消息,將其編碼為NSData類型,而decode接收NSData類型消息,將其解碼為id類型數(shù)據(jù)。
MessageCodec有多種不同的實(shí)現(xiàn):
與MessageCodec不同的是,MethodCodec用于MethodCall對(duì)象的編解碼,一個(gè)MethodCall對(duì)象代表一次從Flutter端發(fā)起的方法調(diào)用。MethodCall有2個(gè)成員變量:String類型的method代表需要調(diào)用的方法名稱,通用類型(Android中為Object,iOS中為id)的arguments代表需要調(diào)用的方法入?yún)?/p>
由于處理的是方法調(diào)用,故相比于MessageCodec,MethodCodec多了對(duì)調(diào)用結(jié)果的處理。當(dāng)方法調(diào)用成功時(shí),使用encodeSuccessEnvelope將result編碼為二進(jìn)制數(shù)據(jù),而當(dāng)方法調(diào)用失敗時(shí),則使用encodeErrorEnvelope將error的code、message、detail編碼為二進(jìn)制數(shù)據(jù)
MethodCodec有兩種實(shí)現(xiàn):
百度網(wǎng)盤flutter 見46-Flutter Channel
Flutter 提供三種Channel用作Flutter與iOS原生平臺(tái)之間的數(shù)據(jù)傳遞
1.FlutterBasicMessageChannel: 用作頻繁與原生交互
2.FlutterMethodChannel:用來調(diào)用方法,雙向通訊
3.FlutterEventChannel:數(shù)據(jù)流通訊
三種Channel,都有以下成員變量
1.name: Channel 的唯一標(biāo)識(shí)
在Flutter應(yīng)用中,通常存在多個(gè)Platform Channel,使用name區(qū)分不同的Channel
2.messenger: 消息信使(BinaryMessenger)
負(fù)責(zé)Flutter與原生之間的相互通訊
[methodChannel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult? _Nonnull ?result) {
}];
setMethodCallHandler方法,MethodCallHandler放在FlutterBinaryMessageHandler中
創(chuàng)建一個(gè)FlutterMethodChannel,通過 setMethodCallHandler來進(jìn)行消息處理,最終會(huì)為FlutterMethodChannel綁定一個(gè)FlutterBinaryMessageHandler,并以FlutterMethodChannel的name作為key,保存在一個(gè)Map結(jié)構(gòu)中
先創(chuàng)建 FlutterEngine-FlutterViewController-FlutterMethodChannel,
調(diào)用setMethodCallHandler方法時(shí),會(huì)進(jìn)入FlutterEngine的setMessageHandlerOnChannel:binaryMessageHandle:中,在進(jìn)入PlatformMessageRouter中進(jìn)行儲(chǔ)存
Flutter是Google開發(fā)的新一代跨平臺(tái)方案,F(xiàn)lutter可以實(shí)現(xiàn)寫一份代碼同時(shí)運(yùn)行在iOS和Android設(shè)備上,并且提供很好的性能體驗(yàn)。Flutter使用Dart作為開發(fā)語言,這是一門簡潔、強(qiáng)類型的編程語言。Flutter對(duì)于iOS和Android設(shè)備,提供了兩套視覺庫,可以針對(duì)不同的平臺(tái)有不同的展示效果。
Flutter原本是為了解決Web開發(fā)中的一些問題,而開發(fā)的一套精簡版Web框架,擁有獨(dú)立的渲染引擎和開發(fā)語言,但后來逐漸演變?yōu)橐苿?dòng)端開發(fā)框架。正是由于Dart當(dāng)初的定位是為了替代JS成為Web框架,所以Dart的語法更接近于JS語法。例如定義對(duì)象構(gòu)建方法,以及實(shí)例化對(duì)象的方式等。
在Google剛推出Flutter時(shí),其發(fā)展很緩慢,終于在18年發(fā)布第一個(gè)Bate版之后迎來了爆發(fā)性增長,發(fā)布第一個(gè)Release版時(shí)增長速度更快。可以從Github上Star數(shù)據(jù)看出來這個(gè)增長的過程。在19年最新的Flutter 1.2版本中,已經(jīng)開放Web支持的Beta版。
Flutter不僅僅提供了一套視覺庫,在Flutter整體框架中包含各個(gè)層級(jí)階段的庫。例如實(shí)現(xiàn)一個(gè)游戲功能,上面一些游戲控件可以用上層視覺庫,底層游戲可以直接基于Flutter的底層庫進(jìn)行開發(fā),而不需要調(diào)用原生應(yīng)用的底層庫。Flutter的底層庫是基于Open GL實(shí)現(xiàn)的,所以O(shè)pen GL可以做的Flutter都可以。
在進(jìn)行Flutter開發(fā)過程中,很容易出現(xiàn)iOS原生端編譯不成功的問題,比如出現(xiàn)Undefined symbol:__swift_FORCE_LOAD_$_swfitCoreLocation
出現(xiàn)這種情況的時(shí)候,為沒有導(dǎo)入swift頭文件導(dǎo)致編譯不成功,解決辦法為:
1、新建選中Runner右鍵New File ?選擇Swift File
2、點(diǎn)擊create的時(shí)候會(huì)出現(xiàn)選擇Xcode ?- Create Bridging Header?
3、隨后會(huì)創(chuàng)建一個(gè)Runner-Bridging-Heading.h的文件
4、正常運(yùn)行項(xiàng)目即可
一般此情況多出現(xiàn)在第一次運(yùn)行iOS的情況,為導(dǎo)入過支持Swift后XCode沒有進(jìn)行兼容導(dǎo)致的問題。
分享標(biāo)題:Flutter底層兼容,flutter嵌入原生組件
網(wǎng)站路徑:http://chinadenli.net/article32/dsgjjsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、做網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、全網(wǎng)營銷推廣、App設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)