GetX — Flutter 開發(fā)的百寶箱

前言

GetX 與其說是一個狀態(tài)管理庫,倒不如是是一個簡化 Flutter 開發(fā)的百寶箱。它提供了很多工具來簡化我們的開發(fā),本篇我們先對 GetX 有一個大概的認(rèn)識,然后接下來的篇章再將 GetX 的具體應(yīng)用苹支。

GetX 工具介紹

官方文檔給出關(guān)于 GetX 的介紹如下:

GetX is an extra-light and powerful solution for Flutter. It combines high-performance state management, intelligent dependency injection, and route management quickly and practically.
GetX是一個超輕量且強(qiáng)大的 Flutter 應(yīng)用解決方案。它組合了高性能的狀態(tài)管理误阻、智能的依賴注入以及快速可用的路由管理债蜜。

而實(shí)際上,GetX 還有更多的小工具究反,示例如下:

路由

路由支持命名路由和匿名路由:

Get.to(() => Home());
Get.toNamed('/home');
// 返回上一個頁面
Get.back();
// 使用下一個頁面替換
Get.off(NextScreen());
// 清空導(dǎo)航堆棧全部頁面
Get.offAll(NextScreen());
// 獲取命名路由參數(shù)
print(Get.parameters['id']);
print(Get.parameters['name']);

GetX 的路由好處是不依賴于 context寻定,十分簡潔,更多路由介紹可以參考:GetX 路由介紹官方文檔精耐。

SnackBar

Flutter 自身攜帶的 SnackBar 有很多限制狼速,而 GetX 的非常簡單,當(dāng)然也有更多的樣式配置和位置配置參數(shù)卦停。

Get.snackbar('SnackBar', '這是GetX的SnackBar');

對話框

對話框也一樣向胡,默認(rèn)的對話框開箱即用。

Get.defaultDialog(
  title: '對話框',
  content: Text('對話框內(nèi)容'),
  onConfirm: () {
    print('Confirm');
    Get.back();
  },
  onCancel: () {
    print('Cancel');
  },
);

內(nèi)存緩存

GetX 可以緩存內(nèi)容對象惊完,以便在不同頁面共享數(shù)據(jù)僵芹。使用的時候需要注意,需要先 put 操作再 find操作小槐,否則會拋異常拇派。

Get.put(CacheData(name: '這是緩存數(shù)據(jù)'));
CacheData cache = Get.find();

離線存儲

GetX 提供了一個 get_storage 插件用于離線存儲,與 shared_preferences 相比凿跳,其優(yōu)點(diǎn)是純 Dart 編寫件豌,不依賴于原生,因此可以在安卓拄显、iOS苟径、Web、Linux躬审、Mac 等多個平臺使用。GetStorage 是基于內(nèi)存和文件存儲的蟆盐,當(dāng)內(nèi)存容器中有數(shù)據(jù)時優(yōu)先從內(nèi)存讀取承边。同時在構(gòu)建 GetStorage 對象到時候指定存儲的文件名以及存儲數(shù)據(jù)的容器。

GetStorage storage = GetStorage();
storage.write('name', '島上碼農(nóng)');
storage.read('name');

更改主題

可以說是一行代碼搞定深色和淺色模式石挂,也可以更改為自定義主題 —— 老板讓你根據(jù)手機(jī)殼改主體顏色的需求已經(jīng)搞定了一大半了博助!

Get.changeTheme(
  Get.isDarkMode ? ThemeData.light() : ThemeData.dark());
},
更換主題

多語言支持

多語言支持使用數(shù)據(jù)字典完成,在 GetMaterialApp 指定字典對象(繼承自 Translations)痹愚,使用字符串的時候假設(shè).tr 后綴富岳,就可以在切換語言的時候自動切換字符串對應(yīng)語言的翻譯了蛔糯。

class GetXDemo extends StatelessWidget {
  // 省略其他代碼
  TextButton(
    onPressed: () {
      var locale = Locale('en', 'US');
      Get.updateLocale(locale);
    },
    child: Text('name'.tr),
  ),
}

class Messages extends Translations {
  @override
  Map<String, Map<String, String>> get keys => {
        'en_US': {
          'name': 'Island Coder',
        },
        'zh_CN': {
          'name': '島上碼農(nóng)',
        }
      };
}
class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      translations: Messages(),
      locale: Locale('zh', 'CN'),
      color: Colors.white,
      navigatorKey: Get.key,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        brightness: Brightness.light,
      ),
      home: GetXDemo(),
    );
  }
}

GetX 的理念

