Flutter混合棧開(kāi)發(fā)-組件化Flutter工程

Flutter混合棧開(kāi)發(fā)

組件化Flutter工程

Flutter本身就是為了在移動(dòng)端上提供一個(gè)快速開(kāi)發(fā)的技術(shù)方案,避免不了就會(huì)有一些混合棧接入工作蜒茄。已有項(xiàng)目接入flutter有兩種方式:
1,官方提供的接入方式:https://flutter.dev/docs/deployment/ios
2,組件化的接入方式醋虏,也就是本文要介紹的一種方式

網(wǎng)上從android角度出發(fā)配置的文章有很多藏澳,iOS角度的文章相對(duì)有點(diǎn)少计寇,一定有原因娇豫。咱也不知道咱也不敢問(wèn)

1. 編譯產(chǎn)物

有大佬在實(shí)際開(kāi)發(fā)中發(fā)現(xiàn)匙姜,APP只需要依賴Flutter編譯后的產(chǎn)物就可以完成依賴。現(xiàn)在就拋出個(gè)問(wèn)題:Flutter編譯后的產(chǎn)物是什么東東冯痢。

任何語(yǔ)言在運(yùn)行之前都需要編譯氮昧,常見(jiàn)的編譯模式如 JIT 和 AOT。兩者各有優(yōu)缺點(diǎn)浦楣,而Flutter同時(shí)擁有了這兩種編譯方式的優(yōu)點(diǎn)袖肥。

編譯后針對(duì)不同平臺(tái)產(chǎn)生的文件,以iOS為例:在根目錄下中找到iOS/Flutter(或者./iOS/Flutter)目錄下的:App.framework振劳,F(xiàn)lutter.framework椎组,一共有兩個(gè)文件。(SDKv1.0.0以后flutter_assets包含在:App.framework中)
Flutter編譯產(chǎn)物

既然是編譯后的產(chǎn)物历恐,而且需要引入APP中寸癌,所以該產(chǎn)物只針對(duì)當(dāng)前開(kāi)發(fā)環(huán)境、代碼弱贼、模擬器/真機(jī)灵份,其中任意一項(xiàng)改變后都需要重新替換上述2個(gè)文件。
如果沒(méi)有該文件哮洽,表示你沒(méi)有將Flutter代碼完成過(guò)任何一次編譯填渠。

2. 制作簡(jiǎn)單私有pod庫(kù)

作為iOS開(kāi)發(fā)者pod這個(gè)東東應(yīng)該是很熟悉的,pod庫(kù)最核心的就是.podspec文件鸟辅。直接創(chuàng)建該文件氛什,引入相關(guān)文件,并上傳git匪凉,OVER枪眉!
文件內(nèi)容直接上圖:

podspec

還有插件依賴相關(guān)的pod庫(kù),后面會(huì)詳細(xì)解釋:
podspec

如果有興趣也可以下載Flutter組件化-Git來(lái)看看

3. podfile引入

準(zhǔn)備好pod庫(kù)之后再层,就需要將pod接入.到這里翻出前面一個(gè)問(wèn)題:任何代碼贸铜、環(huán)境改變都需要重新導(dǎo)入,對(duì)于FLutter開(kāi)發(fā)聂受、聯(lián)調(diào)的同學(xué)簡(jiǎn)直是噩夢(mèng)蒿秦。所以這里對(duì)于本地開(kāi)發(fā)的同學(xué)單獨(dú)提供一套接入方式。
先將pod文件上圖:


pod

在pod增加一個(gè)變量use_local_depentency蛋济,需要手動(dòng)維護(hù)棍鳖。

3.1 url下載

use_local_depentency=false時(shí)代表非Flutter開(kāi)發(fā)者。
直接使用pod update就可以完成接入碗旅。依賴文件比較大需要等待渡处。

3.2 path本地文件

use_local_depentency=true時(shí)代表本地開(kāi)發(fā)者镜悉。
可以將iOS代碼和fluter放到統(tǒng)一目錄下,例如:

flutter文件結(jié)構(gòu)

也可以放在其他路徑下医瘫,只需要修改pod.file中的本地路徑侣肄。
由于是直接引用的編譯產(chǎn)物所以不需要關(guān)心編譯產(chǎn)物的更新。
如果有興趣也可以下載iOS接入Flutter-Git

