1.第一步註冊
可以在 實現FlutterPlugin接口在onAttachedToEngine 或者是 registerWith 方法內實現初始化
final EventChannel eventChannel =
new EventChannel(registrar.messenger(), "flutter_plugin_name");
eventChannel.setStreamHandler(new ImFlutterPlugin(registrar.activity()));
注意這裏的flutter_plugin_name 不要和你MethodChannel 名字一樣,否則使用時會出現交互覆蓋。
原因是會被覆蓋,具體源碼可以去看,這裏就不粘貼出來了。
new MethodChannel(registrar.messenger(), "不一樣的名字")
2. 第二步實現監聽
private static EventChannel.EventSink eventSink;
eventSink.success(object) //傳遞給flutter的數據
@Overrid
public void onListen(Object arguments, EventChannel.EventSink events) {
eventSink = events;
}
@Override
public void onCancel(Object arguments) {
eventSink = null;
}
3.flutter 中的實現
static const myEventPlugin = const EventChannel('im_flutter_plugin_event'); // 可以放在插件的dart文件中
// 在ininstate 中初始化
myEventPlugin.receiveBroadcastStream().listen(_onEvent,onError: _onError);
// 方法可自定義
void _onEvent(Object event) {
print("nEvent: $event");
}
void _onError(Object error){
print("error : $error");
}
// 上listen 簡單講解 ondata 返回的數據 onError android 或者是ios 拋出的異常
onDone 事件完成 == null 時事件正常 cancelOnerror true 事件中途被取消或者發生意外。
StreamSubscription<T> listen(void onData(T event),
{Function onError, void onDone(), bool cancelOnError});
4. android 調用發送數據 flutter 接受
發送 eventSink.success(Object object )
接受 onEvent(Object event){
}