bixolon_printer 0.0.4
bixolon_printer: ^0.0.4 copied to clipboard
A lightweight Flutter plugin to connect, manage, and print using Bixolon Bluetooth printers with support for connection status and Base64 image printing.
example/lib/main.dart
import 'dart:async';
import 'package:bixolon_printer/bixolon_printer.dart';
import 'package:bixolon_printer/model/print_config.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_blue_classic/flutter_blue_classic.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(home: MainScreen());
}
}
class MainScreen extends StatefulWidget {
const MainScreen({super.key});
@override
State<MainScreen> createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
final _flutterBlueClassicPlugin = FlutterBlueClassic();
BluetoothAdapterState _adapterState = BluetoothAdapterState.unknown;
StreamSubscription? _adapterStateSubscription;
final Set<BluetoothDevice> _scanResults = {};
StreamSubscription? _scanSubscription;
bool _isScanning = false;
int? _connectingToIndex;
StreamSubscription? _scanningStateSubscription;
final _bixolonPrinterPlugin = BixolonPrinter();
@override
void initState() {
_bixolonPrinterPlugin.intiSDK();
super.initState();
initPlatformState();
checkPrinterConnection();
}
Future<void> initPlatformState() async {
BluetoothAdapterState adapterState = _adapterState;
try {
adapterState = await _flutterBlueClassicPlugin.adapterStateNow;
_adapterStateSubscription = _flutterBlueClassicPlugin.adapterState.listen((current) {
if (mounted) setState(() => _adapterState = current);
});
_scanSubscription = _flutterBlueClassicPlugin.scanResults.listen((device) {
if (mounted) setState(() => _scanResults.add(device));
});
_flutterBlueClassicPlugin.bondedDevices.then((value) {
value?.forEach((element) {
if (mounted) setState(() => _scanResults.add(element));
});
});
_scanningStateSubscription = _flutterBlueClassicPlugin.isScanning.listen((isScanning) {
if (mounted) setState(() => _isScanning = isScanning);
});
} catch (e) {
if (kDebugMode) print(e);
}
if (!mounted) return;
setState(() {
_adapterState = adapterState;
});
}
@override
void dispose() {
_adapterStateSubscription?.cancel();
_scanSubscription?.cancel();
_scanningStateSubscription?.cancel();
super.dispose();
}
bool isPrinterConnected = false;
Future<void> checkPrinterConnection() async {
final connected = await _bixolonPrinterPlugin.isConnected();
setState(() {
isPrinterConnected = connected ?? false;
});
}
@override
Widget build(BuildContext context) {
List<BluetoothDevice> scanResults = _scanResults.toList();
return Scaffold(
appBar: AppBar(
title: const Text('Prep Gaurdian'),
actions: [
if (isPrinterConnected)
IconButton(
icon: const Icon(Icons.close, color: Colors.red),
onPressed: () async {
await _bixolonPrinterPlugin.disconnectSDK();
checkPrinterConnection();
},
),
],
),
body: ListView(
children: [
ListTile(
title: const Text("Bluetooth Adapter state"),
subtitle: const Text("Tap to enable"),
trailing: Text(_adapterState.name),
leading: const Icon(Icons.settings_bluetooth),
onTap: () => _flutterBlueClassicPlugin.turnOn(),
),
const Divider(),
if (scanResults.isEmpty)
const Center(child: Text("No devices found yet"))
else
for (var (index, result) in scanResults.indexed)
ListTile(
title: Text("${result.name ?? "???"} (${result.address})"),
subtitle: Text(
"Bondstate: ${result.bondState.name}, Device type: ${result.type.name}",
),
trailing: index == _connectingToIndex
? const CircularProgressIndicator()
: Text("${result.rssi} dBm"),
onTap: () async {
BluetoothConnection? connection;
// setState(() => _connectingToIndex = index);
// try {
// connection = await _flutterBlueClassicPlugin.connect(
// result.address,
// );
// if (!this.context.mounted) return;
// if (connection != null && connection.isConnected) {
var address = await _bixolonPrinterPlugin.connectSDK(macAddress: result.address);
await checkPrinterConnection();
print(address);
_bixolonPrinterPlugin.printSample(
printConfig: PrintConfig(
base64Image:
"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",
dstHeight: 200,
dstWidth: 400,
verticalStartPosition: 5,
horizontalStartPosition: 15,
width: 400,
level: 50,
),
);
// }
// } catch (e) {
// if (mounted) setState(() => _connectingToIndex = null);
// if (kDebugMode) print(e);
// connection?.dispose();
// ScaffoldMessenger.maybeOf(context)?.showSnackBar(
// const SnackBar(
// content: Text("Error connecting to device"),
// ),
// );
// }
},
),
],
),
floatingActionButton: Row(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
FloatingActionButton.extended(
onPressed: () async {
await Permission.location.request();
if (_isScanning) {
_flutterBlueClassicPlugin.stopScan();
} else {
_scanResults.clear();
_flutterBlueClassicPlugin.startScan();
}
},
label: Text(_isScanning ? "Scanning..." : "Start device scan"),
icon: Icon(_isScanning ? Icons.bluetooth_searching : Icons.bluetooth),
),
],
),
);
}
}
//
// class MyApp extends StatefulWidget {
// const MyApp({super.key});
//
// @override
// State<MyApp> createState() => _MyAppState();
// }
//
// class _MyAppState extends State<MyApp> {
// String _platformVersion = 'Unknown';
// final _bixolonPrinterPlugin = BixolonPrinter();
//
// @override
// void initState() {
// super.initState();
// initPlatformState();
// }
//
// // Platform messages are asynchronous, so we initialize in an async method.
// Future<void> initPlatformState() async {
// String platformVersion;
// // Platform messages may fail, so we use a try/catch PlatformException.
// // We also handle the message potentially returning null.
// try {
// platformVersion =
// await _bixolonPrinterPlugin.getPlatformVersion() ?? 'Unknown platform version';
// } on PlatformException {
// platformVersion = 'Failed to get platform version.';
// }
//
// // If the widget was removed from the tree while the asynchronous platform
// // message was in flight, we want to discard the reply rather than calling
// // setState to update our non-existent appearance.
// if (!mounted) return;
//
// setState(() {
// _platformVersion = platformVersion;
// });
// }
//
// @override
// Widget build(BuildContext context) {
// return MaterialApp(
// home: Scaffold(
// appBar: AppBar(
// title: const Text('Plugin example app'),
// ),
// body: Column(
// children: [
// Center(
// child: Text('Running on: $_platformVersion\n'),
// ),
// MaterialButton(
// color: Colors.blue,
// onPressed: ()async {
// await Permission.bluetooth.request();
// await Permission.bluetoothAdvertise.request();
// await Permission.bluetoothConnect.request();
// await Permission.bluetoothScan.request();
// await Permission.location.request();
// final connectedDevices = FlutterBluePlus.connectedDevices;
// log(connectedDevices.length.toString());
// for (var element in connectedDevices) {
// log("Name ${element.advName} Remote Address ${element.remoteId.str}");
// }
//
// FlutterBluePlus.startScan(timeout: Duration(seconds: 50));
//
// var subscription = FlutterBluePlus.onScanResults.listen((results) {
// if (results.isNotEmpty) {
// ScanResult r = results.last; // the most recently found device
// print('${r.device.remoteId}: "${r.advertisementData.advName}" found!');
// }
// },
// onError: (e) => print(e),
// );
//
// // cleanup: cancel subscription when scanning stops
// FlutterBluePlus.cancelWhenScanComplete(subscription);
//
//
// },child: Text("Search Bluetooth devices"),)
// ],
// ),
// ),
// );
// }
// }