android - 热敏蓝牙打印机在我的颤振应用程序上不起作用
问题描述
我正在使用包esc_pos_bluetooth: ^0.4.1
。当我运行模板应用程序时,它可以正常工作,蓝牙热敏打印机可以正常工作。但是当我在我的应用程序中复制相同的代码时,无法识别打印机。
编码:
class PrinterScreen extends StatefulWidget {
final Order order;
PrinterScreen(this.order);
@override
_PrinterScreenState createState() => _PrinterScreenState();
}
class _PrinterScreenState extends State<PrinterScreen> {
PrinterBluetoothManager printerManager = PrinterBluetoothManager();
List<PrinterBluetooth> _devices = [];
@override
void initState() {
super.initState();
printerManager.scanResults.listen((devices) async {
print('UI: Devices found ${devices.length}');
setState(() {
_devices = devices;
});
});
}
void _startScanDevices() {
setState(() {
_devices = [];
});
printerManager.startScan(Duration(seconds: 4));
}
void _stopScanDevices() {
printerManager.stopScan();
}
void _testPrint(PrinterBluetooth printer) async {
printerManager.selectPrinter(printer);
const PaperSize paper = PaperSize.mm58;
final profile = await CapabilityProfile.load();
final PosPrintResult res =
await printerManager.printTicket((await demoReceipt(paper, profile)));
print(res.msg);
}
Future<List<int>> demoReceipt(
PaperSize paper, CapabilityProfile profile) async {
final Generator ticket = Generator(paper, profile);
List<int> bytes = [];
bytes += ticket.text('My name');
bytes += ticket.text('is');
bytes += ticket.text('Eric');
bytes += ticket.text(DateTime.now().toString());
bytes += ticket.text('Slide to the left');
ticket.cut();
return bytes;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Printer page'),
),
body: ListView.builder(
itemCount: _devices.length,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () => _testPrint(_devices[index]),
child: Column(
children: <Widget>[
Container(
height: 60,
padding: EdgeInsets.only(left: 10),
alignment: Alignment.centerLeft,
child: Row(
children: <Widget>[
Icon(Icons.print),
SizedBox(width: 10),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(_devices[index].name ?? ''),
Text(_devices[index].address),
Text(
'Click to print a test receipt',
style: TextStyle(color: Colors.grey[700]),
),
],
),
)
],
),
),
Divider(),
],
),
);
}),
floatingActionButton: StreamBuilder<bool>(
stream: printerManager.isScanningStream,
initialData: false,
builder: (c, snapshot) {
if (snapshot.data) {
return FloatingActionButton(
child: Icon(Icons.stop),
onPressed: _stopScanDevices,
backgroundColor: Colors.red,
);
} else {
return FloatingActionButton(
child: Icon(Icons.search),
onPressed: _startScanDevices,
);
}
},
),
);
}
}
套餐:
flutter_bluetooth_basic: ^0.1.7
esc_pos_bluetooth: ^0.4.1
esc_pos_utils: ^1.1.0
颤振版本:2.5.3
安卓清单:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
解决方案
推荐阅读
- c++ - 关于 std::hash 实现的公平假设
- javascript - 在 gupshup 中使用 context.sendResponse 时的轮询问题
- sql - 从oracle中的给定字母生成下一个字母序列
- php - 作曲家在 https: in url 之后删除第二个斜杠
- android - 通过 adb 连接与安卓应用交互
- python - 添加地图 matplotlib 的放大部分的插入
- kernel - 在内核 dts 的保留内存节点中指定 u-boot
- java - ArrayList 的 get() 中的通用性如何
- c++ - 是否有建议让 c++ 将上下文用于短枚举值?
- twilio-api - Twilio 代理会议