Flutter完全开发手册
  • Flutter Getx国际化(多语言切换)、GetUtils工具类

    Flutter 项目需要支持国际化,采用getx自带的国际化,简单快捷又方便。在我们使用系统自带MaterialApp来实现国际化配置,需要进行很多配置,而且还需要手动去依赖第三方组件,而使用GetX来实现国际化配置,你只需要一行代码即可实现切换,接下来我们看一下具体实现吧。

    一、Getx 国际化配置

    第一步:应用程序入口配置

    translations:国际化配置文件

    locale:设置默认语言,不设置的话为系统当前语言

    fallbackLocale:配置错误的情况下,使用的语言

    
    // 国际化配置
    return GetMaterialApp(
      title: "GetX",
      translations: Messages(),
      locale: Locale('zh', 'CN'), //设置默认语言
      fallbackLocale: Locale("zh", "CN"), // 在配置错误的情况下,使用的语言
      home: InternationalizationExample(),
    );
    

    第二步:创建国际化类

    需要继承自Translations并重写keys方法。

    
    import 'package:get/get.dart';
    class Messages extends Translations {
      @override
      // TODO: implement keys
      Map> get keys => {
        'zh_CN': {
          'hello': "你好, 世界"
        },
        'en_US': {
          'hello': 'hello world'
        }
      };
    }
    

    第三步:创建控制器类,用于切换语言

    
    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);
      }
    }
    

    第四步:实例化控制器并使用

    
    MessagesController messagesController = Get.put(MessagesController());
    
    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("切换到英文")
    		),
    	  ],
    	),
         ),
    

    二、GetUtils工具类

    GetUtils 是getx为我们提供一些常用的工具类库,包括值是否为空、是否是数字、是否是视频、图片、音频、PPT、Word、APK、邮箱、手机号码、日期、MD5、SHA1等等。

    我们这里举几个简单的例子:

    以判断是否是邮箱、手机号、IPV4地址

    
    body: Center(
    	child: Column(
    	  mainAxisAlignment: MainAxisAlignment.center,
    	  crossAxisAlignment: CrossAxisAlignment.center,
    	  children: [
    		Padding(
    		  padding: EdgeInsets.all(20),
    		  child: TextField(
    			controller: textFieldController,
    		  ),
    		),
    		Padding(
    		  padding: EdgeInsets.all(10),
    		  child: ElevatedButton(
    			child: Text("判断是否是邮箱"),
    			onPressed: () async {
    			  if (GetUtils.isEmail(textFieldController.text)) {
    				Get.snackbar("提示", "邮箱正确",
    					backgroundColor: Colors.greenAccent);
    			  } else {
    				Get.snackbar("邮箱错误", "请输入正确的邮箱",
    					backgroundColor: Colors.pink);
    			  }
    			},
    		  ),
    		),
    		Padding(
    		  padding: EdgeInsets.all(10),
    		  child: ElevatedButton(
    			child: Text("判断是否是手机号"),
    			onPressed: () async {
    			  if (GetUtils.isPhoneNumber(textFieldController.text) &&
    				  textFieldController.text.length == 11) {
    				Get.snackbar("正确", "手机号正确",
    					backgroundColor: Colors.greenAccent);
    			  } else {
    				Get.snackbar("手机号错误", "请输入正确的手机号",
    					backgroundColor: Colors.pink);
    			  }
    			},
    		  ),
    		),
    		Padding(
    		  padding: EdgeInsets.all(10),
    		  child: ElevatedButton(
    			child: Text("判断是否是IPv4"),
    			onPressed: () async {
    			  if (GetUtils.isIPv4(textFieldController.text)) {
    				Get.snackbar("正确", "IPv4正确",
    					backgroundColor: Colors.greenAccent);
    			  } else {
    				Get.snackbar("地址错误", "请输入正确的IPv4地址",
    					backgroundColor: Colors.pink);
    			  }
    			},
    		  ),
    		),
    	  ],
    	),
      ),
    
    上一篇:Flutter GetView用法、GetxController生命周期下一篇:Flutter 连接IOS真机调试