赞
踩
主要逻辑:
-
- import 'dart:async';
-
- import 'package:flutter/services.dart';
-
- class FlutterJlBluetoothPlugin {
-
- // 工厂模式
- factory FlutterJlBluetoothPlugin() =>_getInstance();
- static FlutterJlBluetoothPlugin get instance => _getInstance();
- static FlutterJlBluetoothPlugin? _instance;
- MethodChannel _methodChannel;
- EventChannel _eventChannel;
- FlutterJlBluetoothPlugin._internal(this._methodChannel, this._eventChannel) {
- _eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError);
- }
-
- static FlutterJlBluetoothPlugin _getInstance() {
- if (_instance == null) {
- MethodChannel methodChannel = MethodChannel('flutter_jl_bluetooth_plugin');
- EventChannel eventChannel = EventChannel('flutter_jl_bluetooth_plugin_event');
- _instance = new FlutterJlBluetoothPlugin._internal(methodChannel, eventChannel);
- }
- return _instance!;
- }
-
- /// 获取版本方法
- Future<String> get platformVersion async {
- final String version =
- await _methodChannel.invokeMethod('getPlatformVersion');
- return version;
- }
-
- /// 数据接收
- static void _onEvent(dynamic value) {
- print("flutter_jl_bluetooth_plugin_event _onEvent: $value");
- }
- /// 数据接收: 错误处理
- static void _onError(dynamic value) {
- print("flutter_jl_bluetooth_plugin_event _onError: $value");
- }
-
- }
说明:对于receiveBroadcastStream建议添加名称作为native中传递数据的参数使用
FlutterStreamHandler的代理方法
- #import "FlutterJlBluetoothPlugin.h"
- #import "MJExtension.h"
-
- @interface FlutterJlBluetoothPlugin() <FlutterStreamHandler>
-
- @property (nonatomic, strong) FlutterEventSink eventSink;
-
- @end
-
- @implementation FlutterJlBluetoothPlugin
-
- + (instancetype)sharedInstance {
- static FlutterJlBluetoothPlugin *instance = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- instance = [[self alloc] init];
- });
- return instance;
- }
-
- + (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
- FlutterMethodChannel *channel = [FlutterMethodChannel methodChannelWithName:@"flutter_jl_bluetooth_plugin" binaryMessenger:[registrar messenger]];
- FlutterJlBluetoothPlugin *instance = [FlutterJlBluetoothPlugin sharedInstance];
- [registrar addMethodCallDelegate:instance channel:channel];
-
- FlutterEventChannel *eventChannel = [FlutterEventChannel eventChannelWithName:@"flutter_jl_bluetooth_plugin_event" binaryMessenger:[registrar messenger]];
- [eventChannel setStreamHandler:instance];
- }
-
- - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
- if ([@"getPlatformVersion" isEqualToString:call.method]) {
- result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);
- } else {
- result(FlutterMethodNotImplemented);
- }
- }
-
- #pragma mark - FlutterStreamHandler
-
- - (FlutterError* _Nullable)onListenWithArguments:(id _Nullable)arguments eventSink:(FlutterEventSink)eventSink {
- self.eventSink = eventSink;
- return nil;
- }
-
- - (FlutterError* _Nullable)onCancelWithArguments:(id _Nullable)arguments {
- self.eventSink = nil;
- return nil;
- }
-
-
- @end
-
if (self.eventSink) self.eventSink([NSDictionary new]);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。