Flutter了解之手势

Flutter了解之手势,第1张

描述了屏幕上指针(触摸、鼠标、触控笔)的位置和移动。

Flutter中可以使用Listener(功能性组件)来监听原始触摸事件

例1

例2

例3

忽略PointerEvent

手势: 描述由一个或多个指针移动组成的语义动作,如拖动、缩放、双击等。

Material大多数widget已经对tap或手势做出了响应。 例如 IconButton和 FlatButton 响应单击,ListView响应滑动事件触发滚动。

用于手势识别的功能性组件,通过它可以来识别各种手势。

例(单击)

例(添加Material触摸水波效果 InkWell组件)

例(滑动关闭 Dismissable组件)

例(单击、双击、长按)

例(滑动)

例(扫动---单一方向)

例(缩放)

GestureRecognizer是一个抽象类。

一种手势的识别器对应一个GestureRecognizer的子类。

由于手势竞争最终只有一个胜出者,所以,当有多个手势识别器时,可能会产生冲突。

在APP中经常会需要一个广播机制,用以跨页面通知。比如一个需要登录的APP中,页面会关注用户登录或注销事件,来进行一些状态更新。

这时候,一个事件总线便会非常有用,事件总线通常实现了订阅者模式,订阅者模式包含发布者和订阅者两种角色,可以通过事件总线来触发事件和监听事件。

对于一些简单的应用,事件总线是足以满足业务需求的,如果决定使用状态管理包的话,一定要想清楚APP是否真的有必要使用它,防止“化简为繁”、过度设计。

在widget树中,每一个节点都可以分发通知,通知会沿着当前节点向上传递,所有父节点都可以通过NotificationListener来监听通知。

Flutter中将这种由子向父的传递通知的机制称为通知冒泡(Notification Bubbling)。

通知冒泡和用户触摸事件冒泡是相似的,但有一点不同:通知冒泡可以中止,但用户触摸事件不行。

通知冒泡和Web开发中浏览器事件冒泡原理是相似的,都是事件从出发源逐层向上传递,可以在上层节点任意位置来监听通知/事件,也可以终止冒泡过程,终止冒泡后,通知将不会再向上传递。

Flutter的UI框架实现中,除了在可滚动组件在滚动过程中会发出ScrollNotification之外,还有一些其它的通知,如SizeChangedLayoutNotification、KeepAliveNotification 、LayoutChangedNotification等,Flutter正是通过这种通知机制来使父元素可以在一些特定时机来做一些事情。

阻止冒泡

通知冒泡原理

前端三大框架,是Angular、React、Vue,这三个框架现在是最为流行也是最多人用的框架。

React:

1声明式设计:React采用声明范式,可以轻松描述应用。

2高效:React通过对DOM的模拟,最大限度地减少与DOM的交互。

3灵活:React可以与已知的库或框架很好地配合。

优点:

1速度快:在UI渲染过程中,React通过在虚拟DOM中的微 *** 作来实现对实际DOM的局部更新。

2跨浏览器兼容:虚拟DOM帮助我们解决了跨浏览器问题,它为我们提供了标准化的API,甚至在IE8中都是没问题的。

3模块化:为你程序编写独立的模块化UI组件,这样当某个或某些组件出现问题是,可以方便地进行隔离。

4单向数据流:Flux是一个用于在JavaScript应用中创建单向数据层的架构5同构、纯粹的javascript:因为搜索引擎的爬虫程序依赖的是服务端响应而不是JavaScript的执行,预渲染你的应用有助于搜索引擎优化。6兼容性好:比如使用RequireJS来加载和打包,而Browserify和Webpack适用于构建大型应用。它们使得那些艰难的任务不再让人望而生畏。缺点:React本身只是一个V而已,并不是一个完整的框架,所以如果是大型项目想要一套完整的框架的话,基本都需要加上ReactRouter和Flux才能写大型应用。

Vue:

Vue是尤雨溪编写的一个构建数据驱动的Web界面的库,准确来说不是一个框架,它聚焦在V(view)视图层。

它有以下的特性:

1轻量级的框架

2双向数据绑定

3指令

4插件化

优点:

1简单:官方文档很清晰,比Angular简单易学。

2快速:异步批处理方式更新DOM。

