library flutter_bluetooth; import 'dart:async'; import 'dart:ffi'; import 'dart:typed_data'; import 'package:flutter/cupertino.dart'; import 'package:flutter/services.dart'; import 'package:rxdart/rxdart.dart'; part 'bluetooth_device.dart'; part 'bluetooth_socket.dart'; class FlutterBluetooth { MethodChannel _channel = MethodChannel('flutter_bluetooth'); PublishSubject _stopScanPill = new PublishSubject(); List _scanDevices; FlutterBluetooth._(); static FlutterBluetooth _instance = new FlutterBluetooth._(); static FlutterBluetooth get instance => _instance; Future get isEnabled async { final bool version = await _channel.invokeMethod('isEnabled'); return version; } enabled() async { await _channel.invokeMethod('enabled'); } Stream> startScan({List filterClasses}) async* { bool isSuccess = await _channel.invokeMethod('startScan'); if(!isSuccess){ throw ErrorDescription('启动扫描失败'); } _scanDevices = []; yield* EventChannel('flutter_bluetooth/scanEvents') .receiveBroadcastStream() .takeUntil(_stopScanPill) .map((item) { if (item['isCompleted']) { _stopScanPill.add(null); } else { var device = BluetoothDevice.fromJson(item["data"]); if (!_scanDevices.contains(device)) { if (filterClasses == null || _filterClass(device, filterClasses)) { _scanDevices.add(device); } } } return _scanDevices; }); } stopScan() async { bool isSuccess = await _channel.invokeMethod('stopScan'); if(!isSuccess){ throw ErrorDescription('暂停扫描失败'); } _stopScanPill.add(null); } bool _filterClass(BluetoothDevice device, List filterClasses) { return filterClasses.indexOf(device.deviceClass) >= 0; } }