Flutter插件支持鴻蒙系統(tǒng)實踐

HarmonyOS next之Flutter插件支持鴻蒙系統(tǒng)實踐

問題

Flutter Plugin主要用來橋接原生代碼往声,調(diào)用原生系統(tǒng)SDK, 比如拍照戳吝,選擇相冊浩销,文件選擇等。

目前 [pub.dev/]中的插件听哭,都沒有對鴻蒙系統(tǒng)的支持慢洋,不過鴻蒙現(xiàn)在也做了部分常用第三方插件的支持(例如:[gitee.com/openharmony…] 如果鴻蒙官方做了,我們可以直接使用陆盘,但是會存在不少插件普筹,鴻蒙官方來不及做或者優(yōu)先級比較低,但是我們的項目中又需要隘马,這就要求我們要學(xué)會在已有插件的基礎(chǔ)上新增支持鴻蒙系統(tǒng)原生代碼太防。

搭建環(huán)境(macOS M2為例)

下載鴻蒙支持的Flutter

下載結(jié)束之后切換到dev分支;鴻蒙針對Flutter的支持酸员,是在基于的官方Flutter版本3.7.12上修改的蜒车,總體來說,這個版本穩(wěn)定性比較高幔嗦。然后就是配置Flutter命令行環(huán)境變量酿愧,把Flutter命令行指向鴻蒙支持的Flutter版本。保證在終端可以正常執(zhí)行flutter doctor -v命令邀泉。

當(dāng)然更加建議使用[fvm]來管理Flutter版本嬉挡,可以把鴻蒙支持的Flutter版本代碼git clone到fvm管理目錄的versions文件夾下钝鸽,并flutter_flutter改名為3.7.12-ohos

這樣就可以直接使用fvm global 3.7.12-ohos 命令在切換本地不同的Flutter版本了

下載鴻蒙開發(fā)工具和配置環(huán)境變量

我這邊目前下載的DevEco Studio版本是5.0.3.502, 大家可以下載最新版本就行。

commandline-tools(可選):commandline-tools-mac-arm64-5.0.3.404.zip棘伴, 最新的DevEco開發(fā)工具內(nèi)部其實已經(jīng)包含了commandline-tools工具集

配置環(huán)境變量

export TOOL_HOME=/Applications/DevEco-Studio.app/Contents # mac環(huán)境 export DEVECO_SDK_HOME=$TOOL_HOME/sdk # command-line-tools/sdk export PATH=$TOOL_HOME/tools/ohpm/bin:$PATH # command-line-tools/ohpm/bin export PATH=$TOOL_HOME/tools/hvigor/bin:$PATH # command-line-tools/hvigor/bin export PATH=$TOOL_HOME/tools/node/bin:$PATH # command-line-tools/tool/node/bin

如何在已有插件中新增鴻蒙系統(tǒng)支持

舉一個例子寞埠,在Flutter中,我們想把圖片保存到相冊焊夸,一般會到這個庫image_gallery_saver仁连,現(xiàn)在我們期望這個庫也支持在鴻蒙系統(tǒng)中把圖片保存到相冊中。

我這邊建議使用以下步驟

fork源碼

fork一下源碼阱穗,fork結(jié)束之后饭冬,代碼就到自己賬號下的倉庫中,我操作結(jié)束之后的[地址]揪阶。

clone到本地

git clone https://github.com/zingwin/image_gallery_saver

新增ohos插件

執(zhí)行以下命令(不推薦)昌抠,表明在已存在的插件中新增鴻蒙系統(tǒng)。

flutter create -t plugin *--platforms ohos*

但是有些項目可能改過名或者以下配置鲁僚,執(zhí)行失敗也沒有關(guān)系炊苫,而且個人也不太建議按照以上方式新增插件,因為他會給iOS和Android也生成部分代碼冰沙,以及插件接口代碼侨艾,對之前的插件項目有一定程度的干擾,不嫌麻煩的話拓挥,直接刪除也行唠梨。

推薦】更推薦的做法是在一個空目錄執(zhí)行創(chuàng)建插件命令

flutter create -t plugin *--platforms ohos,ios,android image_gallery_saver*

上面的命令會生成一個全新的插件当叭,里面包含了iOS,android, ohos文件夾,代表插件支持的平臺原生代碼蚁鳖。然后把生成兩個的ohos文件夾復(fù)制到原項目(第2步)中對應(yīng)的目錄糠雨,一定別搞錯了。

修改pubspes.yaml文件

使用Android Studio打開第二步中clone的項目琅攘。雙擊pubspes.yaml文件松邪。

新增ohos插件支持坞琴。其中的package可以同androidpackage,

pluginClass: 不要填錯了。一般情況都是這個目錄中可以找到(image_gallery_saver``/ohos/src/main/ets/components/plugin/ImageGallerySaverPlugin.ets)逗抑。

ohos:
  package: com.example.image_gallery_saver
  pluginClass: ImageGallerySaverPlugin

執(zhí)行Flutter pub get

接下來剧辐,就可以執(zhí)行flutter pub get寒亥,成功之后鏈接鴻蒙模擬器或者鴻蒙系統(tǒng)真機(jī)執(zhí)行flutter run進(jìn)行調(diào)試了

準(zhǔn)備鴻蒙插件代碼

接下來使用DevEco打開example/ohos下面的鴻蒙項目。

進(jìn)入oh_modules目錄下荧关,找到剛生產(chǎn)的插件原生代碼溉奕,目前可以在這編輯代碼,但是記住忍啤,這個目前每次flutter run都會重新生成加勤,請確保編輯的代碼及時同步到image_gallery_saver``/ohos/src/main/ets/components/plugin/目錄中未檩,不然可能會變成消失的代碼戴尸。

因為oh_modules目錄下面得代碼就鴻蒙項目存放第三方模塊的目錄,flutter run每次執(zhí)行都會覆蓋這里面的代碼冤狡。

比如我目前寫完代碼孙蒙,會使用以下命令把代碼自動復(fù)制到插件的真實目錄

 cp *.ets /個人目錄前綴/image_gallery_saver/ohos/src/main/ets/components/plugin/

相信在未來的版本中,鴻蒙官方會解決這個問題悲雳。

上圖中我們可以看到生成到的鴻蒙插件代碼怜奖,并且在插件中還實現(xiàn)了getPlatformVersion默認(rèn)方法。

另外一個細(xì)節(jié)翅阵,請確保鴻蒙插件中的MethodChannelFlutter側(cè)中的MethodChannel字符串一致滥崩。

開始編寫插件代碼

發(fā)現(xiàn)這個插件就兩個方法

static FutureOr<dynamic> saveImage(Uint8List imageBytes,
    {int quality = 80,
    String? name,
    bool isReturnImagePathOfIOS = false})
    
static Future saveFile(String file,
    {String? name, bool isReturnPathOfIOS = false})    

我們參考其他平臺,取插件接口參數(shù)讹语,然后做相應(yīng)的邏輯

git push

修改完之后,把代碼push到自己的git倉庫

使用插件

image_gallery_saver這個庫短条,指向我們自己的地址即可才菠,就是第1步fork之后的地址赋访。

image_gallery_saver:
  git:
    url: https://gitee.com/openharmony-sig/flutter_flutter.git
    ref: 431cf6867ba533770292f2e42305e58a8474b0ae

總結(jié)

以上就是在已有Flutter插件中新增鴻蒙系統(tǒng)支持的大致流程。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瘫镇,隨后出現(xiàn)的幾起案子汇四,更是在濱河造成了極大的恐慌通孽,老刑警劉巖背苦,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钳降,居然都是意外死亡遂填,警方通過查閱死者的電腦和手機(jī)吓坚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門盐杂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來链烈,“玉大人测垛,你說我怎么就攤上這事食侮。” “怎么了链快?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長霉祸。 經(jīng)常有香客問我丝蹭,道長奔穿,這世上最難降的妖魔是什么贱田? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮彩倚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蔬蕊。我一直安慰自己岸夯,他們只是感情好勉吻,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布齿桃。 她就那樣靜靜地躺著短纵,像睡著了一般香到。 火紅的嫁衣襯著肌膚如雪悠就。 梳的紋絲不亂的頭發(fā)上梗脾,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天帆疟,我揣著相機(jī)與錄音踪宠,去河邊找鬼柳琢。 笑死柬脸,一個胖子當(dāng)著我的面吹牛倒堕,可吹牛的內(nèi)容都是我干的垦巴。 我是一名探鬼主播骤宣,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼憔披,長吁一口氣:“原來是場噩夢啊……” “哼望门!你這毒婦竟也來了怒允?” 一聲冷哼從身側(cè)響起纫事,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤丽惶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侠驯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吟策,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡着撩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赂乐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辐啄。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖担租,靈堂內(nèi)的尸體忽然破棺而出奋救,到底是詐尸還是另有隱情,我是刑警寧澤演侯,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站狡汉,受9級特大地震影響盾戴,放射性物質(zhì)發(fā)生泄漏尖啡。R本人自食惡果不足惜衅斩,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一矛渴、第九天 我趴在偏房一處隱蔽的房頂上張望具温。 院中可真熱鬧铣猩,春花似錦、人聲如沸天吓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茂嗓,卻和暖如春述吸,著一層夾襖步出監(jiān)牢的瞬間蝌矛,已是汗流浹背朴读。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工衅金, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留氮唯,地道東北人惩琉。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓瞒渠,卻偏偏與公主長得像伍玖,于是被迫代替她去往敵國和親窍箍。 傳聞我的和親對象是個殘疾皇子椰棘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

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