IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter框架分析 --EventChannel -> 正文阅读

[移动开发]Flutter框架分析 --EventChannel

1.??前言

在文章Flutter框架分析(八)-Platform Channel中,我们分析了EventChannel的原理和结构,并详细讲解了与其相关的一些核心类,例如StreamHandlerMethodCodec等,本文主要讲解使用EventChannel的示例。

2.??使用流程

EventChannel一般用于事件流的传递,用于将Platform的点击等一系列事件等传递至Platform,仅支持nativeFlutter的单向传递,接下来将分析其使用流程。

流程如下:

1)native端创建某channel name的EventChannel

2)native端使用setStreamHandler函数,设置该EventChannelStreamHandler

3)Flutter端创建该channel name的EventChannel

4)Flutter端创建该EventChannel的广播流,通知native端channel创建完毕,并注册广播接收函数。

5)native端刚刚注册的StreamHandler收到发送的消息,在onListen中处理消息,拿到其中的EventSink接口,通过该接口给Flutter端传递广播。

6)Flutter端处理该广播。

其流程图如下:

image.jpeg

Flutter端关键代码如下:

class?_EventChannelState?extends?State<EventChannelWidget> {
??EventChannel?_eventChannelPlugin?=?EventChannel('flutter2/testeventchannel');
??StreamSubscription?_streamSubscription;

??@override
??void?initState() {
????_streamSubscription?=?_eventChannelPlugin
????????.receiveBroadcastStream(["abc",?123,?"你好"]).listen(_onToDart,
????????????onError: _onToDartError, onDone: _onDone);
????super.initState();
??}

??@override
??void?dispose() {
????if?(_streamSubscription?!=?null) {
??????_streamSubscription.cancel();
??????_streamSubscription?=?null;
????}
????super.dispose();
??}
   void?_onToDart(message) {
????print("eventchanneltest _onToDart?$message");
??}
   void?_onToDartError(error) {
????print("eventchanneltest _onToDartError?$error");
??}
   void?_onDone() {
????print("消息传递完毕");
??}

??@override
??Widget?build(BuildContext?context) {
????return?Scaffold(
??????appBar:?AppBar(
????????title:?Text("event channel test"),
??????),
????);
??}
}

native端关键代码如下:

class EventChannelActivity : FlutterActivity(), EventChannel.StreamHandler {
    private var eventSink: EventSink? = null

    private var mHandler: Handler? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mHandler = Handler()
    }

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        Log.d("FirstNativeActivity", "configureFlutterEngine")
        initChannel(flutterEngine)
    }

    private fun initChannel(flutter2Engine: FlutterEngine) {
        EventChannel(flutter2Engine.dartExecutor, STREAM).setStreamHandler(this)
    }

    override fun onListen(arguments: Any, events: EventSink) {
        eventSink = events
        Log.i(TAG, "onListen Object:$arguments")
        Toast.makeText(this, "onListen——obj:$arguments", Toast.LENGTH_SHORT).show()
        mHandler!!.postDelayed( {
      eventSink!!.success("hello")
            eventSink!!.endOfStream()
           } , 3000)
    }

    override fun onCancel(arguments: Any) {
        Log.i(TAG, "onCancel:$arguments")
        Toast.makeText(this, "onCancel——obj:$arguments", Toast.LENGTH_SHORT).show()
        eventSink = null
    }

    companion object {
        private const val TAG = "eventchanneltest"
        const val STREAM = "flutter2/testeventchannel"
        fun startActivity(activity: Activity) {
            val intent = Intent(activity, EventChannelActivity::class.java)
            activity.startActivity(intent)
        }
    }
}

3. 小结

本文主要介绍了EventChannel的使用流程,并列举了一个使用EventChannel的示例。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:42:49  更:2021-08-12 16:44:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:03:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码