Flutter携程APP总结

功能展示

image.png

DAO 采坑

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
       }

参考资料

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容