3组合:用解耦的、可复用的组件组合你的应用程序。

4紧凑:~18kbmin+gzip,且无依赖。

5强大:表达式无需声明依赖的可推导属性(computedproperties)。

6对模块友好:可以通过NPM、Bower或Duo安装,不强迫你所有的代码都遵循Angular的各种规定,使用场景更加灵活。

缺点:

1新生儿:Vuejs是一个新的项目,没有angular那么成熟。

2影响度不是很大:google了一下,有关于Vuejs多样性或者说丰富性少于其他一些有名的库。

3不支持IE8。

Angular:

Angular是一款优秀的前端JS框架,已经被用于Google的多款产品当中。

它有以下的特性:

1良好的应用程序结构

2双向数据绑定

3指令

4HTML模板

5可嵌入、注入和测试

优点:

1模板功能强大丰富,自带了极其丰富的angular指令。

2是一个比较完善的前端框架,包含服务,模板,数据双向绑定,模块化,路由,过滤器,依赖注入等所有功能;3自定义指令,自定义指令后可以在项目中多次使用。

4ng模块化比较大胆的引入了Java的一些东西(依赖注入),能够很容易的写出可复用的代码,对于敏捷开发的团队来说非常有帮助。

5angularjs是互联网巨人谷歌开发,这也意味着他有一个坚实的基础和社区支持。

缺点:

1angular入门很容易但深入后概念很多,学习中较难理解。

2文档例子非常少,官方的文档基本只写了api,一个例子都没有,很多时候具体怎么用都是google来的,或直接问misko,angular的作者。

3对IE6/7兼容不算特别好,就是可以用jQuery自己手写代码解决一些。

4指令的应用的最佳实践教程少,angular其实很灵活,如果不看一些作者的使用原则,很容易写出四不像的代码,例如js中还是像jQuery的思想有很多dom *** 作。

5DI依赖注入如果代码压缩需要显示声明。

Flutter:支持多平台的轻量级UI框架

详见 Fuchsia 于2021年8月8日发布的文章: 为什么说 Flutter 充满机会:细数 Flutter 的优异特性和革命性创新之处

通过module的形式将flutter嵌入已有的ios项目中后,打包发布时可能会遇到报 Flutterframework包含了x86_64框架问题,出现这个问题基本是因为粗心。

怎么构建flutter module项目这里不提了,官方和网上博客都有。为了在已有的ios项目中嵌入flutter项目需要在ios项目中新建 Run Script Phase然后添加脚本:

"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backendsh" build

"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backendsh" embed

官方文档中明确写道 drag the new build phase to just after the Target Dependencies phase

网上其他相关博客基本也会有写这一点,意思是把新建的那个Run Script Phase拖到Target Dependencies phase下面,只有确保这个就不会有x86_64的问题。

当时遇到这个问题还研究了老半天,根据别人的博客还加了移除Flutterframework中x86_64框架的脚本,然后我加了这个脚本也是没有效果,没有效果的原因也是这个顺序的问题,同样的拖到Target Dependencies phase下面也是会生效的(顺序对的话就不需要额外添加移除x86_64的脚本)。

当时构建项目的时候看到说要拖到Target Dependencies phase下面,我理解的是新建的要在Target Dependencies phase下面而不能在它上面,然后新建一个Run Script Phase默认就是在最下面所有也就没管了,但是其实这个顺序是有讲究的,分先后执行,其他脚本都执行完了,项目都已经打包好了,你最后再去执行脚本处理Flutterframework当然是没有效果的

所以还是要有一个严谨的态度,不要太随意

一年半前玩过flutter,忘光光现在是时候重新拾取了。~

启动页一般只放或者加几行文字。

1、创建好flutter项目之后,在lib文件下面新建launchdart或xxdart

2、在根目录下新建images文件夹,如已有直接放入

3、flutter_yijiakeiml中加入注入该,并注意空格

4、在根目录下的test/widget_testdart中更改默认的启动页为当前的启动页路径

5、最后重新设置启动时的页面

6、非常简单的启动页面放logo

值得一说的是,flutter框架的UI组件需要已new 组件的形式展开。

以上就是关于Flutter了解之手势全部的内容,包括:Flutter了解之手势、前端常用的框架有哪些、Flutter 优点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9435692.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存