产品级Flutter开源项目FunAndroid,Provider MVVM的最佳实践
基于Google的Flutter,及官方推荐状态管理Provider和玩Android开放的API,打造的一款产品级开源App《Fun Android》
Logo的里F,既代表了
Fun
也代表了Flutter
.
先来点样图
项目地址
https://github.com/phoenixsky/fun_android_flutter
代码编译
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版本的确实好看点。
项目结构
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
后期会上线大量博客,来讲述这个项目里所遇到的问题及解决的思路。
作者:phoneixsky
链接:https://juejin.im/post/5d60f946f265da03d063ab0f
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
喜欢 就关注吧,欢迎投稿!
产品级Flutter开源项目FunAndroid,Provider MVVM的最佳实践相关推荐
- 【Flutter】Flutter 开源项目参考
文章目录 一.Flutter 开源项目参考 二.相关资源 一.Flutter 开源项目参考 Flutter 项目实例 : Flutter 源码附带示例 : https://github.com/flu ...
- 《开源安全运维平台OSSIM最佳实践》实验环境下载
<开源安全运维平台OSSIM最佳实践>实验环境下载 由清华大学出版社首发.当当.京东自营店.天猫.亚马逊均有销售. OSSIM开源安全交流QQ群: 179084574 经多年潜心研究开源 ...
- 《开源安全运维平台OSSIM最佳实践》
<开源安全运维平台OSSIM最佳实践> 经多年潜心研究开源技术,历时三年创作的<开源安全运维平台OSSIM最佳实践>一书即将出版.该书用80多万字记录了,作者10多年的IT行业 ...
- 《开源安全运维平台OSSIM最佳实践》当当自营店 3-15活动 ,仅售 6 折
2019独角兽企业重金招聘Python工程师标准>>> <开源安全运维平台OSSIM最佳实践>当当自营店 3-15活动 ,仅售 6 折. 购书地址: http://pro ...
- 《开源安全运维平台OSSIM最佳实践》当当自营店 315活动 仅售6折
<开源安全运维平台OSSIM最佳实践>当当自营店 3-15活动 ,仅售 6 折. 购书地址: http://product.dangdang.com/23903741.html
- 开源代码 不开源_提供开源代码反馈的4个最佳实践
开源代码 不开源 在上一篇文章中,我为您提供了如何获得反馈的提示,尤其是在您第一次免费和开源项目的背景下. 现在该讨论同一枚硬币的另一面: 提供反馈. 如果我告诉您您所做的贡献是"愚蠢&qu ...
- vue项目开发心得和一些最佳实践
博客更新地址啦-,欢迎访问:https://jerryyuanj.github.io/blog 使用vue一年多了,做了一个javaee的项目(全栈,前端使用的mvvm框架vue),三个移动端项目,其 ...
- 大型开发项目中 git 工作流的最佳实践
Gitflow Workflow 是一个 Git 工作流,有助于持续软件开发和实施 DevOps 实践. 它由文森特·德里森 (Vincent Driessen) 在 nvie 首次出版并广受欢迎. ...
- android壁纸软件代码,Flutter开源项目——Android免费壁纸应用
简介 free_wallpaper是一款基于flutter的免费Android壁纸应用 项目明细 开发环境: android studio 3.5 Flutter 1.12.13+hotfix.7 • ...
- 各类Python项目的项目结构及代码组织最佳实践
1. 了解Python项目文件组织结构非常重要 为什么要掌握pythob项目结构? 优秀的程序员都使用规范的项目代码结构,了解这些好的习惯方式,能帮助你快速读懂代码 如果项目是几个人合作开发,好的代码 ...
最新文章
- 阿里云服务器CentOS6.9 nexus私服使用
- 20162302 《程序设计与数据结构》第一周学习总结
- Angular Reactive Form里的setNgReflectProperty
- Android之自定义checkbox并解决内容和复选框之间的具体问题
- vue 在 html 中自定义 tag
- Kaggle新赛 | HuBMAP: 识别人体肾脏组织图像中的肾小球~总奖金 6 万美金
- python opencv3 特征提取与描述 DoG SIFT hessian surf
- Mysql 高负载排查思路
- [转]java applet
- 我想我是适合独处的人
- Linux下的目录简介
- 游戏策划入门(6)——把模块变成现实
- 车牌识别存储云服务器,云端(服务器)车牌识别技术
- 磁耦隔离与传统隔离的区别
- 读 《异类》—马尔科姆·格拉德威尔 文摘
- DW3000芯片供电部分介绍
- 论文阅读KMN:Kernelized Memory Network for Video Object Segmentation
- VirtualBox安装黑群晖并建立smb共享目录的方法
- 如何简单的实现一个遮罩层
- 线上展会APP开发解决方案
热门文章
- pdf密码忘了怎么解除
- 用Threejs做一只会动的3D玉兔祝大家中秋快乐
- html未响应是什么原因,ie浏览器未响应如何解决
- 达梦数据库关闭 消息校验的警告 Failure occurs in data_recv_inet_once
- Springboot开关柜综合监测信息查询系统毕业设计-附源码191550
- android studio怎么后退,Android Studio:上一个活动的后退按钮
- c语言程序后退_单片机控制小车循迹(前进、后退、左右转)
- i5 8250u java_i5 8250u属于什么级别?i5 8250u的性能参数详解
- 修改hexo的主题nexT中的Pisces主题宽度
- 矩母函数求期望与方差