Dart 语言 flutter_blue 包使用示例

Dart阿木 发布于 2025-06-19 16 次阅读


Flutter Blue 包使用示例:Dart 语言下的蓝牙通信实践

在移动应用开发中,蓝牙通信是一个常用的功能,它允许设备之间进行短距离的数据传输。Flutter Blue 是一个开源的 Flutter 包,它提供了丰富的 API 来帮助开发者实现蓝牙设备的扫描、连接、数据传输等功能。本文将围绕 Dart 语言和 flutter_blue 包,通过一系列示例代码,详细介绍如何在 Flutter 应用中使用蓝牙通信。

环境准备

在开始之前,确保你的 Flutter 环境已经搭建好。接下来,在你的 Flutter 项目中添加 flutter_blue 包:

dart

dependencies:


flutter_blue: ^0.8.0


然后运行 `flutter pub get` 命令来安装依赖。

蓝牙设备扫描

我们需要扫描附近的蓝牙设备。以下是一个简单的示例,展示了如何使用 flutter_blue 包扫描蓝牙设备:

dart

import 'package:flutter/material.dart';


import 'package:flutter_blue/flutter_blue.dart';

class BluetoothScanPage extends StatefulWidget {


@override


_BluetoothScanPageState createState() => _BluetoothScanPageState();


}

class _BluetoothScanPageState extends State<BluetoothScanPage> {


FlutterBlue flutterBlue = FlutterBlue.instance;


List<BluetoothDevice> devices = [];

@override


void initState() {


super.initState();


startScan();


}

void startScan() {


flutterBlue.startScan(timeout: Duration(seconds: 4));

flutterBlue.scanResults.listen((results) {


setState(() {


devices = results.map((r) => r.device).toList();


});


});

flutterBlue.stopScan();


}

@override


Widget build(BuildContext context) {


return Scaffold(


appBar: AppBar(


title: Text('Bluetooth Scan'),


),


body: ListView.builder(


itemCount: devices.length,


itemBuilder: (context, index) {


return ListTile(


title: Text('${devices[index].name}'),


subtitle: Text('${devices[index].id}'),


onTap: () {


// 连接到设备


connectToDevice(devices[index]);


},


);


},


),


);


}

void connectToDevice(BluetoothDevice device) {


device.connect();


}


}


在这个示例中,我们创建了一个名为 `BluetoothScanPage` 的页面,它会在启动时开始扫描附近的蓝牙设备。扫描结果会显示在列表中,用户可以点击设备名称来连接到该设备。

蓝牙设备连接

在上面的示例中,我们展示了如何扫描蓝牙设备。接下来,我们将学习如何连接到已扫描的设备。

dart

void connectToDevice(BluetoothDevice device) {


device.connect().then((_) {


print('Connected to ${device.name}');


// 连接成功后,可以获取设备的服务和特征


getServices(device);


}).catchError((error) {


print('Failed to connect: $error');


});


}


在这个函数中,我们使用 `connect` 方法连接到设备。连接成功后,我们可以调用 `getServices` 方法来获取设备上的服务和特征。

获取设备服务

连接到设备后,我们可以获取设备上的服务。以下是如何获取设备服务的示例:

dart

void getServices(BluetoothDevice device) {


device.discoverServices().then((services) {


for (BluetoothService service in services) {


print('Service: ${service.uuid}');


// 获取特征


getCharacteristics(service);


}


}).catchError((error) {


print('Failed to get services: $error');


});


}


在这个函数中,我们使用 `discoverServices` 方法来获取设备上的所有服务。然后,我们可以遍历这些服务并获取它们对应的特征。

获取设备特征

获取到服务后,我们可以进一步获取服务中的特征。以下是如何获取特征的示例:

dart

void getCharacteristics(BluetoothService service) {


service.getCharacteristics().then((characteristics) {


for (BluetoothCharacteristic characteristic in characteristics) {


print('Characteristic: ${characteristic.uuid}');


// 获取特征值


getCharacteristicValue(characteristic);


}


}).catchError((error) {


print('Failed to get characteristics: $error');


});


}


在这个函数中,我们使用 `getCharacteristics` 方法来获取服务中的所有特征。然后,我们可以遍历这些特征并获取它们的值。

获取特征值

我们可以获取特征值。以下是如何获取特征值的示例:

dart

void getCharacteristicValue(BluetoothCharacteristic characteristic) {


characteristic.read().then((value) {


print('Characteristic value: $value');


}).catchError((error) {


print('Failed to read characteristic value: $error');


});


}


在这个函数中,我们使用 `read` 方法来读取特征值。然后,我们可以处理这些值,例如显示在界面上或发送到其他设备。

总结

本文通过一系列示例代码,展示了如何在 Dart 语言和 Flutter Blue 包的帮助下实现蓝牙通信。从扫描设备、连接设备、获取服务、获取特征到获取特征值,我们逐步构建了一个完整的蓝牙通信流程。这些示例代码可以作为开发蓝牙应用的参考,帮助你快速实现蓝牙功能。

注意事项

1. 在实际应用中,你可能需要处理权限请求,例如请求用户允许访问蓝牙设备。

2. 蓝牙通信可能会受到距离、障碍物等因素的影响,因此在设计应用时需要考虑这些因素。

3. 蓝牙通信的安全性也是一个重要的问题,确保在传输敏感数据时使用加密。

通过本文的学习,相信你已经对 Dart 语言和 flutter_blue 包有了更深入的了解。希望这些知识能够帮助你开发出更加优秀的蓝牙应用。