最近公司项目采用了GetX做状态管理,其中遇到了很多问题, 然后发现国内对GetX代码的介绍文章很少, 所以打算对GetX进行一波解析, 顺便也算学习
计划是这样的由简入难, 先从实用工具开始然后是路由状态管理, 其中夹带flutter源码的分析, 好了,废话不多说, 让我们开启今天的学习
国际化
1. Get国际化使用
翻译
翻译被保存为一个简单的键值字典映射。 要添加自定义翻译,请创建一个类并扩展翻译。
import 'package:get/get.dart';
class Messages extends Translations {
@override
Map<String, Map<String, String>> get keys => {
'zh_CN': {
'hello': '你好 世界',
},
'de_DE': {
'hello': 'Hallo Welt',
}
};
}
使用方法
只需要将.tr加在指定widget上即可
Text('hello'.tr);
这里的.tr其实是用extension实现的,之后会专门针对extension写一篇文章,通过它来解决flutter代码嵌套问题
改变语言
调用Get.updateLocale(locale)来更新语言环境,然后Get会自动翻译成对应的语言
var locale = Locale('en', 'US');
Get.updateLocale(locale);
系统语言
要读取系统,可以使用window.locale
import 'dart:ui' as ui;
return GetMaterialApp(
locale: ui.window.locale,
);
2. Get国际化做了哪些东西
对比flutter中文网国际化我们不难看出,getX代码精简了很多, 只需要在GetMaterialApp中配置一下locale,写一个配置文件就可以使用了
GetX的实现也很简单,基本所有的代码都在Internationalization.dart中实现,包括对string的扩展,GetInterface的扩展, locale的存储等
上文中提到的.tr中主要是做了几个判断,判断key是否存在,如果存在则从translations中去取值
数据存储基本都是在get_material_app.dart中做的,包括locale,和translations
updateLocale的操作是放在extension_navigation.dart中,更新完Get.locale操作后执行了一下engine!.performReassemble()刷新视图
好了今天的文章就分享到这了, 第一次分享准备的不是很充分, 我相信只要坚持下来,每天都有新收获,加油打工人