Flutter GetX基礎(chǔ)教程(十):國(guó)際化配置

國(guó)際化配置

在我們使用系統(tǒng)自帶MaterialApp來(lái)實(shí)現(xiàn)國(guó)際化配置茬暇,需要進(jìn)行很多配置,而且還需要手動(dòng)去依賴第三方組件,而使用GetX來(lái)實(shí)現(xiàn)國(guó)際化配置,你只需要一行代碼即可實(shí)現(xiàn)切換粥鞋,接下來(lái)我們看一下具體實(shí)現(xiàn)。

視頻教程地址

零基礎(chǔ)視頻教程地址

第一步:應(yīng)用程序入口配置

  • translations: 國(guó)際化配置文件
  • locale: 設(shè)置默認(rèn)語(yǔ)言瞄崇,不設(shè)置的話為系統(tǒng)當(dāng)前語(yǔ)言
  • fallbackLocale: 配置錯(cuò)誤的情況下,使用的語(yǔ)言

import 'package:flutter/material.dart';
import 'package:flutter_getx_example/InternationalizationExample/InternationalizationExample.dart';
import 'package:get/get.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
/// 國(guó)際化配置
return GetMaterialApp(
title: "GetX",
translations: Messages(),
locale: Locale('zh', 'CN'), //設(shè)置默認(rèn)語(yǔ)言
fallbackLocale: Locale("zh", "CN"), // 在配置錯(cuò)誤的情況下,使用的語(yǔ)言
home: InternationalizationExample(),
);
}
}
</pre>

第二步:創(chuàng)建國(guó)際化類

需要繼承自Translations并重寫keys方法呻粹。
import 'package:get/get.dart';

class Messages extends Translations {

@override
// TODO: implement keys
Map<String, Map<String, String>> get keys => {
'zh_CN': {
'hello': "你好, 世界"
},
'en_US': {
'hello': 'hello world'
}
};
}
</pre>

|`

第三步:創(chuàng)建控制器類壕曼,用于切換語(yǔ)言

`|

import 'dart:ui';
import 'package:get/get.dart';

class MessagesController extends GetxController {

void changeLanguage(String languageCode, String countryCode) {
var locale = Locale(languageCode, countryCode);
Get.updateLocale(locale);
}
}
</pre>

|`

第四步:實(shí)例化控制器并使用

`|
import 'package:flutter/material.dart';
import 'package:flutter_getx_example/GetXControllerWorkersExample/WorkersConroller.dart';
import 'package:flutter_getx_example/InternationalizationExample/MessagesCnotroller.dart';
import 'package:get/get.dart';

class InternationalizationExample extends StatelessWidget {

MessagesController messagesController = Get.put(MessagesController());

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Internationalization"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text('hello'.tr, style: TextStyle(color: Colors.pink, fontSize: 30)),
ElevatedButton(
onPressed: () => messagesController.changeLanguage('zh', "CN"),
child: Text("切換到中文")
),
SizedBox(height: 20,),
ElevatedButton(
onPressed: () => messagesController.changeLanguage('en', "US"),
child: Text("切換到英文")
),
],
),
),
);
}
}
</pre>

