新建一个Flutter工程,android模块。
创新互联是一家专注于成都做网站、网站建设与策划设计,江阴网站建设哪家好?创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:江阴等地区。江阴做网站价格咨询:18980820575
1,只有一个Activity组件,它是Dart层绘制Widget的容器。
2,Application配置FlutterApplication。
应用Application配置io.flutter.app.FlutterApplication类,App首次启动时,初始化。
调用FlutterMain.startInitialization()方法。
initConfig方法,从AndroidManfest.xml配置的applicaion节点获取meta-data数据,初始化以下默认值。
这些值都是使用中用到的name,例如,抽取apk中asset资源时,flutter_assets打包目录,打包产物data名称。
initResources方法, 初始化资源。
在Flutter打包apk的asset目录下,包括fluttter_asset目录/资源项,将资源从apk中抽取,保存在 Context.getDir("flutter", 0) 目录下。
/data/user/0/包名/app_flutter目录。
在目录中创建一个时间戳文件,根据apk版本和包信息记录的lastUpdateTime更新时间,第二次启动时,若apk未更新,不需要再次抽取。
加载so库,libflutter.so,System.loadLibrary()。
主页面继承FlutterActivity,配置启动模式singleTop。
FlutterActivity类在io.flutter.app包, (区别io.flutter.embedding.android包), 组件生命周期委托给FlutterActivityDelegate类。
组件启动,onCreate方法。
FlutterMain.ensureInitializationComplete方法,确保资源成功抽取完成,创建FlutterView视图(io.flutter.view),继承SurfaceView类,setContentView方法,设置组件主布局即FlutterView视图。
最后,根据Bundle路径,runBundle()加载运行,
调用FlutterView的runFromBundle方法,入口点在dart的main方法,
通过FlutterNativeView,调用FlutterJNI的native方法。
nativeRunBundleAndSnapshotFromLibrary方法。
任重而道远
在说flutter国际化前,不得不提到,在uni-app中支持的Vue-i18n,两者有相似之处,也有差异的地方。
本篇借鉴了三篇热门帖子
Flutter中的国际化:如何写一个多语言的App
Flutter国际化完整例子
Internationalization - Make an Flutter application multi-lingual
只记录根据手机系统语言自动转换app语言
引入后,保存会自动加入安装此依赖
我们新建一个和"/lib"同级别的文件夹"/locale",然后在这个文件夹中新建两个文件,分别为"i18n_en.json" 和" i18n_zh.json"。再在"/lib"文件夹下创建和"main.dart"同级的"translation.dart"和"application.dart"。
文件夹树现在是这个样子的:
MyApplication
|
+- android
+- build
+- images
+- ios
+- lib
|
+-main.dart
+-translation.dart
+-application.dart
+- locale
|
+- i18n_en.json
+- i18n_zh.json
+- test
在pubspec.yaml继续加入json,引入静态资源
补充:如果需要强制转换的话(我自己没有用到)
在开发应用的时候,有时候需要本地存储一个临时数据,这时候可以使用 Flutter 的 shared_preferences 插件,此插件在 iOS 上使用 NSUserDefaults,在 Android 上使用 SharedPreferences,为简单数据提供持久存储。
先安装依赖:
shared_preferences 使用的存储方式是 key-value 形式。
虽然使用键值存储非常简单方便,但它有一些限制:
shared_preferences 实例常用方法: