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
相关产品推荐
相关产品推荐

