Flutter GetX國際化語言包配置及深色模式切換

一開始用的是intl插件,配置插件生成的語言包文件完成多語言,但個(gè)別頁面刷新需要自己處理,不知是否是用了bool get wantKeepAlive => true;保留頁面狀態(tài)的原因。

現(xiàn)在換成GetX插件提供的國際化功能,非常好用

import 'package:get/get.dart';

在main.dart的build方法里配置getx:

GetMaterialApp(
    translations: IntlMsgs(), // 國際化語言包
    locale: Locale('zh', 'CN'),
    fallbackLocale: Locale('en', 'US'),
    localeListResolutionCallback: (locales, supportedLocales) {
      print('當(dāng)前系統(tǒng)語言環(huán)境:$locales');
      return;
    },
    ...

可以看到MaterialApp替換成了GetMaterialApp,translations參數(shù)配置了一個(gè)自定義的語言包文件,舉個(gè)例子:

class IntlMsgs extends Translations {
  @override
  Map<String, Map<String, String>> get keys => {
        'zh_CN': {
           'english': '英文',
        },
        'en_US': {
           'english': 'english',
        },
  };
}

創(chuàng)建一個(gè)類繼承自Translations,重寫keys的get方法,在里面配置多種語言的字段,上面的代碼只配置了一個(gè)english字段,支持中文和英文,我們在使用的時(shí)候就可以:

Text(
   'english'.tr,
),

字符串后面加個(gè) .tr 就行了,getx會(huì)根據(jù)當(dāng)前語言環(huán)境獲取對應(yīng)的字段

我們在切換語言的時(shí)候,只需要:

Get.updateLocale(Locale('en_US'));

就切換到英文了,因?yàn)間etx自帶狀態(tài)管理,我們不需要考慮頁面刷新

下面說深色模式,也是只需要一行:

Get.changeTheme(isDark
        ? ThemeData(
              brightness: Brightness.dark,
              primaryColor: Utils.hexColor('2c2c2b'),
           )
        : ThemeData(
              brightness: Brightness.light,
              primaryColor: Colors.white,
        ));

可以用Get.isDarkMode來獲取當(dāng)前是否是深色模式

image.png

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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