Flutter蓝牙连接插件walure_ios_bluetoothconnector的使用

Flutter蓝牙连接插件walure_ios_bluetoothconnector的使用

简介

walure_ios_bluetoothconnector 是一个用于在 Flutter 应用中进行蓝牙连接的插件。通过这个插件,开发者可以轻松地扫描、连接、断开和打印图像到蓝牙设备。

安装

首先,在你的 Flutter 项目的 pubspec.yaml 文件中添加该插件:

dependencies:
  iosbluetoothconnector: ^版本号

然后运行以下命令以安装插件:

flutter pub get

使用示例

以下是一个完整的示例代码,展示了如何使用 walure_ios_bluetoothconnector 插件进行蓝牙连接。

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

import 'package:flutter/services.dart';
import 'package:iosbluetoothconnector/iosbluetoothconnector.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _iosbluetoothconnectorPlugin = Iosbluetoothconnector();
  List<dynamic> bluetoothList = [];
  List connectedBluetoothList = [];
  bool isConnected = false;

  [@override](/user/override)
  void initState() {
    WidgetsFlutterBinding.ensureInitialized();
    super.initState();
    getUpdatedList();
    Timer.periodic(const Duration(seconds: 5), (Timer t) => getUpdatedList());
    initPlatformState();
  }

  // 平台消息异步执行,因此我们在异步方法中初始化
  Future<void> initPlatformState() async {
    String platformVersion;
    // 平台消息可能失败,所以我们使用 PlatformException 进行处理。
    // 我们还处理消息可能返回空的情况。
    try {
      platformVersion =
          await _iosbluetoothconnectorPlugin.getPlatformVersion() ??
              'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // 如果小部件在异步平台消息还在飞行时从树中移除,我们希望丢弃回复而不是调用
    // setState 来更新我们的不存在的外观。
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  getUpdatedList() async {
    var res = await _iosbluetoothconnectorPlugin.getUpdatedDevices();
    setState(() {
      bluetoothList = res!;
    });
  }

  TextEditingController userInputController = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('蓝牙连接插件示例应用'),
        ),
        body: SingleChildScrollView(
          child: Column(
            children: [
              Center(
                child: Text('运行于: $_platformVersion\n'),
              ),
              InkWell(
                onTap: () async {
                  var res = await _iosbluetoothconnectorPlugin.scanBluetooth();
                  print("开始扫描蓝牙设备...   $res");

                  // 列表中包含的设备...
                },
                child: Container(
                  height: 100,
                  width: 200,
                  decoration: const BoxDecoration(color: Colors.blue),
                  child: const Text('扫描蓝牙'),
                ),
              ),
              const SizedBox(height: 20),
              
              // 列表
              Container(
                height: 150,
                child: ListView.builder(
                    itemCount: bluetoothList.length,
                    itemBuilder: (cxt, i) {
                      print(bluetoothList[i]);
                      String deviceId = bluetoothList[i][0];
                      bool isConnected = connectedBluetoothList.contains(deviceId);

                      return Column(
                        children: [
                          Container(
                              height: 40,
                              width: 300,
                              decoration: BoxDecoration(
                                color: Colors.teal,
                                borderRadius: BorderRadius.circular(12),
                              ),
                              child: Row(
                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                                children: [
                                  Text(
                                    bluetoothList[i][1].toString(),
                                    style: const TextStyle(color: Colors.white),
                                  ),
                                  InkWell(
                                    onTap: () async {
                                      var res = await _iosbluetoothconnectorPlugin.connect(bluetoothList[i][0]);
                                      print(bluetoothList[i][0]);
                                      print("尝试连接?  $res");
                                      if (res == "Connected") {
                                        setState(() {
                                          connectedBluetoothList.add(bluetoothList[i][0]);
                                        });
                                        print("$res");
                                      }
                                    },
                                    child: !isConnected
                                        ? const Text(
                                            "连接",
                                            style: TextStyle(color: Colors.white),
                                          )
                                        : InkWell(
                                            onTap: () async {
                                              var res = await _iosbluetoothconnectorPlugin.disconnect();
                                              print("我想断开蓝牙连接...");

                                              if (res == "Disconnected") {
                                                setState(() {
                                                  connectedBluetoothList.remove(bluetoothList[i][0]);
                                                });
                                                print(res);
                                              }
                                            },
                                            child: const Text(
                                              "断开连接",
                                              style: TextStyle(color: Colors.white),
                                            ),
                                          ),
                                  ),
                                ],
                              )),
                          const SizedBox(height: 10),
                        ],
                      );
                    }),
              ),

              InkWell(
                onTap: () {
                  _iosbluetoothconnectorPlugin.printImage('w.sks');
                  print("开始打印图像...");
                },
                child: Container(
                  height: 100,
                  width: 200,
                  decoration: BoxDecoration(
                      color: Colors.green,
                      borderRadius: BorderRadius.circular(12)),
                  child: const Text('打印图像'),
                ),
              ),
              Container(
                  height: 50,
                  width: 300,
                  child: TextFormField(
                    controller: userInputController,
                  )),
              InkWell(
                onTap: () {
                  _iosbluetoothconnectorPlugin.printLine(userInputController.text);
                  print("开始打印...");
                },
                child: Container(
                  height: 100,
                  width: 200,
                  decoration: BoxDecoration(
                      color: Colors.purple,
                      borderRadius: BorderRadius.circular(12)),
                  child: const Text('打印文本'),
                ),
              ),
              const SizedBox(height: 20),
              InkWell(
                onTap: () {
                  _iosbluetoothconnectorPlugin.stopScanning();
                  print("停止扫描...");
                },
                child: Container(
                  height: 100,
                  width: 200,
                  decoration: BoxDecoration(
                      color: Colors.red,
                      borderRadius: BorderRadius.circular(12)),
                  child: const Text('停止扫描'),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用Flutter蓝牙连接插件walure_ios_bluetoothconnector的示例代码。请注意,这个插件是专门为iOS设备设计的,因此代码示例也将基于iOS平台。

首先,确保你已经在pubspec.yaml文件中添加了该插件的依赖:

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

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

接下来,你可以在你的Flutter应用中这样使用walure_ios_bluetoothconnector插件:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late BluetoothConnector _bluetoothConnector;
  List<CBCentralManagerState> _states = CBCentralManagerState.values;
  List<CBPeripheral> _discoveredDevices = [];

  @override
  void initState() {
    super.initState();
    _bluetoothConnector = BluetoothConnector();
    _bluetoothConnector.centralManagerStateStream.listen((state) {
      setState(() {
        print("Central Manager State: ${describeEnum(state)}");
      });
    });

    // 开始扫描设备
    _bluetoothConnector.startScanningForDevices().then((_) {
      _bluetoothConnector.discoveredDevicesStream.listen((devices) {
        setState(() {
          _discoveredDevices = devices;
        });
      });
    });
  }

  @override
  void dispose() {
    _bluetoothConnector.stopScanningForDevices();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Bluetooth Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              Text('Central Manager State: ${_states.firstWhere((state) => state == _bluetoothConnector.state, orElse: () => CBCentralManagerState.unknown)}'),
              SizedBox(height: 20),
              Expanded(
                child: ListView.builder(
                  itemCount: _discoveredDevices.length,
                  itemBuilder: (context, index) {
                    return ListTile(
                      title: Text(_discoveredDevices[index].name ?? 'Unknown Device'),
                      subtitle: Text(_discoveredDevices[index].identifier.uuidString),
                      onTap: () {
                        // 连接设备
                        _bluetoothConnector.connectToDevice(_discoveredDevices[index]).then((connected) {
                          if (connected) {
                            print("Connected to device: ${_discoveredDevices[index].name}");
                            // 这里可以添加连接成功后的逻辑
                          } else {
                            print("Failed to connect to device: ${_discoveredDevices[index].name}");
                          }
                        });
                      },
                    );
                  },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

String describeEnum(CBCentralManagerState state) {
  switch (state) {
    case CBCentralManagerState.unknown:
      return 'Unknown';
    case CBCentralManagerState.resetting:
      return 'Resetting';
    case CBCentralManagerState.unsupported:
      return 'Unsupported';
    case CBCentralManagerState.unauthorized:
      return 'Unauthorized';
    case CBCentralManagerState.poweredOff:
      return 'Powered Off';
    case CBCentralManagerState.poweredOn:
      return 'Powered On';
  }
}

在这个示例中,我们做了以下几件事:

  1. 初始化BluetoothConnector实例。
  2. 监听centralManagerStateStream流以获取蓝牙管理器的状态。
  3. 开始扫描设备,并监听discoveredDevicesStream流以获取发现的设备列表。
  4. 在UI中显示蓝牙管理器的状态和发现的设备列表。
  5. 点击设备列表项时尝试连接到该设备。

请注意,这个示例仅展示了如何使用walure_ios_bluetoothconnector插件进行基本的蓝牙设备扫描和连接。实际应用中,你可能需要处理更多的蓝牙通信细节,如服务发现、特征值读写等。此外,由于该插件是专门为iOS设计的,因此在Android平台上运行时可能会遇到问题。如果你需要在Android平台上使用蓝牙功能,请考虑使用其他跨平台的蓝牙插件,如flutter_blue

回到顶部