You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用blue_thermal_printer实现蓝牙自动连接断开方法问询

蓝牙设备自动连接/断开实现方案

以下是针对需求的代码修改步骤,共3处核心修改:

1. 修改下拉框选中逻辑,实现选设备自动连接

找到DropdownButton组件的onChanged回调,将原有逻辑修改为选中设备后自动触发连接:

Expanded(
  child: DropdownButton(
    items: _getDeviceItems(),
    // 修改此处回调逻辑
    onChanged: (value) {
      setState(() => _device = value);
      if (value != null) {
        _connect();
      }
    },
    value: _device,
  ),
),

2. 优化连接方法的状态同步

原有_connect方法的状态更新时机不准确,修改为连接成功后再更新连接状态,避免状态异常:

void _connect() async {
  if (_device == null) {
    show('未选择任何设备');
    return;
  }
  final isConnected = await bluetooth.isConnected;
  if (!isConnected) {
    try {
      await bluetooth.connect(_device);
      setState(() => _connected = true);
      show('已自动连接至${_device.name}');
    } catch (error) {
      setState(() => _connected = false);
      show('连接失败:$error');
    }
  }
}

3. 修改打印按钮逻辑,实现打印完成自动断开

找到PRINT TEST按钮的onPressed回调,修改为打印完成后延迟几秒再断开连接,确保打印数据完整传输:

ElevatedButton(
  style: ElevatedButton.styleFrom(primary: Colors.brown),
  // 修改此处点击逻辑
  onPressed: () async {
    if (_device == null || !_connected) {
      show('请先选择并连接蓝牙打印机');
      return;
    }
    // 若testPrint.sample为异步方法,必须加await等待打印完成
    await testPrint.sample(pathImage);
    // 延迟2秒断开,适配打印机数据传输延迟
    await Future.delayed(const Duration(seconds: 2));
    _disconnect();
    show('打印完成,已自动断开蓝牙连接');
  },
  child: Text('PRINT TEST', style: TextStyle(color: Colors.white)),
),

可选优化

如果不需要手动连接/断开按钮,可以直接将对应的ElevatedButton组件从布局中移除,不影响自动逻辑的运行。

内容的提问来源于stack exchange,提问作者Newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:45:02