|`

效果展示

依賴注入
在前面的文章中,我們經(jīng)常使用Get.put(MyController())來(lái)進(jìn)行控制器實(shí)例的創(chuàng)建等浊,這樣我們就算不使用控制器實(shí)例也會(huì)被創(chuàng)建腮郊,其實(shí)GetX還提供很多創(chuàng)建實(shí)例的方法,可根據(jù)不同的業(yè)務(wù)來(lái)進(jìn)行創(chuàng)建筹燕,接下來(lái)我們簡(jiǎn)單介紹一下幾個(gè)最常用的

Get.put(): 不使用控制器實(shí)例也會(huì)被創(chuàng)建
Get.lazyPut(): 懶加載方式創(chuàng)建實(shí)例轧飞,只有在使用時(shí)才創(chuàng)建
Get.putAsync(): Get.put()的異步版版本
Get.create(): 每次使用都會(huì)創(chuàng)建一個(gè)新的實(shí)例
我們來(lái)看一下代碼演示

第一步:應(yīng)用程序入口配置
import 'package:flutter/material.dart';
import 'package:flutter_getx_example/DependecyInjectionExample/DependecyInjectionExample.dart';
import 'package:get/get.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
title: "GetX",
home: DependecyInjectionExample(),
);
}
}
第二步:創(chuàng)建控制器
import 'package:flutter_getx_example/ObxCustomClassExample/Teacher.dart';
import 'package:get/get.dart';

class MyController extends GetxController {
var teacher = Teacher();

void convertToUpperCase() {
teacher.name.value = teacher.name.value.toUpperCase();
}
}
第三步:實(shí)例化控制器并使用
import 'package:flutter/material.dart';
import 'package:flutter_getx_example/GetXControllerExample/MyController.dart';
import 'package:get/get.dart';

class DependecyInjectionExample extends StatelessWidget {
@override
Widget build(BuildContext context) {

// 即使不使用控制器實(shí)例也會(huì)被創(chuàng)建
// tag將用于查找具有標(biāo)簽名稱的實(shí)例
// 控制器在不使用時(shí)被處理,但如果永久為真撒踪,則實(shí)例將在整個(gè)應(yīng)用程序中保持活動(dòng)狀態(tài)
MyController myController = Get.put(MyController(), permanent: true);
// MyController myController = Get.put(MyController(), tag: "instancel", permanent: true);

// 實(shí)例將在使用時(shí)創(chuàng)建
// 它類似于'permanent'过咬,區(qū)別在于實(shí)例在不被使用時(shí)被丟棄
// 但是當(dāng)它再次需要使用時(shí),get 將重新創(chuàng)建實(shí)例
// Get.lazyPut(()=> MyController());
// Get.lazyPut(()=> MyController(), tag: "instancel");

// Get.put 異步版本
// Get.putAsync<MyController>(() async  => await MyController());

// 每次都將返回一個(gè)新的實(shí)例
// Get.create<MyController>(() => MyController());

return Scaffold(
  appBar: AppBar(
    title: Text("GetXController"),
  ),
  body: Center(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        ElevatedButton(
          onPressed: () {
            // 實(shí)例使用的tag創(chuàng)建
            // Get.find<MyController>(tag: 'instancel');

            Get.find<MyController>();
          },
          child: Text("別點(diǎn)我"))
      ],
    ),
  ),
);

}
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末制妄,一起剝皮案震驚了整個(gè)濱河市掸绞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耕捞,老刑警劉巖衔掸,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異俺抽,居然都是意外死亡敞映,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門磷斧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)振愿,“玉大人,你說(shuō)我怎么就攤上這事弛饭∶崮” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵孩哑,是天一觀的道長(zhǎng)栓霜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)横蜒,這世上最難降的妖魔是什么胳蛮? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮丛晌,結(jié)果婚禮上仅炊,老公的妹妹穿的比我還像新娘。我一直安慰自己澎蛛,他們只是感情好抚垄,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般呆馁。 火紅的嫁衣襯著肌膚如雪桐经。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天浙滤,我揣著相機(jī)與錄音阴挣,去河邊找鬼。 笑死纺腊,一個(gè)胖子當(dāng)著我的面吹牛畔咧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播揖膜,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼誓沸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了壹粟?” 一聲冷哼從身側(cè)響起拜隧,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎煮寡,沒(méi)想到半個(gè)月后虹蓄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體犀呼,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幸撕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了外臂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坐儿。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宋光,靈堂內(nèi)的尸體忽然破棺而出貌矿,到底是詐尸還是另有隱情,我是刑警寧澤罪佳,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布逛漫,位于F島的核電站,受9級(jí)特大地震影響赘艳,放射性物質(zhì)發(fā)生泄漏酌毡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一蕾管、第九天 我趴在偏房一處隱蔽的房頂上張望枷踏。 院中可真熱鬧,春花似錦掰曾、人聲如沸旭蠕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)掏熬。三九已至佑稠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旗芬,已是汗流浹背讶坯。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岗屏,地道東北人辆琅。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像这刷,于是被迫代替她去往敵國(guó)和親婉烟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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