flutter数据交互,flutter数据共享

Flutter 之 交互

手势操作在 Flutter 中分为两类:

成都创新互联主打移动网站、成都网站建设、网站建设、网站改版、网络推广、网站维护、申请域名、等互联网信息服务,为各行业提供服务。在技术实力的保障下,我们为客户承诺稳定,放心的服务,根据网站的内容与功能再决定采用什么样的设计。最后,要实现符合网站需求的内容、功能与设计,我们还会规划稳定安全的技术方案做保障。

第一类是原始的指针事件(Pointer Event),即原生开发中常见的触摸事件,表示屏幕上触摸(或鼠标、手写笔)行为触发的位移行为;

第二类则是手势识别(Gesture Detector),表示多个原始指针事件的组合操作,如点击、双击、长按等,是指针事件的语义化封装。

指针事件表示用户交互的原始触摸数据,如手指接触屏幕 PointerDownEvent、手指在屏幕上移动 PointerMoveEvent、手指抬起 PointerUpEvent,以及触摸取消 PointerCancelEvent。在手指接触屏幕,触摸事件发起时,Flutter 会确定手指与屏幕发生接触的位置上究竟有哪些组件,并将触摸事件交给最内层的组件去响应。事件会从这个最内层的组件开始,沿着组件树向根节点向上冒泡分发。通过 hitTestBehavior 去调整组件在命中测试期内应该如何表现,比如把触摸事件交给子组件,或者交给其视图层级之下的组件去响应。关于组件层面的原始指针事件的监听,Flutter 提供了 Listener Widget,可以监听其子 Widget 的原始指针事件。

Listener(

child: Container(

color: Colors.black,

width: 300,

height: 300,

),

onPointerDown: (event) = print("down $event"),// 手势按下回调

onPointerMove:  (event) = print("move $event"),// 手势移动回调

onPointerUp:  (event) = print("up $event"),// 手势抬起回调

);

Gesture 是手势语义的抽象,而如果我们想从组件层监听手势,则需要使用 GestureDetector 。GestureDetector 是一个处理各种高级用户触摸行为的 Widget,与 Listener 一样,也是一个功能性组件。

GestureDetector(// 手势识别

    child: Container(color: Colors.red,width: 50,height: 50),// 红色子视图

    onTap: ()=print("Tap"),// 点击回调

    onDoubleTap: ()=print("Double Tap"),// 双击回调

    onLongPress: ()=print("Long Press"),// 长按回调

    onPanUpdate: (e) {// 拖动回调

      setState(() {

        // 更新位置

        _left += e.delta.dx;

        _top += e.delta.dy;

      });

    },

  ),

Flutter跨组建传递数据的三种方式

背景:flutter组件嵌套都很深,依次传递数据很麻烦,所以最好是能够跨组件传递。有三张跨组件的方式:InheritedWidget、Notification、Eventbus.

是一种自上而下的传递数据的方式。

使用步骤:

它的数据流动方式和InheritedWidget刚好相反,从子控件向上面传递。

具体使用

跟android 原生的eventbus原理和使用一样。

flutter与原生交互方法和底层原理分析

1.环境准备, 参考链接

2.添加国内环境配置: 参考链接

3.新建

name: String类型,代表Channel的名字,也是其唯一标识符。

messager:BinaryMessenger类型,代表消息信使,是消息的发送与接收的工具。

codec: MessageCodec类型或MethodCodec类型,代表消息的编解码器。

fluuter中的MessageCodec用于二进制格式数据与基础数据之间的编解码。BasicMessageChannel所使用的编解码器就是MessageCodec。

iOS中,名称为FlutterMessageCodec,是一个协议,定义了两个方法:encode接收一个类型为id的消息,将其编码为NSData类型,而decode接收NSData类型消息,将其解码为id类型数据。

MessageCodec有多种不同的实现:

与MessageCodec不同的是,MethodCodec用于MethodCall对象的编解码,一个MethodCall对象代表一次从Flutter端发起的方法调用。MethodCall有2个成员变量:String类型的method代表需要调用的方法名称,通用类型(Android中为Object,iOS中为id)的arguments代表需要调用的方法入参

由于处理的是方法调用,故相比于MessageCodec,MethodCodec多了对调用结果的处理。当方法调用成功时,使用encodeSuccessEnvelope将result编码为二进制数据,而当方法调用失败时,则使用encodeErrorEnvelope将error的code、message、detail编码为二进制数据

MethodCodec有两种实现:


分享名称:flutter数据交互,flutter数据共享
本文地址:http://azwzsj.com/article/dsdipjc.html