4. 插件注冊(cè)

前面說(shuō)到的插件pod庫(kù)醇份,為什么會(huì)有這個(gè)pod庫(kù)呢茫孔?

對(duì)于混合開(kāi)發(fā)來(lái)說(shuō),三端(iOS被芳、Android缰贝、Flutter)的交互一直是一個(gè)
問(wèn)題,plug就是用來(lái)解決這個(gè)問(wèn)題畔濒。FLutter官方創(chuàng)建了一些最常用的插件如:彈框剩晴、相機(jī)調(diào)用。

編譯完成后侵状,你會(huì)從Flutter的文件中找到對(duì)應(yīng)文件赞弥,還是上圖:


plug

這些文件都是由Flutter自動(dòng)生成的。
任何使用到的插件都需要在APP中注冊(cè)趣兄,且和APP生命周期一致绽左。所以也需要將相關(guān)文件導(dǎo)入APP中。
注冊(cè)相關(guān)代碼可以從iOS接入Flutter-Git中查看,就不多贅述艇潭。

4.1 插件中部分代碼修改

如果你是在舊項(xiàng)目中接入Flutter拼窥,那么插件在APP中使用時(shí)大概率會(huì)出問(wèn)題。
這里以image_picker為例:
調(diào)用后沒(méi)有任何反應(yīng)蹋凝,xCode可能還會(huì)報(bào)錯(cuò)鲁纠。通過(guò)查看ImagePickerPlugin.m中的代碼發(fā)現(xiàn),用于彈出imageVC的VC并不是當(dāng)前視圖最上方的VC而是window.rootViewController鳍寂。

+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar {
  ...
  UIViewController *viewController =
      [UIApplication sharedApplication].delegate.window.rootViewController;
  ...
}

相信大家一看就明白改含,問(wèn)題出在哪里。所以需要手動(dòng)去修改成當(dāng)前VC迄汛。
iOS接入Flutter-Git中的NavigationRoute提供了獲取當(dāng)前頁(yè)面的通用方法捍壤。

至此組件化接入就完成了,如果有任何問(wèn)題都可以在下方留言溝通鞍爱。后面還有內(nèi)存問(wèn)題鹃觉、router、方法注冊(cè)等等問(wèn)題都會(huì)一一解決硬霍。

你在先點(diǎn)贊還是關(guān)注后在點(diǎn)贊呢帜慢?


本文中提到的相關(guān)代碼:

iOS接入Pod倉(cāng)庫(kù)-Git

Flutter組件化iOS倉(cāng)庫(kù)-Git

傳送門:

Flutter混合棧開(kāi)發(fā)-本地環(huán)境配置

Flutter-匯總

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笼裳,一起剝皮案震驚了整個(gè)濱河市唯卖,隨后出現(xiàn)的幾起案子粱玲,更是在濱河造成了極大的恐慌,老刑警劉巖拜轨,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抽减,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡橄碾,警方通過(guò)查閱死者的電腦和手機(jī)卵沉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)法牲,“玉大人史汗,你說(shuō)我怎么就攤上這事【芾” “怎么了停撞?”我有些...
    開(kāi)封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)悼瓮。 經(jīng)常有香客問(wèn)我戈毒,道長(zhǎng),這世上最難降的妖魔是什么横堡? 我笑而不...
    開(kāi)封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任埋市,我火速辦了婚禮,結(jié)果婚禮上命贴,老公的妹妹穿的比我還像新娘道宅。我一直安慰自己,他們只是感情好胸蛛,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布培己。 她就那樣靜靜地躺著,像睡著了一般胚泌。 火紅的嫁衣襯著肌膚如雪省咨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天玷室,我揣著相機(jī)與錄音零蓉,去河邊找鬼。 笑死穷缤,一個(gè)胖子當(dāng)著我的面吹牛敌蜂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播津肛,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼章喉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起秸脱,我...
    開(kāi)封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤落包,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后摊唇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體咐蝇,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年巷查,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了有序。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岛请,死狀恐怖旭寿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情崇败,我是刑警寧澤许师,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站僚匆,受9級(jí)特大地震影響微渠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咧擂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一逞盆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧松申,春花似錦云芦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至皇筛,卻和暖如春琉历,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背水醋。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工旗笔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拄踪。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓蝇恶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親惶桐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撮弧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359