Dart 语言 实现蓝牙设备管理案例

Dart阿木 发布于 2025-06-20 9 次阅读


Dart 语言实现蓝牙设备管理案例

随着物联网(IoT)技术的快速发展,蓝牙设备在智能家居、可穿戴设备、医疗设备等领域得到了广泛应用。Dart 语言作为一种现代化的编程语言,具有良好的跨平台性能,可以用于开发各种移动和桌面应用程序。本文将围绕Dart 语言实现蓝牙设备管理的案例,详细介绍蓝牙设备扫描、连接、数据传输等关键步骤。

环境准备

在开始编写代码之前,我们需要准备以下环境:

1. Dart SDK:从 [Dart官网](https://www.dartlang.org/) 下载并安装 Dart SDK。

2. Android Studio 或 IntelliJ IDEA:用于编写和调试 Dart 代码。

3. 蓝牙设备:用于测试蓝牙功能。

蓝牙设备管理库

在 Dart 中,我们可以使用 `flutter_blue` 库来实现蓝牙设备管理。该库提供了丰富的 API,包括扫描设备、连接设备、发送和接收数据等。

在 `pubspec.yaml` 文件中添加 `flutter_blue` 依赖:

yaml

dependencies:


flutter:


sdk: flutter


flutter_blue: ^0.8.0


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

蓝牙设备扫描

以下是一个简单的蓝牙设备扫描示例:

dart

import 'package:flutter/material.dart';


import 'package:flutter_blue/flutter_blue.dart';

void main() {


runApp(MyApp());


}

class MyApp extends StatelessWidget {


@override


Widget build(BuildContext context) {


return MaterialApp(


title: '蓝牙设备管理',


theme: ThemeData(


primarySwatch: Colors.blue,


),


home: BluetoothScanPage(),


);


}


}

class BluetoothScanPage extends StatefulWidget {


@override


_BluetoothScanPageState createState() => _BluetoothScanPageState();


}

class _BluetoothScanPageState extends State<BluetoothScanPage> {


FlutterBlue flutterBlue = FlutterBlue.instance;


List<ScanResult> scanResults = [];

@override


void initState() {


super.initState();


startScan();


}

void startScan() {


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

flutterBlue.scanResults.listen((results) {


setState(() {


scanResults = results;


});


});

flutterBlue.stopScan();


}

@override


Widget build(BuildContext context) {


return Scaffold(


appBar: AppBar(


title: Text('蓝牙设备扫描'),


),


body: ListView.builder(


itemCount: scanResults.length,


itemBuilder: (context, index) {


return ListTile(


title: Text(scanResults[index].device.name),


subtitle: Text(scanResults[index].device.id.toString()),


);


},


),


);


}


}


在上面的代码中,我们创建了一个名为 `BluetoothScanPage` 的页面,用于显示扫描到的蓝牙设备列表。

蓝牙设备连接

当用户选择一个设备后,我们可以使用以下代码连接到该设备:

dart

void connectToDevice(BluetoothDevice device) async {


await device.connect();


print('设备连接成功');


}


在 `BluetoothScanPage` 页面中,我们可以添加一个按钮,当用户点击该按钮时,连接到选中的设备:

dart

class BluetoothScanPage extends StatefulWidget {


// ... 其他代码 ...

@override


_BluetoothScanPageState createState() => _BluetoothScanPageState();


}

class _BluetoothScanPageState extends State<BluetoothScanPage> {


// ... 其他代码 ...

BluetoothDevice? selectedDevice;

void connectToDevice(BluetoothDevice device) async {


await device.connect();


setState(() {


selectedDevice = device;


});


print('设备连接成功');


}

@override


Widget build(BuildContext context) {


// ... 其他代码 ...

if (selectedDevice != null) {


return Scaffold(


appBar: AppBar(


title: Text('蓝牙设备连接'),


),


body: Center(


child: ElevatedButton(


onPressed: () => connectToDevice(selectedDevice!),


child: Text('连接设备'),


),


),


);


} else {


return Scaffold(


appBar: AppBar(


title: Text('蓝牙设备扫描'),


),


body: ListView.builder(


itemCount: scanResults.length,


itemBuilder: (context, index) {


return ListTile(


title: Text(scanResults[index].device.name),


subtitle: Text(scanResults[index].device.id.toString()),


onTap: () => connectToDevice(scanResults[index].device),


);


},


),


);


}


}


}


蓝牙数据传输

连接到设备后,我们可以发送和接收数据。以下是一个简单的数据传输示例:

dart

void sendData(BluetoothDevice device, String data) async {


final bluetoothChannel = BluetoothChannel(


id: 12345,


name: 'test',


python: false,


);

await device.createRfcommChannel(bluetoothChannel).then((channel) {


channel.write(utf8.encode(data));


});


}

void receiveData(BluetoothDevice device) async {


final bluetoothChannel = BluetoothChannel(


id: 12345,


name: 'test',


python: false,


);

await device.createRfcommChannel(bluetoothChannel).then((channel) {


channel.setNotifyValue(true);


channel.onData.listen((data) {


print(utf8.decode(data));


});


});


}


在 `BluetoothScanPage` 页面中,我们可以添加按钮来发送和接收数据:

dart

class BluetoothScanPage extends StatefulWidget {


// ... 其他代码 ...

@override


_BluetoothScanPageState createState() => _BluetoothScanPageState();


}

class _BluetoothScanPageState extends State<BluetoothScanPage> {


// ... 其他代码 ...

@override


Widget build(BuildContext context) {


// ... 其他代码 ...

if (selectedDevice != null) {


return Scaffold(


appBar: AppBar(


title: Text('蓝牙设备连接'),


),


body: Center(


child: Column(


mainAxisAlignment: MainAxisAlignment.center,


children: [


ElevatedButton(


onPressed: () => sendData(selectedDevice!, 'Hello'),


child: Text('发送数据'),


),


ElevatedButton(


onPressed: () => receiveData(selectedDevice!),


child: Text('接收数据'),


),


],


),


),


);


} else {


// ... 其他代码 ...


}


}


}


总结

本文介绍了使用 Dart 语言和 `flutter_blue` 库实现蓝牙设备管理的案例。通过蓝牙设备扫描、连接和数据传输等步骤,我们可以轻松地开发出具有蓝牙功能的 Dart 应用程序。在实际开发过程中,可以根据具体需求对代码进行扩展和优化。

注意:以上代码仅为示例,实际应用中可能需要处理异常、权限请求等问题。