Search packages, repositories and app categories

Package detailsv1.2.0

flutter_web_bluetooth

A library to use the web bluetooth api in your web project. Will play nice if used in IO projects.

Web
30-day downloads
122K
Likes
51
Pub points
160

Install package

flutter pub add flutter_web_bluetooth

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

A Flutter package that enables access to the Web Bluetooth API in web applications, allowing interaction with Bluetooth Low Energy (BLE) devices directly through the browser. It integrates seamlessly with existing Flutter projects, including those targeting the web and other platforms. Designed for developers building web-based IoT solutions or device communication apps, it supports discovery, connection, and data exchange with BLE peripherals. The package is maintained with compatibility in mind across different environments.

Use cases

  • Connecting to BLE devices from a web app
  • Building IoT dashboards with real-time sensor data
  • Enabling web-based device control interfaces
  • Integrating Bluetooth functionality in hybrid apps
  • Creating cross-platform Bluetooth experiences

Key features

  • Access to Web Bluetooth API on the web
  • Supports device discovery and pairing
  • Real-time data streaming from BLE devices
  • Cross-platform compatibility with Flutter
  • Simple integration with existing Flutter projects

Suitable for

  • Web developers working with BLE devices
  • IoT application creators
  • Hybrid app developers needing Bluetooth support
  • Prototyping Bluetooth-enabled web features
  • Projects requiring minimal native code

Considerations

  • Requires user permission for Bluetooth access
  • Limited to browsers supporting Web Bluetooth API
  • No support for non-Web platforms
  • Depends on browser-specific implementation details
  • May require additional setup for secure contexts (HTTPS)

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

pub package

Introduction

Flutter web bluetooth is a Flutter Dart plugin to add support for the web bluetooth api.

The library doesn't require Flutter at all giving you the option to use it with projects like AngularDart.

It is also written in such a way that it will play nicely with Dart native projects. So if you have a cross-platform app and want to add web support you don't have to use conditional exports to exclude the library in native releases.

For example:

export 'src/unsupported_library.dart'
    if (dart.library.js_interop) 'src/web_library.dart';

It will (of course) not work when not used in a browser, but it will compile!

The example code in this project is hosted on Github pages. Checkout jeroen1602.github.io/flutter_web_bluetooth/ for a proof of concept.

Limited support

The web bluetooth is still a draft, because of this it is not (yet) supported in every browser. Check canIUse.com for information about browser support.

Some parts of the api aren't available in every version of the browser.

Requirements

The device and browser you're testing on needs to support the web api. For Chrome on Linux this is hidden behind a flag. I've created a patch file which you can use to launch Google Chrome, from flutter run with the required flag enabled. Check the chrome-experimental-launch folder's README for more information.

You will also need a secure context or else the api will not be available. So either https, or localhost.

Usage

First check if the current browser supports the web bluetooth api.

// The bluetooth api exists in this user agent.
final supported = FlutterWebBluetooth.instance.isBluetoothApiSupported;

After this we will need to check if bluetooth is available

// A stream that says if a bluetooth adapter is available to the browser.
final available = FlutterWebBluetooth.instance.isAvailable;

Now request a device from the browser. You must beforehand specify which services you want to connect to! If you do not request access to a specific service then you won't be able to discover the service!

Some services are also part of a so called blocklist. This is different per browsers and these services are just off limit. The Web Bluetooth Community Group has a list of all block services and characteristics.

// Define the services you want to communicate with here!
final requestOptions = RequestOptionsBuilder.acceptAllDevices(optionalServices: [
  BluetoothDefaultServiceUUIDS.deviceInformation.uuid
]);

try {
  final device = await FlutterWebBluetooth.instance.requestDevice(requestOptions);
} on UserCancelledDialogError {
  // The user cancelled the dialog
} on DeviceNotFoundError {
  // There is no device in range for the options defined above
}

Now that you have a device, you can go through the services and then find the characteristics you want to read.

await device.connect();
final services = await device.discoverServices();
final service = services.firstWhere((service) => service.uuid == BluetoothDefaultServiceUUIDS.deviceInformation.uuid);
// Now get the characteristic
final characteristic = await service.getCharacteristic(BluetoothDefaultCharacteristicUUIDS.manufacturerNameString.uuid);
final value = characteristic.readValue();
// Now we have a [ByteData] object with the manufacturer name in it.
device.disconnect();

Once you have paired to a device you can communicate with it again without the user needing to pair to it again. Get a reference back to all the connected devices by listening to the devices stream.

Note: This feature will only work if the "Experimental Web Platform features" flag is enabled.

// A stream with a [Set] of all the devices that the user has paired, and given permission for.
FlutterWebBluetooth.instance.devices;

You can also overwrite the logger that his library uses. This allows you to decide where log messages go. See logging on pub.dev for more info on how to intercept these messages.

import 'package:flutter_web_bluetooth/web_bluetooth_logger.dart';

setWebBluetoothLogger(Logger("my logger"));

Categories

Dependencies

Dependency list 3 items

Source repository

Projects using this package

Rankings