A flutter plugin for bluebooth ble device connect and control

  Bluetooth, Plugin, plugin

flutter_blue_elves

A flutter plugin witch includes platform-specific implementation code for Android and/or iOS to connect and control bluetooth ble device.

Table of Contents

  • Install
  • Usage

Install

This project is a flutter plugin,so you use it by add dependencies in your pubspec.yaml.

dependencies:
  flutter:
    sdk: flutter
  flutter_blue_elves: ^0.1.2
$ flutter pub get

Usage

Import plugin module where you need use.

import 'package:flutter_blue_elves/flutter_blue_elves.dart';

Check bluetooth function is Ok.

///Android:
FlutterBlueElves.instance.androidCheckBlueLackWhat().then((values) {
  if(values.contains(AndroidBluetoothLack.locationPermission)){
      ///no location permission
  } 
  if(values.contains(AndroidBluetoothLack.locationFunction)){
      ///location powerOff
  } 
  if(values.contains(AndroidBluetoothLack.bluetoothFunction)){
    ///bluetooth powerOff
  } 
});

///Ios:
FlutterBlueElves.instance.iosCheckBluetoothState().then((value) {
  if(value==IosBluetoothState.unKnown){
    ///Bluetooth is not initialized
  }else if(value==IosBluetoothState.resetting){
    ///Bluetooth is resetting
  }else if(value==IosBluetoothState.unSupport){
    ///Bluetooth not support
  }else if(value==IosBluetoothState.unAuthorized){
       ///No give bluetooth permission
  }else if(value==IosBluetoothState.poweredOff){
    ///bluetooth powerOff
  }else{
    ///bluetooth is ok
  }
}

Turn on bluetooth function what bluetooth need.Just for android.

///apply location permission
FlutterBlueElves.instance.androidApplyLocationPermission((isOk) {
  print(isOk ? "User agrees to grant location permission" : "User does not agree to grant location permission");
});
///turn on location function
FlutterBlueElves.instance.androidOpenLocationService((isOk) {
  print(isOk ? "The user agrees to turn on the positioning function" : "The user does not agree to enable the positioning function");
});
///turn on bluetooth function
FlutterBlueElves.instance.androidOpenBluetoothService((isOk) {
  print(isOk ? "The user agrees to turn on the Bluetooth function" : "The user does not agrees to turn on the Bluetooth function");
});

Scan bluetooth device not connected.

///start scan,you can set scan timeout
FlutterBlueElves.instance.startScan(5000).listen((scanItem) {
  ///Use the information in the scanned object to filter the devices you want
  ///if want to connect someone,call scanItem.connect,it will return Device object
  Device device = scanItem.connect(connectTimeout: 5000);
  ///you can use this device to listen bluetooth device's state
  device.stateStream.listen((newState){
    ///newState is DeviceState type,include disconnected,disConnecting, connecting,connected, connectTimeout,initiativeDisConnected,destroyed
  }).onDone(() {
    ///if scan timeout or you stop scan,will into this
  });
});

///stop scan
FlutterBlueElves.instance.stopScan();

Discovery device’s bluetooth service.

///use this stream to listen discovery result
device.serviceDiscoveryStream.listen((serviceItem) {
  ///serviceItem type is BleService,is readonly.It include BleCharacteristic and BleDescriptor
});
///to discovery service,witch work in connected
device.discoveryService();

Communicate with the device,witch work in connected.

///use this stream to listen data result
device.deviceSignalResultStream.listen((result) {
  ///result type is DeviceSignalResult,is readonly.It have DeviceSignalType attributes,witch include characteristicsRead,characteristicsWrite,characteristicsNotify,descriptorRead,descriptorWrite,unKnown.
  ///In ios you will accept unKnown,because characteristicsRead is as same as characteristicsNotify for ios.So characteristicsRead or characteristicsNotify will return unKnown.
});

///Read data from device by Characteristic.
///to read,witch work in connected
device.readData(serviceUuid,characteristicUuid);

///Write data to device by Characteristic.
///to write,witch work in connected.After my test,i find this isNoResponse is work in ios but not in android.
///In ios if you set isNoResponse,you will not receive data after write,but android will.
device.writeData(serviceUuid,characteristicUuid,isNoResponse,data);

///Read data from device by Descriptor.
device.devicereadDescriptorData(serviceUuid,characteristicUuid);

///Write data to device by Descriptor.
device.writeDescriptorData(serviceUuid,characteristicUuid,data);

Connect&Disconnect Device

///work in disConnected
///This connection method is direct connection, because it has been connected before, so I saved the direct connection object, and I can use this object to connect again
device.connect(5000);
///work in connected
///disconnect device
device.disConnect();

Destroy Device object

///if you never use this Device Object,call destroy(),witch can save space
device.destroy();

Download soucre code on GitHub

https://github.com/pineappleoOilPrince/flutter_blue_elves