原作者:徐爱卿
终于,终于写完了。这个项目是我从年前开始写的,然后今年过年没有回家,除了大年三十没有提交代码,有空余时间就一直在写,过完年大年初一就开始写了~~。
功夫不负有心人,终于,现在来看是一个成熟度较为满意的作品,才敢拿出来跟大家一起分享。
效果图凑合看吧 …gif 控制大小太难了 … 原文效果图更多,更真实,文末有 apk 下载。
缘起
忘记关注哪个公众号了,真正接触 flutter 是 18 年,算起来是比较晚的了。不过勤能补拙,现在也来的及,只要想学就不晚。如果学习一个知识点,就写个 demo 就以为掌握了,大错特错。我们更多的是从实际出发利用知识点,完成实际任务。将众多 Widget 灵活使用,不断的碰壁,解决 bug,最终就能够真正的理解这个 Widget 以及相关知识点。所以,我没有写个 demo 就完事了。我直接拿一个 APP,盘它就好了。
首先说一下,为啥仿豆瓣。
因为,总体来看(个人感触,勿喷),豆瓣 APP 中的 UI 涉及到的动画、排版,交互等等都是十分优秀的,最重要的是涉及到各种各样的 UI,对于学习 flutter 是一个很好的平台。(还有一点:豆瓣有一些公开的 api,这个最重要)其实对于一个 Widget 的功能点,我们都可以娓娓道来,但是将众多 Widget 糅合到一起还是有一定的挑战的。挑战意味着机会,意味着能力。
豆瓣 API 说明:
https://www.jianshu.com/p/a7e…
项目能学到什么
定了一个小目标:看到的 UI,100% 还原。我就以这个为基本线,最终达到了差不多 90% 的还原吧。
仿了豆瓣 APP 的 90% 的页面,UI 的样式、页面搭配等等,争取到了 90% 还原。
整个项目涉及到 Flutter 90% 的基础 Widget,以及各种情景的搭配组合。
某些 flutter 没有的 Widget,这就需要我自己去找了,但是网上没有合适的轮子。我就直接改源码了。例如:
魔改源码实现首页头部特效
网上没有类似的,不过 flutter 原生有类似的。所以就翻源码改。最终实现了一样的效果。这番改动,使得我对 flutter 的 AppBar 以及 flutter 的动画有了更深的认识。
打造 100% 抽屉
flutter 中是没有类似的 Widget。所以,我只能自己干。为了实现 100% 还原这个页面,耗费了我好几个晚上的时间,最终成功了。经过这个洗礼,加深了我对 Animation,ScrollNotificationListener,GestureRecognizer 等的理解。
影视详情动态背景色
在豆瓣 APP 中,最吸引我之一的就是豆瓣 APP 的影视详情的背景色是动态的。每个背景色均是不同的。当然,我这里也实现了。
详情的颜色根据海报的主题变动。
关于这些,我就是举个简单的例子。有些东西,要强迫自己一下。或许收获到更多惊喜。这两个比较难的组件,我在源码中关于思路以及方法都有注释,大家可以去看下。
目的
我写这个项目的初衷,就是跟大家分享知识的。所以,今天我会将 GitHub 上的项目设置为公开。是时候展示真正的技术了哈~
这个项目中,90% 的 flutter 基础 Widget 都有使用到,各种百搭情景都有涉及。基本上每个文件都有相关注释。部分方法也有想对应的注释。毕竟是为了分享么。目前的最新分支是 master-new,大家可以 pull 下来后直接在 master-new 上编译。
开源
最重要的是,大家可以提交代码~~,目前新建了一个 dev-open 分支。由于本豆芽 APP 还没完全写完,想锻炼自己的可以向这个分支提交代码。
大家可以向这个分支根据豆瓣 UI 做设计稿,提交代码
- 这个分支供广大 Flutter 开发者来学习 Flutter
- 此分支囊括了 Flutter 90% 的组件的基本与组合使用,是初学者真正实践的不错选择
- 在此豆芽 APP 的首页实现与影片详情的 UI 特效,基于魔改 Flutter 源码。有兴趣可以看看
- 大家想实战自己的 Flutter 能力,可以将某瓣 APP 作为设计稿,完成需求,并提交
- 每位开发者提交的代码,我都会在文档中进行备注
未来版本计划 (欢迎 Flutter 爱好者前来认领)
欢迎 Flutter 爱好者共同完成,涉及到 UI,可参考豆瓣。
萌新 TASK
- 完成任意一个未实现的按钮
- 完成任意一个未实现的页面
- 优化原有 Widget
- 爱好者想实现但是未能实现的需求
- More …
进阶 TASK
- 优化代码
- 适当缓存数据
- 解决卡顿 (可参考:https://flutter-io.cn/docs/te…)
- 优化路由(可参考咸鱼方案:https://www.yuque.com/xytech/…)
老手 TASK
- 接入 rxdart
https://github.com/ReactiveX/…
- 使用 Fish Redux 重构
https://www.yuque.com/xytech/…
时至今日,看到一个完整的 Flutter 项目在自己手中一点点打造出来,满满的成就感。当然,更多的是要分享与大家。来,大家一起学习 Flutter,共同进步,提升自己的能力。谢谢大家~
apk 体验地址(30M)
https://img.xuvip.top/douya.apk
备用地址:
https://pan.baidu.com/s/1jtWg…
提取码: iw64
源码地址
https://github.com/kaina404/F…