码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Flutter 全能型选手GetX —— 多语言配置/主题设置/离线缓存


    使用篇 

    •  简介
    • 依赖管理
    • 路由管理
    • 状态管理
    • 主题配置
    • 多语言配置
    • 离线缓存
    • 网络请求

     原理篇

    • 从源码看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. )


     

  • 相关阅读:
    超详细干货!Docker+PXC+Haproxy搭建高可用强一致性的MySQL集群
    c#学习笔记-继承
    【NOI模拟赛】Anaid 的树(莫比乌斯反演,指数型生成函数,埃氏筛,虚树)
    STL再回顾(非常见知识点)
    【ArcGIS微课1000例】0044:ArcGIS使用山体阴影显示DEM的3种方法
    java基础之Map集合
    两数乘积:输出1~100整数乱序列表中两数乘积是目标整数的最小下标对
    【计算机毕业设计】基于微信小程序的电影院票务系统
    数据结构之顺序表
    Vue:v-on、v-bind、v-model、@click、:model用法以及区别(附代码实例)
  • 原文地址:https://blog.csdn.net/hjjdehao/article/details/126492262
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号