phoenixsky / fun_android_flutter
- воскресенье, 1 сентября 2019 г. в 00:23:00
Dart
产品级Flutter开源项目FunAndroid,Provider的最佳实践
基于Google的Flutter,及官方推荐状态管理Provider和玩Android开放的API,打造的一款产品级开源App《Fun Android》
Logo的里F,既代表了
Fun也代表了Flutter.
![]() |
![]() |
![]() |
|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Android:
iOS:
ipa文件,用xcode安装
审核被拒...待调整后上架,由于该app内容含有大量Android相关信息,过于挑衅Apple,不知道还有没有希望过审.
代码编译:
Flutter的
Debug和Release的编译模式不同,下分别是JIT和AOT.Debug模式支持hot reload.
借用群里水友的两句对白,在预览版出来时候
1A:话说玩Android的开源项目已经多如牛毛了。
3C:我想看最漂亮的。
感谢这位朋友对FunAndroid的认可。
关于App的主题风格,不全是Google倡导的Material Design 也不全是Apple的Cupertino Style。由于我是一个Android开发者,但又长期使用的iPhone,所以App的风格是两者的结合又夹杂了点私货。个人认为iOS版本的确实好看点。
代码中存在的问题,请大家积极提Issue.
更新收藏动画的实现方式,之前实现的方式侵入性太强,每个页面都要先隐藏一个小❤❤。现在换了路由
![]() |
![]() |
|---|---|
以上是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的动画会漂移到最后一个,需要加状态判断。
退出登陆加入动效。
表单中,光标不会切换到下一个。待更新到1.7.8-hotfix4后的稳定版再观察修复。
webview_flutter 插件的问题还是很多,有些链接点击会没有反应,不会跳转。所以接入了两套WebView方案
webview_flutter 不能结合CustomScrollView滑动。见issue 。
两个同样颜色的widget,中间莫名其妙的会多一条背景色的线。见issue 。
TabBar的Indicator的颜色,在Dark模式切换到Light模式时,偶尔会没有跟随切换。
感谢 V2Lf 开源项目,很早就在TestFlight中下载了该App,那时还没开源。萌生了想做一个开源的App的想法。
借鉴了goweiiWanAndroid项目的UI,最美原生版WanAndroid,感谢。
在实践Provider时,发现了Tutorials,作者Youtube的教程很好。
感谢优秀的pull_to_refresh刷新库。
感谢站酷提供的开源的字体。
感谢WanAndroid提供的API。
Copyright 2019 phoenixsky
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.