功能展示
image.pngDAO 采坑
1. Model设计
1.1 简单Model实现
添加成员变量,声明Dart可变构造函数,创建一个factory
的fromJson()方法转化为实体。
1.2 复杂Model实现
复杂Model的实现,在于成员变量是List<Model>
,在fromJson()方法需要通过map((i) => CommonModel.fromJson(i)).toList()
转化为List即可。小结
1. 乱码处理:
Utf8Decoder utf8decoder = Utf8Decoder();修复中文乱码问题。
2.factory 关键字:
我们在实现一个构造函数时使用factory
关键字时,这个构造函数不会总是创建其类的新实例
3.toJson() :
当需要打印实体信息的时候需要写toJson()方法,将Model转化成Map
对象即可。
4.async与await:
当遇到有需要延迟的运算(async)时,将其放入到延迟运算的队列(await)中去,把不需要延迟运算的部分先执行掉,最后再来处理延迟运算的部分。
启动屏
由于启动App的时候会加载FlutterSDK等会造成App有短暂的白屏时间,所以需要制作一个启动屏幕来掩盖白屏。
- 通过runOnUiThread方法加载Dialog显示启动屏,最后通知主线程更新
- 防止Activity内存泄漏使用软引用持有activty。
- 在onCreat()方法中调用显示启动屏
- 在Native中通过实现
MethodCallHandler
,在Flutter中关闭启动屏。
自定义Widget
WebView
1. 防止用户多次点击WebView造成重复打开
- 在
initState()
中,获得WebView的引用用来关闭,2. 监听WebView State状态判断是否是主页
- 当State发生改变的时候判断URL是否是白名单中URL的结尾。如果是主页那么返回APP的上一层。
- 需要设置exiting bool变量防止重复返回。(防止用户多次按返回键直接退出应用)
3. dispose() 导致WebView中的Back键失效
需要在,super.dipose()
之前关闭各个监听4. appBar加载策略
- 判断hideAppBar,判断是否隐藏AppBar
- 添加Padding,解决AppBar在系统栏。
- Stack布局包裹
- AppBar的颜色,判断是否有背景颜色,无背景颜色设置为黑色。
5. WebView布局加载
- Expanded Wiget控件将WebView控件撑满剩下的空间。
initialChild
属性显示加载页面
打包
- 开启混淆,减小APK大小
- 选择App支持的架构
ndk { abiFilters "arm64-v8a", "x86_64", "x86" // 只打包flutter所支持的架构 //abiFilters "armeabi-v7a"// release }
网友评论