QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

RTC Dev Meetup:Flutter 开发实战与前景展望(三)

  • 2019-11-30
  • 本文字数:1575 字

    阅读完需:约 5 分钟

RTC Dev Meetup:Flutter 开发实战与前景展望(三)

4、手势

Flutter 在手势中引入了竞技的概念, Down 事件在 Flutter 中尤为重要。



  • PointerDownEvent 是一切的起源,在 Down 事件中一般不会决出胜利者。

  • 在 MOVE 和 UP 的时候才竞争得到响应。

  • 以点击为例子: Down 时添加进去参与竞争, UP 的时候才决定谁胜利,胜利条件是:


I、 UP 的时候如果只有一个,那么就是它了。


II、 UP 的时候如果有多个,那么强制队列里第一个直接胜利。


  • 这里包含了有趣的点就是,都在 UP 的时候才响应,那么 Down 事件怎么先传递出去了?


FLutter 在这里做了一个 didExceedDeadline 机制 ,事实上在上面的 addPointer 的时候,会启动了一个定时器,默认 100 ms,如果超过指定时间没 UP ,那就先执行这个 didExceedDeadline 响应 Down 事件。


  • 那问题又来了,如果这时候队列里两个呢?


它们的 onTapDown 都会被触发,但是 onTap 只有一个获得。


  • 如果有两个滑动 ScrollView 嵌套呢?


举个简单的例子,两个 SingleChildScrollView 的嵌套时,在布局会经历:


performLayout -> applyContentDimensions -> applyNewDimensions -> context.setCanDrag(physics.shouldAcceptUserOffset(this));


只有 shouldAcceptUserOffset 为 ture 时,才会添加 VerticalDragGestureRecognizer 去处理手势。


而判断条件主要是 returnmath.max(0.0,child.size.height-size.height); ,也就是如果 child Scroll 的 height 小于父控件 Scroll 的时候,就会出现 child 不添加 VerticalDragGestureRecognizer 的情况,这时候根本就没有竞争了。

5、动画

Flutter 中的动画是怎么执行的呢?


我们先看一段代码,然后这段代码执行的效果如下图 2 所示。


那既然 Widget 都是一帧,那么动画肯定有 setState 的地方了。


首先这里有个地方可以看下,这时候 200 这个数值执行后是会报错的,因为白框内可见 Tween 中的 T 在这时候会出现既有 int 又有 double ,无法判断的问题,所以真实应该是 200.0 。




同时你发现没有,代码中 parent 的 Container 在 只有 100 的情况下,它的 child 可以正常的画 200,这是因为我们的 paint 没有跟着 RenerObjcet 的大小走, 所以一般情况下,整个屏幕都是我们的画版,Canvas 绘制与父控件大小可以没关系。


同时动画是通过 vsync 同步信号去触发的,就是我们 mixin 的 SingleTickerProviderStateMixin,它内部的 Ticker 会通过 SchedulerBinding 的 scheduleFrameCallback 同步信号触发重绘 。


动画后的控件的点击区域,和你的动画数据改变的是 paint 还是 layout 有关 。

6、状态管理

scope_model 、 flutter_redux、 fish_redux 、甚至还有有 dva_flutter 等等,可以看出状态管理在 flutter 中和前端十分相近。


这里简单说说 scope_model ,它只有一个文件,但是很巧妙,它利用的就是 AnimationBuilder 的特性。


如下图是使用代码,在前面我们知道,状态管理使用的是 InheritedWidget 实现共享的,而当我们对 Model 进行数据改变时,通过调用 notifyListeners 通知页面更新了。



这里的原理是什么呢?


  • 其实 scope_model 内部利用了 AnimationBuilder ,而 Model 实现了 Listenable 接口。

  • 当 Model 设置给了 AnimationBuilder 时, AnimationBuilder 会执行 addListener 添加监听,而监听方法里会执行 setState。

  • 所以我们改变 set 方法时调用 notifyListeners 就触发了 setState 去更新了,这样体现出了前面说的 FLutter 常见的开发模式。


三、混合开发

以 Android 的角度来说,从方便调试和解耦集成上,我们一般会以 aar 的形式集成混合开发,这里就会涉及到 gradle 打包的一个概念。


