• Flutter 全能型选手GetX —— 多语言配置/主题设置/离线缓存


    使用篇 

     原理篇

    一、多语言配置

    首先新建一个Messages类继承Translations

    1. class Messages extends Translations {
    2.   @override
    3.   Map<String, Map<String, String>> get keys => {
    4.         "en_US": {
    5.          Globalization.english: "english",
    6.        
    7.         },
    8.         "zh_CN": {
    9.          Globalization.english: "英语",
    10.      
    11.         }
    12.       };
    13. }


    接着声明一个常量类来存放key,方便引用

    1. class Globalization {
    2.   static const String english = "english";
    3.   
    4. }

    然后在GetMaterialApp里配置
     

    1. GetMaterialApp(
    2.       translations: Messages(),
    3.       locale: const Locale('zh', 'CN'),
    4.         fallbackLocale: Locale('en', 'US')
    5.           ...
    6.     );


    translations 传入的就是我们定义好的继承自 Translations 的类的对象,locale 则是我们默认使用的语言,fallbackLocale 则是当我们默认语言资源没有时就会使用 fallbackLocale 配置的资源。

    最好一步就是使用了。如下所示:

    Text(Globalization.english.tr);

    如果你想获取系统语言环境可以使用如下

    1. return GetMaterialApp(
    2.     locale: Get.deviceLocale,
    3. );

    如果你想改变语言环境可以设置如下

    1. var locale = Locale('en', 'US');
    2. Get.updateLocale(locale);


    二、离线存储


    GetX 可以缓存内容对象,以便在不同页面共享数据。使用的时候需要注意,需要先 put 操作再 find操作,否则会抛异常。

    首先是内存缓存

    1. Get.put(CacheData(name: '这是缓存数据'));
    2. CacheData cache = Get.find();


    GetX 提供了一个 get_storage 插件用于离线存储,与 shared_preferences 相比,其优点是纯 Dart 编写,不依赖于原生,因此可以在安卓、iOS、Web、Linux、Mac 等多个平台使用。GetStorage 是基于内存和文件存储的,当内存容器中有数据时优先从内存读取。同时在构建 GetStorage 对象到时候指定存储的文件名以及存储数据的容器。

    1. GetStorage storage = GetStorage();
    2. storage.write('name', 'river');
    3. storage.read('name');


    三、主题设置
     

    设置为浅色主题Get.changeTheme(ThemeData.light());
    设置为深色主题Get.changeTheme(ThemeData.dark());
     
    放在一个onPressed中,根据Get.isDarkMode判断

    1. Get.changeTheme(Get.isDarkMode? ThemeData.light(): ThemeData.dark());
    2.  GetMaterialApp中设置默认主题
    3.  GetMaterialApp(
    4.     theme:  ThemeData.light(),
    5.     darkTheme: ThemeData.dark(),
    6.     themeMode: ThemeMode.light
    7. )


     

  • 相关阅读:
    Java SPI机制分析
    网络安全中的POC、EXP、Payload、ShellCode
    css3新特性有哪些?
    009.配置文件定制bash
    intel 一些偏门汇编指令总结
    Matlab工具箱实现张正友相机标定
    振弦采集仪应用于隧道安全监测
    Redis 笔记
    Spring Boot 中使用 ResourceLoader 加载资源的完整示例
    Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
  • 原文地址:https://blog.csdn.net/hjjdehao/article/details/126492262