产品级 Flutter 开源项目 FunAndroid,Provider MVVM 的最佳实践,2021 移动开发者真的太难了
代码编译
Flutter SDK (Channel dev, v1.10.4)
如果要查看运行效果,一定要使用 Release 模式,流畅程度差距非常大
Flutter 的
Debug
和Release
的编译模式不同,下分别是JIT
和AOT
.Debug
模式支持hot reload
.
iOS 运行在 splash 页面卡住,需要检查当前的 scheme,如果为
release
,需在命令行执行flutter build ios

项目国际化部分依赖了 AndroidStudio 的插件flutter_i18n 需要在 plugin 仓库中,搜索
Flutter i18n
.安装插件成功后,重启 AndroidStudio 后,会生成lib/generated/i18n.dart
文件
具体方案和使用参考掘金-rhyme_lphlv的博文
介绍
借用群里水友的两句对白,在预览版出来时候
1A:话说
玩Android
的开源项目已经多如牛毛了。3C:我想看最漂亮的。
感谢这位朋友对Fun Android
的认可。
关于 App 的主题风格,不全是 Google 倡导的 Material Design 也不全是 Apple 的 Cupertino Style。由于我是一个 Android 开发者,但又长期使用的 iPhone,所以 App 的风格是两者的结合又夹杂了点私货。个人认为 iOS 版本的确实好看点。
代码中存在的问题,请大家积极提Issue.
更新
V0.1.12 2019-10-21
(未发布)
下拉刷新列表在加载失败时,如果当前页没有数据显示错误提示页,有数据则弹出 toast 提示
V0.1.11 2019-10-17
增加网络加载失败的提示
V0.1.10 2019-10-16
修复收藏页面'shareUser'字段为空导致报错的 bug
V0.1.9 2019-10-14
极致黑(Native 的闪屏页面适配 darkMode)
首页 banner 高度根据屏幕宽高适应
签名文件调整
V0.1.8 2019-10-13
文章列表加入分享人
首页加入数据为空的逻辑判断
ViewStateModel 中逻辑优化,bug fix
状态栏字体颜色优化
修复 TextField 中 hint 为中文时不居中的问题
V0.1.7 2019-09-23
DarkMode 自动跟随系统设置
App 更新组件调整
适配 Dio3.0 版本
pull_to_refresh 更新:加入国际化
V0.1.6 2019-09-20
修复收藏列表进入详情时,页面报错的 bug
V0.1.5 2019-09-19
Flutter SDK 更新至 Channel dev, v1.10.3,修复
我的
页面莫名卡死的问题修改 Android 端 App 名称为 Fun Android
V0.1.4 2019-09-18
适配 Flutter 1.9.x
Android 加入版本更新
加入 LeanCloud API 云服务
移除修复首页黑屏问题的代码
官方在1.10.1版本已修复
移除之前屏幕适配方案,对 NativeView 影响过大
修复版本更新导致的 AppBar 中进度条颜色与背景色不明显的问题
重构 Http 使用方式,解耦性更好
首页 banner 高度调整
Android 状态栏透明
2019-09-10
flutter 版本更新
适配更新 AppBar 区域 CupertinoActivityIndicator 的主题色彩冲突
移除 OffState 和 Indicator 的组合使用,优化性能
调整 textField 的 clear 实现方式,防止报错
2019-09-09
修复各页面里文章 收藏 状态没有同步的问题
首页收藏后,其他 tab 页对应 item 的收藏状态同步
我的收藏页面里移除收藏.其他页面状态同步
登录登出后各页面收藏状态刷新
如果相同账号在其他平台修改过收藏状态,只需要刷新列表即可同步收藏状态.(WanAndroid 接口目前存在问题)
优化 Dropdown 弹出动画
首页初次加载数据禁用上拉记载更多功能
登录页面输入框可通过回车键切换
2019-08-30
修复积分数值在登录后没有刷新的 bug
修复进入 Splash 页面短暂黑屏的 bug
修复未登录时,点击收藏还可以播放动画的 bug
默认主题色调整为亮色
2019-08-29
添加积分记录和排行榜功能
2019-08-28
在设置中添加 WebViewPlugin 的开关
在详情中移除收藏后,回到收藏列表页面自动刷新
2019-08-26
更新收藏动画的实现方式,之前实现的方式侵入性太强,每个页面都要先隐藏一个小??。现在换了路由?Hero 的思路,重新调整了 Flare。显示动画一行代码就 ok。(如果你运行代码之后发现,该动画与图上会有一丝丝不一致,列表项右下角的小心会闪一下.不用担心那是 flutter 的 bug,目前在 master 分支已经修复.见pr-37341)

