日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【错误记录】Flutter 混合开发报错 ( Android 端与 Flutter 端 EventChannel 初始化顺序错误导致无法通信 | EventChannel 通信流程 )

發(fā)布時間:2025/6/17 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【错误记录】Flutter 混合开发报错 ( Android 端与 Flutter 端 EventChannel 初始化顺序错误导致无法通信 | EventChannel 通信流程 ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、 報錯信息
  • 二、 Android 端與 Flutter 端 EventChannel 注冊與監(jiān)聽流程
  • 三、 解決方案





一、 報錯信息



在 Android 端初始化 EventChannel ,

// 初始化 EventChannel 實例對象 EventChannel mEventChannel = new EventChannel(mFlutterFragment.getFlutterEngine().getDartExecutor(),"EventChannel");

然后設(shè)置 EventChannel.StreamHandler ;

mEventChannel.setStreamHandler(new EventChannel.StreamHandler() {/*** 事件流建立成功會回調(diào)該方法* @param arguments* @param events*/@Overridepublic void onListen(Object arguments, EventChannel.EventSink events) {mEventSink = events;Log.i(TAG, "事件流建立成功");}@Overridepublic void onCancel(Object arguments) {mEventSink = null;} });

出現(xiàn) onListen , 死活不回調(diào) , 說明事件流 , 始終沒有創(chuàng)建成功 ;

檢查了下 Flutter 端的 代碼 , 沒有發(fā)現(xiàn)問題 ;

// 注冊 EventChannel 監(jiān)聽 _streamSubscription = _eventChannel.receiveBroadcastStream() /// StreamSubscription<T> listen(void onData(T event)?, /// {Function? onError, void onDone()?, bool? cancelOnError});.listen(/// EventChannel 接收到 Native 信息后 , 回調(diào)的方法(message) {print("Flutter _eventChannel listen 回調(diào)");setState(() {/// 接收到消息 , 顯示在界面中showMessage = message;});},onError: (error){print("Flutter _eventChannel listen 出錯");print(error);} );



二、 Android 端與 Flutter 端 EventChannel 注冊與監(jiān)聽流程



Android 端與 Flutter 端 EventChannel 注冊與監(jiān)聽流程 :

① Android 端 初始化 EventChannel ;

// 初始化 EventChannel 實例對象 mEventChannel = new EventChannel(mFlutterFragment.getFlutterEngine().getDartExecutor(),"EventChannel");

② Android 端為 EventChannel 設(shè)置 EventChannel.StreamHandler ;

mEventChannel.setStreamHandler(new EventChannel.StreamHandler() {/*** 事件流建立成功會回調(diào)該方法* @param arguments* @param events*/@Overridepublic void onListen(Object arguments, EventChannel.EventSink events) {mEventSink = events;Log.i(TAG, "事件流建立成功");}@Overridepublic void onCancel(Object arguments) {mEventSink = null;} });

③ Flutter 端注冊監(jiān)聽 ;

// 注冊 EventChannel 監(jiān)聽 _streamSubscription = _eventChannel.receiveBroadcastStream() /// StreamSubscription<T> listen(void onData(T event)?, /// {Function? onError, void onDone()?, bool? cancelOnError});.listen(/// EventChannel 接收到 Native 信息后 , 回調(diào)的方法(message) {print("Flutter _eventChannel listen 回調(diào)");setState(() {/// 接收到消息 , 顯示在界面中showMessage = message;});},onError: (error){print("Flutter _eventChannel listen 出錯");print(error);} );

④ Android 端的 EventChannel.StreamHandler 接口的 onListen 回調(diào) , 此時可以在 Android 端持有 EventChannel.EventSink events , 可以借助該對象向 Flutter 發(fā)送數(shù)據(jù) ;

/*** 事件流建立成功會回調(diào)該方法* @param arguments* @param events*/ @Override public void onListen(Object arguments, EventChannel.EventSink events) {mEventSink = events;Log.i(TAG, "事件流建立成功"); }

⑥ Android 端調(diào)用 EventChannel.EventSink 發(fā)送數(shù)據(jù) ;

// 點擊按鈕 , 向 Flutter 端發(fā)送數(shù)據(jù) if (mEventSink != null) {mEventSink.success("Native 通過 EventChannel 通道發(fā)送消息 Hello !"); }

⑦ Flutter 端接收到 Android 端發(fā)送的數(shù)據(jù) ; 回調(diào) listen 方法的如下匿名方法參數(shù) ;

(message) {print("Flutter _eventChannel listen 回調(diào)");setState(() {/// 接收到消息 , 顯示在界面中showMessage = message;});

上述流程 , 必須按照順序執(zhí)行 , 否則注冊監(jiān)聽失敗 ;





三、 解決方案



在執(zhí)行時 , 先執(zhí)行了 Flutter 的注冊監(jiān)聽操作 , 然后才執(zhí)行 Android 中的初始化 EventChannel 對象 , 并設(shè)置 EventChannel.StreamHandler() ;

Android 端與 Flutter 端 EventChannel 初始化順序錯誤 , 導致 Android 端的 EventChannel.StreamHandler 接口的 onListen 方法 , 始終無法進行回調(diào) ;

這里將 Flutter 端的初始化操作 , 延遲幾秒 , 先讓 Android 端的 EventChannel 進行初始化 , 然后在 Flutter 端注冊 EventChannel 監(jiān)聽 ;

/// 這里延遲 6 秒在注冊該事件/// 一定要先在 Android 中設(shè)置好 EventChannel/// 然后 , 才能在 Flutter 中設(shè)置監(jiān)聽/// 否則 , 無法成功Future.delayed(const Duration(milliseconds: 6000), () {// Here you can write your code// 注冊 EventChannel 監(jiān)聽_streamSubscription = _eventChannel.receiveBroadcastStream()/// StreamSubscription<T> listen(void onData(T event)?,/// {Function? onError, void onDone()?, bool? cancelOnError});.listen(/// EventChannel 接收到 Native 信息后 , 回調(diào)的方法(message) {print("Flutter _eventChannel listen 回調(diào)");setState(() {/// 接收到消息 , 顯示在界面中showMessage = message;});},onError: (error){print("Flutter _eventChannel listen 出錯");print(error);});setState(() {});});

Flutter 端成功接收到了 Android 端通過 EventChannel 向其發(fā)送的消息 ;

總結(jié)

以上是生活随笔為你收集整理的【错误记录】Flutter 混合开发报错 ( Android 端与 Flutter 端 EventChannel 初始化顺序错误导致无法通信 | EventChannel 通信流程 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。