1、如下代码所示,在项目中进行 gradle 脚本修改,组件化开发模式,用 apk 开发,用 aar 提供集成,正常修改 gradle 代码即可快速打包。



那如果 Flutter 的项目插件带有本地代码呢?


如果开发过 ReactNative 的应该知道,在原生插件安装时会需要执行 react-nativelink ,而这时候会修改项目的 gradle 和 java 代码。


2019-11-30 16:53734

评论

发布
暂无评论
发现更多内容

人工智能领域:面试常见问题超全(深度学习基础、卷积模型、对抗神经网络、预训练模型、计算机视觉、自然语言处理、推荐系统、模型压缩、强化学习、元学习)

汀丶人工智能

人工智能 自然语言处理 深度学习 计算机视觉 6 月 优质更文活动

软件测试/测试开发丨Pytest结合数据驱动-yaml

测试人

程序员 软件测试 yaml 数据驱动 pytest

模糊测试不“模糊”,高效发掘未知漏洞与 0day 攻击

极狐GitLab

DevOps 安全 DevSecOps 黑盒测试 模糊测试

Wallys/DR9574/4*4 2.4G/support for some GPIOs .

Cindy-wallys

ipq9574

人工智能飞速发展,数智人力共享技术东风

用友BIP

人力资源 数智人力

汇聚各界力量 推动智能出行领域深度发展|2023开放原子全球开源峰会CARSMOS开源智能出行生态年会圆满举行

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 CARSMOS

以指标驱动,企业数智化迈向新阶段

Kyligence

数字化转型 指标驱动

一文带你读懂稳压器(内含厂商 3PEAK 新品推荐!)

华秋电子

2023大型企业全面预算管理趋势

用友BIP

全面预算 财务共享

【有奖体验】AI 都这么厉害了,可以看图生成文字描述!

Serverless Devs

SMT和DIP生产过程中的虚焊原因

华秋电子

理论+实践:从原型链到继承模式,掌握 Object 的精髓(一)

Immerse

走难而正确的路!AI时代,传统产业数字化建设必须更高、更快、更强

爱倒腾的程序员

涛思数据 时序数据库 ​TDengine

剪辑软件的自带曲库都怎么来的?可以商用吗?

HIFIVE音加加

API 音乐后期 音乐开放平台 网易云

业务在线,从数智平台连接开始!

用友BIP

数智底座 Pass平台

DevChat 上线 VSCode 插件!国内免费用 ChatGPT(GPT-4)编程,做不被 AI 取代的新程序员!

思码逸研发效能

程序员 AI 研发效能 ChatGPT DevChat

深度学习实践篇[17]:模型压缩技术、模型蒸馏算法:Patient-KD、DistilBERT、DynaBERT、TinyBERT

汀丶人工智能

人工智能 深度学习 知识蒸馏 模型压缩 6 月 优质更文活动

河北等保测评公司有哪些?总共有几家?

行云管家

等级保护 等保测评 河北

IT自动化运维工具优势与劣势分析-行云管家

行云管家

IT运维 行云管家 自动化运维

一起薅 DevChat 公测的羊毛:国内无需注册就能用上免费的 ChatGPT(gpt-4)

胡说云原生

ChatGPT GPT-4 DevChat

中企出海要做什么?

用友BIP

中企出海

逾百位开发者到场,超 2 万人线上观看!龙蜥社区开发者服务 devFree MeetUp 精彩回顾来啦

OpenAnolis小助手

开源 Meetup 龙蜥社区 龙蜥大讲堂 开发者服务

可观测性最佳实践|怎样让运维和开发协同保障系统稳定性

观测云

可观测性 观测云 云原生可观测 可观测性用观测云

重磅活动 | 腾讯云智能推出首期《人工智能集训营》

牵着蜗牛去散步

人工智能 腾讯云 腾讯 教育 AI集训营

flutter系列之:做一个图像滤镜

程序那些事

flutter 大前端 系统架构 程序那些事

为什么连接集成在企业的数智平台里是“刚需”?

用友BIP

数智底座 Pass平台

原点安全入选“数据安全推进计划 ”成员单位

原点安全

一文读懂火山引擎A/B测试的实验类型(1)——编程实验

字节跳动数据平台

A/B 测试

RTC Dev Meetup:Flutter 开发实战与前景展望(三)_文化 & 方法_声网_InfoQ精选文章