我正在使用Flutter
软件包esc_pos_printer 1.5.0
打印到热敏票据打印机。如果打印机在线,它可以正常工作,但是当打印机不在线时,即使我将代码嵌套在try / catch块中,我也会收到套接字超时。
通常我希望打印机通过以太网连接,但也可以是WiFi。
软件包作者建议使用andrey-ushakov/ping_discover_network
但是该软件包在README
可用于查找打印机(例如,在端口9100上)和任何 本地网络中的其他设备和服务。
设备应连接到Wi-Fi网络。 wifi套餐允许 获取本地IP地址/网络子网。
这是错误:
ERROR:flutter / lib / ui / ui_dart_state.cc(157)]未处理的异常: SocketException:操作系统错误:连接超时,errno = 110
这是我的代码:
try {
Printer.connect('192.168.1.100', port: 9100).then( (printer) {
printer.println('welcome',
styles: PosStyles(
height: PosTextSize.size2,
width: PosTextSize.size2,
));
printer.cut();
printer.disconnect();
}
);
}
catch (e) {
print(e);
// do stuff
}
}
答案 0 :(得分:1)
问题是Printer.connect
方法返回一个Future,这意味着工作是异步完成的。
由于await
未暂停代码执行,因此执行会完成方法并返回调用方方法,而无需关心.then()
中块内代码的执行。
您可以执行以下操作:
catchError
并捕获异常,而无需等待.then()
块执行: Printer.connect('192.168.1.100', port: 9100).then( (printer) {
printer.println('welcome',
styles: PosStyles(
height: PosTextSize.size2,
width: PosTextSize.size2,
));
printer.cut();
printer.disconnect();
}
).catchError((e) {
//handle the exception the way you want, like following
print('Caught error when processing: $e');
});
await
:
try{
final printer = await Printer.connect('192.168.1.100', port: 9100);
printer.println('welcome',
styles: PosStyles(
height: PosTextSize.size2,
width: PosTextSize.size2,
));
printer.cut();
printer.disconnect();
} catch (e) {
print(e);
// do stuff
}
基于未来的错误处理来源:https://dart.dev/guides/libraries/futures-error-handling
如果您有任何疑问,请告诉我。