flutter 国际化flutter使用 intl插件,provider状态保存
1.下载插件
2.插件下载完成后重启一下android studio,在工具栏tool中会多一个flutter intl的选项
3.点击initialize for project,等待项目生成语言包
其中.arb文件是我们不同语言包,放入需要翻译的字段;intl文件夹是自动生成的,放置的翻译好的dart文件,我们不用管理
4.如果要添加其他语言需要下面操作
创建之后的文件加目录
*打开.arb看下
恭喜准备工作完成
二、代码设置
1.在pubspec.yaml文件添加以下依赖
#包含sp工具
flustars: ^0.3.2
provider: 4.3.1
2.在main文件中注册好语言包,和provider全局通知
//注意一定要用comsumer包裹起立(provider需要)Consumer<LanguageProvider>(builder: (context, languageProvider, child) {return OKToast(textPadding: EdgeInsets.symmetric(horizontal:32 , vertical: 26 ),textStyle: TextStyle(fontSize: 15, color: Colors.white),backgroundColor: textColor333,radius: 7.0,child: MaterialApp(title: '交易所',///注册路由
// onGenerateRoute: (settings) => Routes.findRoutes(settings),theme: ThemeData(primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,),locale: _listenerLocal(languageProvider.language),localizationsDelegates: [S.delegate, //应用程序的翻译回调GlobalMaterialLocalizations.delegate,GlobalWidgetsLocalizations.delegate,],supportedLocales: S.delegate.supportedLocales,//支持语系,onGenerateTitle: (context) {return S.of(context).app_title;},home:xxpage()
locale: _listenerLocal(languageProvider.language)方法在下面第5步中
3.创建语言provider
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';class LanguageProvider with ChangeNotifier {///String _language;String get language => _language;void changeMode(String language) async {_language = language;notifyListeners();SpUtil.putString("language", language);}
}
4.在需要设置语言的页面使用方法
Text(S.of(context).app_title),
import 'package:bourse/generated/l10n.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';import '../../language_model.dart';
class SettingLanguagePage extends StatefulWidget {@override_SettingLanguagePageState createState() => _SettingLanguagePageState();
}class _SettingLanguagePageState extends State<SettingLanguagePage> {String groupValue = 'zh';void _changed(value) {if (value != null) {setState(() {groupValue = value;if (value == "zh") Provider.of<LanguageProvider>(context, listen: false).changeMode("zh");if (value == "en") Provider.of<LanguageProvider>(context, listen: false).changeMode("en");if (value == "jp") Provider.of<LanguageProvider>(context, listen: false).changeMode("jp");if (value == "kr") Provider.of<LanguageProvider>(context, listen: false).changeMode("kr");SpUtil.putString("language", groupValue);});}}@overridevoid initState() {// TODO: implement initStatesuper.initState();groupValue = SpUtil.getString("language");}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("SettingLanguagePage"),),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Text(S.of(context).app_title),RadioListTile<String>(title: Text('汉语'),value: 'zh',groupValue: groupValue,onChanged: _changed,),RadioListTile<String>(title: Text('English'),value: 'en',groupValue: groupValue,onChanged: _changed),RadioListTile<String>(title: Text('日语'),value: 'jp',groupValue: groupValue,onChanged: _changed),RadioListTile<String>(title: Text('韩语'),value: 'kr',groupValue: groupValue,onChanged: _changed),],),),);}
}
5.当程序退出重进时,需要取出保存上一次的状态,在mian文件中设置
String value = SpUtil.getString("language");_listenerLocal(String lag) {if (lag == "zh") {return Locale('zh');} else if (lag == "en") {return Locale('en');} else if (lag == "jp") {return Locale('jp');} else if(lag == "kr"){return Locale('kr');}else{if(value.isEmpty){return Locale('zh');}else{return Locale('$value');}}}
搞定!!!!
更正:语言包不能随便命名的,要根据规范
http://www.webapps-online.com/online-tools/languages-and-locales
修改上述语言包目录
flutter 国际化flutter使用 intl插件,provider状态保存相关推荐
- Flutter Provider 异步通信、Provider状态管理
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日提醒 随时随记 每日积累 随心而过 [x2]各种系列的视频教程 ...
- flutter基于provider状态管理设置主题颜色、实现简单登录、注册功能---页面+逻辑
一.provider状态管理设置主题颜色 第一步: 安装依赖库 provider: ^4.3.2+3 第二步: 创建共享数据模型 import 'package:flutter/material.da ...
- Flutter Provider状态管理-Consumer
前言 如果对Consumer很了解的同学可以继续学习 Flutter Provider状态管理 - Selector 个人觉得Flutter的学习有三个很重要的阶段 widget的学习和使用 数据以及 ...
- Flutter 笔记 | Flutter 文件IO、网络请求、JSON、日期与国际化
文件IO操作 Dart的 IO 库包含了文件读写的相关类,它属于 Dart 语法标准的一部分,所以通过 Dart IO 库,无论是 Dart VM 下的脚本还是 Flutter,都是通过 Dart I ...
- android 日期国际化,Flutter 日期时间选择类控件及国际化
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 DatePicker Flutter并没有DatePick ...
- 【Flutter】Flutter 应用生命周期 ( 前台状态 resumed | 后台状态 paused | 非活动状态 inactive | 组件分离状态 detached )
文章目录 一.Flutter 应用生命周期 二.监听 Flutter 应用生命周期 三.完整代码示例 四.相关资源 一.Flutter 应用生命周期 应用生命周期 : resumed : 应用进入前台 ...
- 【Flutter】Flutter 拍照示例 ( Flutter 插件配置 | Flutter 插件源码示例 | iOS 应用配置 | Android 应用配置 )
文章目录 一.Flutter 插件配置 二.Flutter 插件源码示例 三.iOS 应用配置 四.Android 应用配置 五.相关资源 一.Flutter 插件配置 Flutter 拍照示例中 , ...
- 【Flutter】Flutter 拍照示例 ( 创建应用 | 安装 image_picker 插件 )
文章目录 一.Flutter 创建新应用 二.安装 image_picker 插件 三.相关资源 一.Flutter 创建新应用 创建 Flutter 应用 , 选择 菜单栏 / File / New ...
- 【Flutter】Flutter 项目中使用 Flutter 插件 ( Flutter 插件管理平台 | 搜索 Flutter 插件 | 安装 Flutter 插件 | 使用 Flutter 插件 )
文章目录 一.Flutter 包和插件管理平台 二.Flutter 插件搜索示例 三.Flutter 插件装示例 1.添加 Dart 包依赖 2.获取 Dart 包 3.使用 Dart 包 4.官方的 ...
最新文章
- “-bash: !”: event not found、echo sudo permission denied
- linux下使用rpm安装libxml2,gcc,gcc-c++等基本包
- “正则表达式”应当称为“规则表达式”
- Python爬虫实战(5):模拟登录淘宝并获取所有订单
- odoo tree视图 当页不弹窗显示方法
- BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划
- 软考信息系统项目管理师_信息化与信息系统5_信息系统规划_补充问题---软考高级之信息系统项目管理师007
- 如何实现用户自己定义控件。
- 有向图的十字链表存储
- PostgreSQL监控指标
- css span 右端对齐_使用 CSS 实现具有方面感知的幽灵按钮
- SpringMVC上传文件的三种方式
- red hat4 安装yum的方法
- 通用新能源电动车动力电池包详细结构三维3D数模据图纸模型,格式3dxml
- 飞跃微信小程序一一新风口新模式,你所了解到的小程序有多少?
- 小米盒子显示连不上服务器,小米盒子连不上WiFi?这七个技巧绝对管用
- Thinkpad E430c 16GB内存安装成功
- 福特汉姆大学计算机科学专业,Fordham的Computer and Information Science「福特汉姆大学计算机与信息科学系」...
- 【云原生之Docker实战】使用Docker部署File Manager文件管理系统
- Element-ui源码分析之滚动条— el-scrollbar