123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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<BluetoothDevice> _scanDevices;
- FlutterBluetooth._();
- static FlutterBluetooth _instance = new FlutterBluetooth._();
- static FlutterBluetooth get instance => _instance;
- Future<bool> get isEnabled async {
- final bool version = await _channel.invokeMethod('isEnabled');
- return version;
- }
- enabled() async {
- await _channel.invokeMethod('enabled');
- }
- Stream<List<BluetoothDevice>> startScan({List<int> 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<int> filterClasses) {
- return filterClasses.indexOf(device.deviceClass) >= 0;
- }
- }
|