package flutter.fl_print_pl import android.content.Context import android.util.Log import android.widget.Toast import androidx.annotation.NonNull import com.google.gson.Gson import com.google.gson.JsonArray import com.google.gson.JsonParser import com.inuker.bluetooth.library.BluetoothClient import com.inuker.bluetooth.library.search.SearchRequest import com.inuker.bluetooth.library.search.SearchResult import com.inuker.bluetooth.library.search.response.SearchResponse import cpcl.Config import cpcl.PrinterHelper import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.plugin.common.EventChannel import io.flutter.plugin.common.EventChannel.EventSink import io.flutter.plugin.common.MethodCall import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.MethodChannel.MethodCallHandler import io.flutter.plugin.common.MethodChannel.Result import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers /** xxxxxxPlugin*每次修改代码 要点红停止,重新运行*/ public class FlPrintPlPlugin : FlutterPlugin, MethodCallHandler { private var context: Context? = null private var methodChannel: MethodChannel? = null private lateinit var eventChannel: EventChannel private var eventSink: EventSink? = null override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { //测试获取上下文 context = flutterPluginBinding.applicationContext mBluetoothClient = BluetoothClient(context) //双方通信方法注册 methodChannel = MethodChannel(flutterPluginBinding.binaryMessenger, "fl_print_pl").apply { setMethodCallHandler(this@FlPrintPlPlugin) } //flutter主动传输到原生注册 eventChannel = EventChannel(flutterPluginBinding.binaryMessenger, "android_print_event_channel").apply { setStreamHandler(object : EventChannel.StreamHandler { override fun onListen(arguments: Any?, events: EventSink?) { this@FlPrintPlPlugin.eventSink = events } override fun onCancel(arguments: Any?) { this@FlPrintPlPlugin.eventSink = null } }) } } override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { methodChannel?.setMethodCallHandler(null) methodChannel = null } override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) { if (call.method == "getPlatformVersion") { // 这里是判断原生的方法定义的标识执行你要执行的任务 } else if (call.method == "searchBlue") { // 这里是判断原生的方法定义的标识执行你要执行的任务 } else { result.notImplemented() } } /** * 暴露出去供界面传数据到Flutter 这里你可以主动执行此方法向flutter传输数据 */ private fun sendEvent(data: Any) { if (eventSink != null) { eventSink?.success(data) } else { Log.d("xg", "===== FlutterEventChannel.eventSink 为空 需要检查一下 =====") } }
flutter 下面进行接受数据并执行
class _PrintPageState extends State<PrintPage> { static const EventChannel eventChannel = EventChannel("android_print_event_channel"); @override void initState() { eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError); super.initState(); } //接收activity传递来的参数obj void _onEvent(Object obj) { setState(() { if (obj == "printSuccess") { 执行方法 } }); } void _onError(Object obj) {}