Flutter蓝牙扫描插件flutter_scan_bluetooth的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter蓝牙扫描插件flutter_scan_bluetooth的使用

简介

flutter_scan_bluetooth 是一个用于在Flutter应用中扫描蓝牙设备的插件。它可以帮助开发者轻松地发现附近的蓝牙设备,并获取它们的名称和地址。

开始使用

要开始使用 flutter_scan_bluetooth 插件,首先需要确保你已经安装并配置好了Flutter开发环境。接下来,按照以下步骤集成该插件到你的项目中:

  1. 添加依赖:在 pubspec.yaml 文件中添加 flutter_scan_bluetooth 作为依赖项。
  2. 导入包:在 Dart 文件中导入 flutter_scan_bluetooth 包。
  3. 初始化插件:创建 FlutterScanBluetooth 实例并设置监听器来处理扫描结果。

完整示例Demo

以下是一个完整的示例代码,展示了如何使用 flutter_scan_bluetooth 插件来扫描蓝牙设备,并在界面上显示扫描结果。

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_scan_bluetooth/flutter_scan_bluetooth.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _data = ''; // 用于存储扫描到的设备信息
  bool _scanning = false; // 标记是否正在扫描
  FlutterScanBluetooth _bluetooth = FlutterScanBluetooth(); // 创建蓝牙扫描实例

  [@override](/user/override)
  void initState() {
    super.initState();

    // 监听扫描到的设备
    _bluetooth.devices.listen((device) {
      setState(() {
        _data += device.name + ' (${device.address})\n'; // 将设备名称和地址添加到数据显示区域
      });
    });

    // 监听扫描停止事件
    _bluetooth.scanStopped.listen((_) {
      setState(() {
        _scanning = false; // 更新扫描状态
        _data += 'scan stopped\n'; // 提示扫描已停止
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('蓝牙设备扫描示例'),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: <Widget>[
            Expanded(
              child: Text(_data), // 显示扫描到的设备信息
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Center(
                child: ElevatedButton(
                  child: Text(_scanning ? '停止扫描' : '开始扫描'), // 根据扫描状态切换按钮文本
                  onPressed: () async {
                    try {
                      if (_scanning) {
                        await _bluetooth.stopScan(); // 停止扫描
                        debugPrint("扫描已停止");
                        setState(() {
                          _data = ''; // 清空显示的数据
                        });
                      } else {
                        await _bluetooth.startScan(pairedDevices: false); // 开始扫描(不包括已配对设备)
                        debugPrint("扫描已开始");
                        setState(() {
                          _scanning = true; // 更新扫描状态
                        });
                      }
                    } on PlatformException catch (e) {
                      debugPrint(e.toString()); // 捕获并打印平台异常
                    }
                  },
                ),
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Center(
                child: ElevatedButton(
                  child: Text('检查权限'), // 检查并请求蓝牙权限
                  onPressed: () async {
                    try {
                      await _bluetooth.requestPermissions(); // 请求蓝牙权限
                      print('权限已授予');
                    } on PlatformException catch (e) {
                      debugPrint(e.toString()); // 捕获并打印平台异常
                    }
                  },
                ),
              ),
            )
          ],
        ),
      ),
    );
  }
}

更多关于Flutter蓝牙扫描插件flutter_scan_bluetooth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter蓝牙扫描插件flutter_scan_bluetooth的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_scan_bluetooth插件来进行蓝牙扫描的一个基本示例。这个示例假设你已经有一个Flutter项目,并且已经添加了flutter_scan_bluetooth依赖。

首先,确保在你的pubspec.yaml文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_scan_bluetooth: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,我们来看如何在Flutter应用中使用这个插件。以下是一个简单的示例代码,展示如何启动蓝牙扫描并处理扫描到的设备。

主应用代码 (main.dart)

import 'package:flutter/material.dart';
import 'package:flutter_scan_bluetooth/flutter_scan_bluetooth.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Bluetooth Scanner',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: BluetoothScannerScreen(),
    );
  }
}

class BluetoothScannerScreen extends StatefulWidget {
  @override
  _BluetoothScannerScreenState createState() => _BluetoothScannerScreenState();
}

class _BluetoothScannerScreenState extends State<BluetoothScannerScreen> {
  List<BluetoothDevice> devices = [];
  bool isScanning = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Bluetooth Scanner'),
      ),
      body: Column(
        children: <Widget>[
          Expanded(
            child: ListView.builder(
              itemCount: devices.length,
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text(devices[index].name ?? 'Unknown Device'),
                  subtitle: Text(devices[index].address),
                );
              },
            ),
          ),
          ElevatedButton(
            onPressed: () async {
              if (!isScanning) {
                setState(() {
                  isScanning = true;
                });
                await FlutterScanBluetooth.instance
                    .startScan(resultsCallback: (BluetoothDevice device) {
                  setState(() {
                    devices.add(device);
                  });
                }).then((value) {
                  setState(() {
                    isScanning = false;
                  });
                }).catchError((error) {
                  print("Error scanning: $error");
                  setState(() {
                    isScanning = false;
                  });
                });
              } else {
                FlutterScanBluetooth.instance.stopScan();
                setState(() {
                  isScanning = false;
                  devices.clear();
                });
              }
            },
            child: Text(isScanning ? 'Stop Scanning' : 'Start Scanning'),
          ),
        ],
      ),
    );
  }
}

解释

  1. 依赖管理:确保在pubspec.yaml中添加了flutter_scan_bluetooth依赖。
  2. UI设计:使用ScaffoldAppBarColumnListView.builder来构建UI,展示扫描到的蓝牙设备列表。
  3. 蓝牙扫描:使用FlutterScanBluetooth.instance.startScan方法开始扫描蓝牙设备。扫描到的设备通过resultsCallback回调添加到设备列表中。
  4. 扫描控制:使用ElevatedButton控制扫描的开始和停止。如果当前正在扫描,则显示“Stop Scanning”按钮,否则显示“Start Scanning”按钮。
  5. 状态管理:使用setState方法来更新UI状态,包括扫描状态和设备列表。

请注意,实际使用中可能需要根据flutter_scan_bluetooth插件的具体API和权限要求做一些调整。例如,在Android上,你可能需要在AndroidManifest.xml中声明蓝牙权限,并在运行时请求这些权限。同样,iOS上也可能有特定的配置要求。

此外,由于插件的API可能会随着版本更新而变化,建议查阅最新的flutter_scan_bluetooth文档以获取最准确的信息。

回到顶部