import 'dart:async'; import 'package:flutter/services.dart'; import 'package:keyboard/plugins/plugin_constant.dart'; /// 默认键盘切换回调 typedef DefaultKeyboardChangeListenerCallback = void Function(bool isDefaultKeyboard); /// 默认键盘改变事件监听器 class DefaultKeyboardMonitor { DefaultKeyboardMonitor._(); /// 事件通道 static const EventChannel _eventChannel = EventChannel( PluginConstant.flutterDefaultKeyboardEventChannelName, ); /// 监听器列表 static final List _listenerList = []; /// 订阅事件流 static StreamSubscription? _streamSubscription; /// 初始化 static init() { _streamSubscription = _eventChannel.receiveBroadcastStream().listen( (dynamic event) { bool isDefaultKeyboard = event as bool; // 切换事件,true为当前键盘为默认键盘,false为不是默认键盘 for (var listener in _listenerList) { listener(isDefaultKeyboard); } }, onError: (dynamic error) {}, cancelOnError: true, ); } /// 解初始化 static unInit() { if (_streamSubscription != null) { _streamSubscription!.cancel(); _streamSubscription = null; } } /// 注册默认键盘改变事件监听器 static void registerDefaultKeyboardChangeEvent( DefaultKeyboardChangeListenerCallback callback, ) { if (!_listenerList.contains(callback)) { _listenerList.add(callback); } } /// 注销默认键盘改变事件监听器 static void unRegisterDefaultKeyboardChangeEvent( DefaultKeyboardChangeListenerCallback callback, ) { _listenerList.remove(callback); } }