
正文
flutter国内案例,flutter 中国
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Archsummit 2019重磅分享|闲鱼Flutter&FaaS云端一体化架构
作者:闲鱼技术-国有
国有,闲鱼架构团队负责人。在7月13号落幕的2019年Archsummit峰会上就近一年来闲鱼在FlutterFaaS一体化项目上的 探索 和实践进行了分享。
随着无线,IoT的发展,5G的到来,移动研发越发向多端化发展。传统的基于Native+Web+服务端的开发方式,研发效率低下,显然已经无法适应发展需要。
我们希望 探索 闲鱼这样规模的独立APP的高效研发架构。主要思路是围绕Flutter解决多端问题,并使Flutter与FaaS等无服务容能力打通,形成云端一体化的研发能力,支持一云多端的发展需要。在某些场景已经取得效果,希望分享过程中的思考,与大家交流。
闲鱼选择Flutter主要是出于高性能的考虑。Flutter高性能主要来源于2个原因:
更多比较:
没有银弹的解决方案,Flutter与RN各有优点。如何选择因素很多,关键看如何取舍,举个例子:
云端技术栈的打通,是减少协同的不错的解法。以往前端+Node.js的一体化方案大家应该不会陌生,然而如果端侧使用了Flutter,那云侧Dart自然是第一选择。
FaaS的本质是运行在云端,那Dart适合用在云/Server上吗?
Dart语言早于Flutter,在最初的设计上,Dart就可以用于Web、Server。Dart具备一些服务端语言的特点:
闲鱼首先尝试将Dart作为普通的Server,替代传统的Java Server,然后再将Dart容器嵌入到FaaS容器中。建立Dart Server能力是第一步,也是主要的工作量所在。
闲鱼在Dart Server方面的建设思路:
开发期:
运行期:
上述内容实现了FlutterDart FaaS的技术栈的统一,但仅技术栈统一还远远不够,端、云的同学仍然无法真正互补和一体化打通,原因在于还有更多深入问题需要考虑:
面向这些问题,闲鱼的解法思路:
案例一,一体化在资源均衡方面的体现。在近期的一个项目中,云端一体化使原本2个月的项目时间,减少了20天。
案例二,一体化在业务闭环方面的体现。负责增长的一位开发同学,专注在增长业务上,在合适的情况下为合适的人投放合适的内容,以此带来用户的增长和活跃效果。一体化的方式下,可以统一云、端的切面,业务研发不再受云、端的限制。
一体化是建设高效研发框架的方向,并不是所有场景都需要一体化的开发,但一体化的Flutter、FaaS等技术组件,可以独立使用,也会带来效率提升,并且与原有的开发模式兼容。从一体化的思路去建设,可以使整体架构体系更加一致,也有机会做一体的架构沉淀。
未来闲鱼希望在一体化上做更多尝试和深入 探索 ,包括一体化工具、一体化业务平台、数据化智能化等方向。
相关问答
Q1: Flutter(五)手势GestureDetector
在Android中,每一个 View 都可以通过 onTouch 方法重写其触摸事件,也可以通过 setOnClickListener 方法来给 View 设置点击事件。但是Flutter中除了少部分组件,如 Button 相关的组件可以直接通过 onPressed 实现点击事件。其余组件想实现点击、长按等事件,都需要借助 GestureDetector 来实现手势监听
下面介绍比较常用的手势如 onTap (点击)、 onDoubleTap (双击)、 onLongPress (长按)
小球跟随手指移动的实现应该是属于各种移动端框架作为了解拖动手势的的典型案例,下面我们来看看用flutter如何实现小球跟随手指移动
拖动手势主要由 onPanDown (手指按下)、 onPanUpdate (手指滑动)、 onPanEnd (滑动结束)构成
缩放手势需要用到 onScaleUpdate 方法,下面是一个简单的图片缩放的实现
Q2: Flutter开发 -- [12 - 监听滚动事件]
ListView、GridView的组件控制器是ScrollController,我们可以通过它来获取视图的滚动信息,并且可以调用里面的方法来更新视图的滚动位置。
另外,通常情况下,我们会根据滚动的位置来改变一些Widget的状态信息,所以ScrollController通常会和StatefulWidget一起来使用,并且会在其中控制它的初始化、监听、销毁等事件。
我们来做一个案例,当滚动到1000位置的时候,显示一个回到顶部的按钮:
如果我们希望监听什么时候开始滚动,什么时候结束滚动,这个时候我们可以通过 NotificationListener 。
案例: 列表滚动, 并且在中间显示滚动进度
Q3: Flutter PageView使用案例
现在的小目标是要实现一个 「图片轮播」的效果,我们在 Android 中可以使用 ViewPager 结合 handler 或者 Timer 去实现。
而我们在 Flutter 中,其实也是类似的。
那么,在 Flutter 中,代替 Android 中的 ViewPager 组件是 PageView ,而且,这个 PageView 相比 ViewPager 扩展性更高。
我们来看一下
Flutter PageView 官网
根据官网的介绍, PageView 在需要展示的页面很多时,有「控件复用」功能,而且,我们还可以通过
来设置滚动的方向,也就是说,我们还可以完成「纵向滚动」,真的很棒有么有?
偷的小米官网的轮播图
看一下效果图
GestureDetector ,或者直接返回一个 button 类型的 Widget 即可
ok,了解了这个PageView,接下来,我们想法子搞一个「轮播效果」,请见下一篇文章。
Q4: Flutter初探--常用依赖包
国外地址:
国内镜像:
以 flutter_screenutil 为例
路由框架 annotation_route
状态管理 provider
UI适配 flutter_screenutil
刷新控件 flutter_easyrefresh
网络请求 dio
toast控件 fluttertoast
图表库 charts_flutter
网络监听 connectivity
事件总线 event_bus
日历组件 table_calendar
官方webview webview_flutter
第三方webview flutter_webview_plugin
该篇文章为常用依赖包总结,用来记录所需要的常用依赖包,后续会不断扩充内容~