项目结构
|

|

Provider MVVM 的简单使用方式
快速添加一个拥有下拉刷新,上拉加载更多的页面.比如开发一个
玩Android
首页列表页面
Model

ViewModel

View

以上是 Provider 结合 ViewModel 的基础使用方式,考虑了 App 中会出现的比较全面的情况,希望大家一起探讨使用方式
另外在判断页面状态的时候,其实拿
model.viewState == ViewState.busy
会更严谨一点.为了书写方便,加了一个对应方法
这里能找到什么?
Provider 状态管理的最佳实践,虽然 Google 很早就废弃了
Provide
,宣布Provider
为推荐的状态管理工具,可是在开发中,我们总是会遇到很多问题。比如
Provider
的几个衍生类在具体的业务中应该怎么使用?页面最初需要的数据什么时候进行初始化,在哪里初始化。
如何将页面的几个常用状态
loading
、error
、empty
、idle
、unAuthorized
进行组合使用。常用的
下拉刷新
,上拉加载更多
应如何服用才能效果更佳。Widget 在 dispose 后,
model
不再 notify()。清晰的代码结构。
让页面归页面,让业务归业务,所有的业务逻辑都在
view_model
中,Widget 只关注页面本身。不要再满屏幕的 setState()。
同一页面内可以利用 Flutter 框架给我们提供的各种 XxxBuilder,来局部刷新。
多层嵌套可使用前边提到的
Provider
。当然颗粒度足够细的 Widget,还是要使用 setState()。eg: ChangeLogPage中的ChangeLogView 功能单一,刷新不会影响别的 widget。
实现了 App 的基础功能,可 copy 当作模板代码快速开发
主题切换
夜间模式切换
字体切换
漂亮的骨架屏
利用
IDE
插件i18n
进行国际化Dio 结合 Cookjar,实现
玩Android
的登录功能AnimationList 结合 SmartRefresh 的常规数据加载
当然还有 WanAndroid 本身也有不错的内容,每日闲暇时,可以读一读。
未完成的功能
首页二楼目前是我个人的 blog,也无法前进后退。后期会放一个 flutter 专题。
Hero 动画,在非最后一个 tab 登陆时,logo 的动画会漂移到最后一个,需要加状态判断。
退出登陆加入动效。
目前已知存在的问题
webview_flutter 插件的问题还是很多,有些链接点击会没有反应,不会跳转。所以接入了两套 WebView 方案
webview_flutter 不能结合
CustomScrollView
滑动。见issue 。两个同样颜色的 widget,中间莫名其妙的会多一条背景色的线。见issue 。
Future
后期会上线大量博客,来讲述这个项目里所遇到的问题及解决的思路。
寻找组织
Fun Flutter 微信交流群

作者的话
最后
其实 Android 开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
上面分享的腾讯、头条、阿里、美团、字节跳动等公司 2019-2021 年的高频面试题,博主还把这些技术点整理成了视频和 PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
【Android 思维脑图(技能树)】
知识不体系?这里还有整理出来的 Android 进阶学习的思维脑图,给大家参考一个方向。

【Android 高级架构视频学习资源】
**Android 部分精讲视频领取学习后更加是如虎添翼!**进军 BATJ 大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务 Curd 而已!现如今市场上初级程序员泛滥,这套教程针对 Android 开发工程师 1-6 年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶 Android 中高级、架构师对你更是如鱼得水,赶快领取吧!
评论