Flutter組件化

使用Flutter Module實(shí)現(xiàn)組件化的思路:
Flutter組件化

使用Flutter Package實(shí)現(xiàn)組件化思路:
Flutter 組件化開發(fā)實(shí)踐概述

組件化的優(yōu)點(diǎn):

  1. 各個(gè)模塊相互獨(dú)立,方便管理
  2. 抽離出功能,方便多個(gè)app復(fù)用
  3. 方便單元測(cè)試

組件化思路:

一、選擇模塊化的方式

有2種方式可實(shí)現(xiàn):Flutter PackageFlutter Module
區(qū)別:

  1. Flutter Package:用于單獨(dú)的Flutter、Dart代碼,不依賴與原生iOS/Android代碼,生成的Package目錄里沒有iOS/Android目錄,可創(chuàng)建example flutter項(xiàng)目配合測(cè)試。

  2. Flutter Module:常用于在原生iOS/Android項(xiàng)目中集成Flutter項(xiàng)目的混合開發(fā),創(chuàng)建的Module中有.iOS/.android目錄,單獨(dú)的Module可單獨(dú)在iOSAndroid上運(yùn)行測(cè)試。

二、模塊存放位置
  1. 可與原有項(xiàng)目放在一起,在pubspec.yaml中使用path來引入
  2. 將模塊放入git庫中,在pubspec.yaml中使用url來引入
  3. 建立私有pub,將模塊發(fā)布到私有pub
三、將項(xiàng)目劃分不同的模塊
  • 網(wǎng)絡(luò)模塊(Network Package
  • 通用的基礎(chǔ)類和工具類(多個(gè) Common Package
  • 業(yè)務(wù)模塊A(A Package
  • 業(yè)務(wù)模塊B(B Package
  • 業(yè)務(wù)模塊...

單個(gè)模塊提供一個(gè)對(duì)外的dart來供導(dǎo)入使用,模塊內(nèi)部使用export對(duì)內(nèi)部文件進(jìn)行細(xì)粒度的暴露。

library common_service;

export 'a.dart';
export 'b.dart';
四、單獨(dú)測(cè)試模塊
  1. 如果使用Flutter Module,可單獨(dú)運(yùn)行Module
  2. 如果使用Flutter Package,可創(chuàng)建Flutter example測(cè)試項(xiàng)目來測(cè)試
五、加載PackageModule里的資源文件

單個(gè)組件的安裝包和整個(gè)組件的安裝包資源位置不一樣。

  • PackageModule里運(yùn)行:正常的使用方法,比如'images/base/login_button.png'
  • 在主項(xiàng)目里運(yùn)行PackageModule:在正常使用方法的路徑前增加'packages/模塊名/',比如'packages/login_module/images/base/login_button.png'
資源引入路徑不一致解決方案:

可通過主項(xiàng)目運(yùn)行時(shí),往模塊中傳入自定義參數(shù),根據(jù)參數(shù)判斷資源引用的路徑前是否添加'packages/模塊名/'
bool.fromEnvironment可用來判斷是否是生產(chǎn)環(huán)境,比如final isProduct = const bool.fromEnvironment('dart.vm.product');,也可以用來判斷自定義參數(shù),比如flutter run --dart-define=IS_ADD_PACKAGE_PATH=true,參數(shù)名稱為IS_ADD_PACKAGE_PATH,值為true
代碼中使用:

// 定義全局變量
static const IS_ADD_PACKAGE_PATH = bool.fromEnvironment('IS_ADD_PACKAGE_PATH', defaultValue: true);
// 具體使用
'${IS_ADD_PACKAGE_PATH ? 'packages/login_module/' : ''}images/base/login_button.png'
  1. 命令行flutter run運(yùn)行添加自定義參數(shù):
    flutter run --dart-define=IS_ADD_PACKAGE_PATH=true
  2. Android Studio運(yùn)行添加自定義參數(shù):
    main.dart的run/debug configrations中配置,如下:
    image.png
六、減少各模塊之間的耦合

比如主項(xiàng)目引用模塊,模塊引用主項(xiàng)目,會(huì)出現(xiàn)很多耦合,盡量減少。
解決思路:

  1. 組件引入主項(xiàng)目的耦合部分,盡量抽取為公共庫
  2. 在路由上做文章,減少引入
最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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