import 'package:flutter/services.dart'; import 'jc_printer_platform_interface.dart'; class MethodChannelJcPrinter extends JcPrinterPlatform { final method = const MethodChannel('jc_printer'); final event = const EventChannel('printer_stream'); @override Future connect(String name) async { return method.invokeMethod('connect', name); } @override Future disconnect() async { return method.invokeMethod('disconnect'); } @override Future setTotalPrints(int page) async { return method.invokeMethod('setTotalPrints', page); } @override Future initDrawingBoard({ required double width, required double height, required String font, double horizontalShift = 0, double verticalShift = 0, int rotate = 0, }) async { final Map arguments = { 'width': width, 'height': height, 'horizontalShift': horizontalShift, 'verticalShift': verticalShift, 'rotate': rotate, 'font': font, }; await method.invokeMethod('initDrawingBoard', arguments); } @override Future drawLabelImage({ required double x, required double y, required double width, required double height, required String base64, int rotate = 0, int type = 1, double threshold = 127, }) async { final Map arguments = { 'x': x, 'y': y, 'w': width, 'h': height, 'base64': base64, 'rotate': rotate, 'type': type, 'threshold': threshold, }; final result = await method.invokeMethod( 'drawLabelImage', arguments, ); return result ?? false; } @override Future drawLabelText({ required double x, required double y, required double width, required double height, required String content, required double fontSize, int rotate = 0, int textAlignHorizontal = 0, int textAlignVertical = 0, int lineMode = 1, double letterSpacing = 0, double lineSpacing = 0, }) async { final Map arguments = { 'x': x, 'y': y, 'width': width, 'height': height, 'content': content, 'fontSize': fontSize, 'rotate': rotate, 'textAlignHorizontal': textAlignHorizontal, 'textAlignVertical': textAlignVertical, 'lineMode': lineMode, 'letterSpacing': letterSpacing, 'lineSpacing': lineSpacing, }; final result = await method.invokeMethod('drawLabelText', arguments); return result ?? false; } @override Future drawLabelBarcode({ required double x, required double y, required double width, required double height, required String text, required double textHeight, required double fontSize, int rotate = 0, int codeType = 20, int textPosition = 0, }) async { final Map arguments = { 'x': x, 'y': y, 'width': width, 'height': height, 'text': text, 'fontSize': fontSize, 'rotate': rotate, 'textHeight': textHeight, 'codeType': codeType, 'textPosition': textPosition, }; final result = await method.invokeMethod( 'drawLabelBarcode', arguments, ); return result ?? false; } @override Future getLabelData() async { final result = await method.invokeMethod('getLabelData'); return result ?? ''; } @override Future startJob({ required int blackRules, required int paperStyle, }) async { final Map arguments = { 'blackRules': blackRules, 'paperStyle': paperStyle, }; final result = await method.invokeMethod('startJob', arguments); return result ?? false; } @override Future cancelJob() async { final result = await method.invokeMethod('cancelJob'); return result ?? false; } @override Future endPrint() async { final result = await method.invokeMethod('endPrint'); return result ?? false; } @override Future commit({ required String data, int count = 1, }) async { final Map arguments = { 'data': data, 'count': count, }; final result = await method.invokeMethod( 'commit', arguments, ); return result ?? false; } @override Stream get printerStream => event.receiveBroadcastStream(); }