I'm using the package esc_pos_bluetooth: ^0.4.1. When I run the template app, it works normally, the buletooth thermal printer works. But when I replicate the same code in my app, the printer is not identified.
The code:
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,
);
}
},
),
);
}
}
Packages:
flutter_bluetooth_basic: ^0.1.7
esc_pos_bluetooth: ^0.4.1
esc_pos_utils: ^1.1.0
Flutter version: 2.5.3
Android Manifest:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