GetX有三個基本的理念,分別是性能窖式、生產(chǎn)力和組織性(Organization)蚁飒。

  • 性能(Performance):GetX 關(guān)注性能并最小化資源消耗。GetX 不使用 StreamChangeNotifier萝喘。
  • 生產(chǎn)力(Productivity):GetX 使用簡潔愉悅的語法淮逻。不管你要做什么,使用 GetX都會覺得簡便阁簸。這使得開發(fā)的時間大大節(jié)省爬早,并且保證應(yīng)用性能的最大化。通常來說启妹,開發(fā)者需要關(guān)注從內(nèi)存中移除控制器筛严。而使用 GetX 的時候,則無需這么做饶米。當(dāng)控制器不被使用的時候桨啃,資源會自動從內(nèi)存中釋放。如果確實(shí)需要常住內(nèi)存咙崎,那就需要在依賴中聲明 permanent:true优幸。通過這種方式,可以降低內(nèi)存中有過多不必要依賴對象的風(fēng)險褪猛。同時网杆,依賴默認(rèn)也是懶加載。
  • 組織性(Organization):GetX 可以將視圖伊滋、展示邏輯碳却、業(yè)務(wù)邏輯、依賴注入和導(dǎo)航完全解耦笑旺。路由之間跳轉(zhuǎn)無需 context昼浦,因此我們的導(dǎo)航不會依賴組件樹。也不需要使用通過 InheritedWidgetcontext 訪問控制器或 BLOC 對象筒主,因此可以將展示邏輯和業(yè)務(wù)邏輯從虛擬的組件層分離关噪。我們也不需要像 MultiProvider 那樣往組件樹中注入 Controller/Model/Bloc 等類對象。因此可以將依賴注入和視圖分離乌妙。

GetX 生態(tài)

GetX 有很多特性使兔,使得編碼變得容易。每個特性之間是相互獨(dú)立的藤韵,并且只會在使用的時候才啟動虐沥。例如,如果僅僅是使用狀態(tài)管理,那么只有狀態(tài)管理會被編譯欲险。而如果只使用路由镐依,那么狀態(tài)管理的部分就不會編譯。

GetX 有一個很大的生態(tài)天试,包括了大型的社區(qū)維護(hù)槐壳,大量的協(xié)作者(GitHub 上看有132位),并且承諾只要 Flutter 存在就會繼續(xù)維護(hù)下去秋秤。而且 GetX 兼容 Android, iOS, Web, Mac, Linux, Windows多個平臺宏粤。GetX 甚至還有服務(wù)端版本 Get_Server(感覺Flutter要一統(tǒng)程序員界啊,啥時候支持鴻蒙灼卢?)绍哎。

為了簡化開發(fā)横浑,GetX 還提供了腳手架工具GET_CLI和 VSCode 插件GetX Snippets(也有Android Studio和 Intellij 插件)萌踱。提供了如下快速代碼模板:

  • getmain:GetX 的 main.dart代碼苫昌;
getmain.gif
  • getmodel:Model 類代碼胰坟,包括了 fromJson 和 toJson 方法
getmodel.gif
  • 其他,輸入 getxxxx 根據(jù)提示生成即可似忧,具體參考:GetX Snippets 介紹洛勉。

總結(jié)

本篇對 GetX 插件做了簡單的介紹页屠,可以看到 GetX 的生態(tài)確實(shí)很豐富檩互,感覺是一個集大成者特幔,GetX 基本上涵蓋了 Flutter應(yīng)用開發(fā)的很大一部分,如路由闸昨、主題蚯斯、多語言、彈層饵较、狀態(tài)管理拍嵌、依賴注入、網(wǎng)絡(luò)請求封裝等等循诉。GetX看著像一個框架横辆, 但實(shí)際上它的各個模塊是獨(dú)立的,其實(shí)是一個工具箱茄猫。對于開發(fā)的時候狈蚤,可以用它的全家桶,也可以從中任取所需的模塊到我們的應(yīng)用中使用划纽。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炫惩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子阿浓,更是在濱河造成了極大的恐慌,老刑警劉巖蹋绽,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芭毙,死亡現(xiàn)場離奇詭異筋蓖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)退敦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門粘咖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侈百,你說我怎么就攤上這事瓮下。” “怎么了钝域?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵讽坏,是天一觀的道長。 經(jīng)常有香客問我例证,道長路呜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任织咧,我火速辦了婚禮胀葱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘笙蒙。我一直安慰自己抵屿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布捅位。 她就那樣靜靜地躺著轧葛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绿渣。 梳的紋絲不亂的頭發(fā)上朝群,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機(jī)與錄音中符,去河邊找鬼姜胖。 笑死,一個胖子當(dāng)著我的面吹牛淀散,可吹牛的內(nèi)容都是我干的右莱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼档插,長吁一口氣:“原來是場噩夢啊……” “哼慢蜓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起郭膛,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤晨抡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耘柱,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡如捅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了调煎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镜遣。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖士袄,靈堂內(nèi)的尸體忽然破棺而出悲关,到底是詐尸還是另有隱情,我是刑警寧澤娄柳,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布寓辱,位于F島的核電站,受9級特大地震影響西土,放射性物質(zhì)發(fā)生泄漏讶舰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一需了、第九天 我趴在偏房一處隱蔽的房頂上張望跳昼。 院中可真熱鬧,春花似錦肋乍、人聲如沸鹅颊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堪伍。三九已至,卻和暖如春觅闽,著一層夾襖步出監(jiān)牢的瞬間帝雇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工蛉拙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尸闸,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓孕锄,卻偏偏與公主長得像吮廉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子畸肆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

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