Flutter跟Android交互

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) {}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值