Flutterflutter

2020 Flutter开源资源索引

2020-02-25  本文已影响0人  jerryhigh

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 个问题:

资源(即数据状态)如何封装?

资源放在哪儿,才都能访问得到?

具体使用时,如何取出资源?

上一篇下一篇

猜你喜欢

热点阅读