win_ble 1.1.0 win_ble: ^1.1.0 copied to clipboard
Use the WinBle plugin to enable Bluetooth Low Energy in Flutter Windows and pure Dart projects (Windows only)
WinBle #
Use the WinBle plugin to enable Bluetooth Low Energy in Flutter Windows and pure Dart projects (Windows only)
Usage #
First initialize WinBle, to initialize on Flutter Windows, get server path using await WinServer.path
, and for pure dart projects ( Windows only ) Download BleServer.exe file and place in the same folder, checkout example_dart
for more details
// To initialize on Flutter Windows
await WinBle.initialize(serverPath: await WinServer.path());
// For pure dart projects
await WinBle.initialize(serverPath: "Path of BLEServer.exe file");
Dispose WinBle after using
WinBle.dispose();
To Start Scan
WinBle.startScanning();
StreamSubscription? scanStream = WinBle.scanStream.listen((event) {
// Get Devices Here
});
To Stop Scan
WinBle.stopScanning();
scanStream?.cancel();
To Connect
// To Connect
await WinBle.connect(address);
// Get Connection Updates Here
StreamSubscription _connectionStream =
WinBle.connectionStreamOf(device.address).listen((event) {
// event will be a boolean , in which
// true => Connected
// false => Disconnected
});
To Disconnect
await WinBle.disconnect(address);
To get MaxMtuSize
await WinBle.getMaxMtuSize(address);
Handle Bluetooth radio
// To get rdaio status
WinBle.getBluetoothState();
// To get updates of radio state
WinBle.bleState.listen((BleState state) {
// Get BleState (On, Off, Unknown, Disabled, Unsupported)
});
// To turn on radio
WinBle.updateBluetoothState(true);
// To turn off radio
WinBle.updateBluetoothState(false);
Pairing Options
// To Pair
await WinBle.pair(address);
// To UnPair
await WinBle.unPair(address);
// To Check if Device can be Paired
bool canPair = await WinBle.canPair(address);
// To Check if Device is Already Paired
bool isPaired = await WinBle.isPaired(address);
Rest All Methods are
// To Get Services
var services = await WinBle.discoverServices(address);
// To Get Characteristic
List<BleCharacteristic> bleCharacteristics = await WinBle.discoverCharacteristics(address: address, serviceId: serviceID);
// To Read Characteristic
List<int> data = await WinBle.read(address: address, serviceId: serviceID, characteristicId: charID);
// To Write Characteristic
await WinBle.write( address: address, service: serviceID, characteristic: charID, data: data, writeWithResponse: writeWithResponse);
// To Start Subscription
await WinBle.subscribeToCharacteristic(address: address, serviceId: serviceID, characteristicId: charID);
// To Stop Subscription
await WinBle.unSubscribeFromCharacteristic(address: address, serviceId: serviceID, characteristicId: charID);
// Get Characteristic Value Updates Here
StreamSubscription _characteristicValueStream = WinBle.characteristicValueStream.listen((event) {
// Here We will Receive All Characteristic Events
});
Note #
Requires Windows version >= 10.0.15014
If windows release build opens cmd while running app, try this
Edit your /windows/runner/main.cpp
file, this is a known flutter issue
if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()){
CreateAndAttachConsole();
}
// Add this Code
// <------- From Here --------- >
else{
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi = {0};
WCHAR lpszCmd[MAX_PATH] = L"cmd.exe";
if (::CreateProcess(NULL, lpszCmd, NULL, NULL, FALSE, CREATE_NEW_CONSOLE | CREATE_NO_WINDOW, NULL, NULL, &si, &pi))
{
do
{
if (::AttachConsole(pi.dwProcessId))
{
::TerminateProcess(pi.hProcess, 0);
break;
}
} while (ERROR_INVALID_HANDLE == GetLastError());
::CloseHandle(pi.hProcess);
::CloseHandle(pi.hThread);
}
}
// <------- UpTo Here --------- >
Additional information #
Thanks to noble-winrt for initial BleServer Code
This is Just The Initial Version feel free to Contribute or Report any Bug!