2020 Flutter开源资源索引
一张图为开发体验Flutter需要考察到的知识点
1. 教程
(1)Flutter官方文档
(2)Flutter中文网
(3)Flutter中国
(4)《Flutter实战》推荐
(5)Dart Flutter教程(B站教程之一)
2. 开源搜集
(1)app参考实例学习flutterawesome
(2)GITHUB客户端
gitTouch (比较完整Flutter编写) https://github.com/CarGuo/gsy_github_app_flutter (Flutter的多项目,文档多) https://github.com/conghaonet/GitHao (star 139)
(3)Flutter Create 是我们发起的一次开发竞赛 https://github.com/pinkeshdarji/FlutterCreateSubmissions2019
(4)Panda看书
(5)超完整的Flutter版wanAndroid客户端
(6)使用flutter开发俄罗斯方块
(7)A multiplatform Dart movie app
(8)This is a podcast app made for strawberry
(9)使用provider完成的全面而又精美的Flutter Todo-List app(文章)
(10)yubo725/flutter-osc开源中国
(11)Flutter Launch Timeline Demo
(12)高仿知乎
(13)TodoMVC for Flutterhttp://fluttersamples.com/
(14)Flutter Architecture Samples(star 4.7k)
3. 博客资源深入文章
(1)一个很棒的Flutter学习资源列表
(2)http://gityuan.com/ Flutte深入原理分析等文章
(3)跨平台技术演进及Flutter未来
4. 学习网站链接
Flutter 官网、Flutter 中文网、Flutter 实战、闲鱼技术博文、美团
5.素材库
https://www.uplabs.com
6. 知识点
(1)Flutter | 深入浅出 Key
(2)Flutter 精美卡片 界面 UI (快速开发)
(3)PageView,Transform的使用
7. 演讲及最新进展
(1)Flutter 的最新进展和未来展望 - Google Flutter 团队董韬 GMTC 演讲
(2)GDD2019视频-Flutter1.9版本正式发布
(3)Flutter 跨平台框架应用实战-2019极光开发者大会
(4) Flutter开发实战与前景展望——大前端开发的未来
(5)基于JS的高性能Flutter动态化框架MXFlutter
(6)Flutter实时音视频技术实践
8. 研究方向脑暴
(1) 原生工程混编 Flutter方案
原生工程混编 Flutter 的方式有两种。一种是,将 Flutter 工程内嵌 Android 和 iOS 工程,由 Flutter 统一管理的集中模式;另一种是,将 Flutter 工程作为原生工程共用的子模块,由原生工程各自管理的三端工程分离模式。目前,业界采用的基本都是第二种方式。而对于三端工程分离模式最主要的则是抽离 Flutter 工程,将不同平台的构建产物依照标准组件化的形式进行管理,即:针对 Android 平台打包构建生成 aar,通过 build.gradle 进行依赖管理;针对 iOS 平台打包构建生成 framework,将其封装成独立的 pod,并通过 podfile 进行依赖管理。这样,我们就可以在 Android 工程中通过 FlutterView,iOS 工程中通过 FlutterViewController,为 Flutter 搭建应用入口,实现 Flutter 与原生的混合开发方式。
(2)如何统一管理原生页面和 Flutter 页面跳转交互的混合导航栈
对于混合开发的应用而言,通常我们只会将应用的部分模块修改成 Flutter 开发,其他模块继续保留原生开发,因此应用内除了 Flutter 的页面之外,还会有原生 Android、iOS 的页面。在这种情况下,Flutter 页面有可能会需要跳转到原生页面,而原生页面也可能会需要跳转到 Flutter 页面。这就涉及到了一个新的问题:如何统一管理原生页面和 Flutter 页面跳转交互的混合导航栈。
(3)混编过程中的多实例问题
需要注意的是,与纯 Flutter 应用不同,原生应用混编 Flutter 由于涉及到原生页面与 Flutter 页面之间切换,因此导航栈内可能会出现多个 Flutter 容器的情况,即多个 Flutter 实例。Flutter 实例的初始化成本非常高昂,每启动一个 Flutter 实例,就会创建一套新的渲染机制,即 Flutter Engine,以及底层的 Isolate。而这些实例之间的内存是不互相共享的,会带来较大的系统资源消耗。因此我们在实际业务开发中,应该尽量用 Flutter 去开发闭环的业务模块,原生只需要能够跳转到 Flutter 模块,剩下的业务都应该在 Flutter 内部完成,而尽量避免 Flutter 页面又跳回到原生页面,原生页面又启动新的 Flutter 实例的情况。
为了解决混编工程中 Flutter 多实例的问题,业界有两种解决方案:以今日头条为代表的修改 Flutter Engine 源码,使多 FlutterView 实例对应的多 Flutter Engine 能够在底层共享 Isolate;以闲鱼为代表的共享 FlutterView,即由原生层驱动 Flutter 层渲染内容的方案。
(4)数据状态管理框架
InheritedWidget、Notification 和 EventBus 这 3 种数据传递机制,通过它们可以实现组件间的单向数据传递。
随着产品需求迭代节奏加快,项目逐渐变得庞大时,我们往往就需要管理不同组件、不同页面之间共享的数据关系。当需要共享的数据关系达到几十上百个的时候,我们就很难保持清晰的数据流动方向和顺序了,导致应用内各种数据传递嵌套和回调满天飞。在这个时候,我们迫切需要一个解决方案,来帮助我们理清楚这些共享数据的关系,于是状态管理框架便应运而生。
Provider从名字就可以看出,Provider 是一个用来提供数据的框架。它是 InheritedWidget 的语法糖,提供了依赖注入的功能,允许在 Widget 树中更加灵活地处理和传递数据。那么,什么是依赖注入呢?通俗地说,依赖注入是一种可以让我们在需要时提取到所需资源的机制,即:预先将某种“资源”放到程序中某个我们都可以访问的位置,当需要使用这种“资源”时,直接去这个位置拿即可,而无需关心“资源”是谁放进去的。所以,为了使用 Provider,我们需要解决以下 3 个问题:
资源(即数据状态)如何封装?
资源放在哪儿,才都能访问得到?
具体使用时,如何取出资源