87 lines
2.6 KiB
Dart
87 lines
2.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'dart:io';
|
|
import 'package:flutter/services.dart';
|
|
|
|
/// Konfigurasi global untuk printing
|
|
class PrintConfig {
|
|
static const String PAPER_SIZE_MM58 = '58mm';
|
|
static const String PAPER_SIZE_MM80 = '80mm';
|
|
|
|
// Default settings
|
|
static const String DEFAULT_PAPER_SIZE = PAPER_SIZE_MM58;
|
|
static const int DEFAULT_LOGO_WIDTH = 300;
|
|
static const int MAX_LINE_LENGTH = 32;
|
|
static const int DEFAULT_FEED_LINES = 2;
|
|
|
|
// Shared preferences keys
|
|
static const String PREF_PAPER_SIZE = 'printer_paper_size';
|
|
static const String PREF_LOGO_WIDTH = 'printer_logo_width';
|
|
static const String PREF_MAX_LINE_LENGTH = 'printer_max_line_length';
|
|
|
|
/// Load printer configuration from shared preferences
|
|
static Future<Map<String, dynamic>> loadPrinterConfig() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
|
|
return {
|
|
'paperSize': prefs.getString(PREF_PAPER_SIZE) ?? DEFAULT_PAPER_SIZE,
|
|
'logoWidth': prefs.getInt(PREF_LOGO_WIDTH) ?? DEFAULT_LOGO_WIDTH,
|
|
'maxLineLength': prefs.getInt(PREF_MAX_LINE_LENGTH) ?? MAX_LINE_LENGTH,
|
|
};
|
|
}
|
|
|
|
/// Save printer configuration to shared preferences
|
|
static Future<void> savePrinterConfig({
|
|
String? paperSize,
|
|
int? logoWidth,
|
|
int? maxLineLength,
|
|
}) async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
|
|
if (paperSize != null) {
|
|
await prefs.setString(PREF_PAPER_SIZE, paperSize);
|
|
}
|
|
if (logoWidth != null) {
|
|
await prefs.setInt(PREF_LOGO_WIDTH, logoWidth);
|
|
}
|
|
if (maxLineLength != null) {
|
|
await prefs.setInt(PREF_MAX_LINE_LENGTH, maxLineLength);
|
|
}
|
|
}
|
|
|
|
/// Get paper size enum based on configuration
|
|
static String getPaperSizeEnum(String paperSize) {
|
|
switch (paperSize) {
|
|
case PAPER_SIZE_MM58:
|
|
return 'mm58';
|
|
case PAPER_SIZE_MM80:
|
|
return 'mm80';
|
|
default:
|
|
return 'mm58';
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Error handling utilities for printing
|
|
class PrintErrorHandler {
|
|
/// Handle common printing errors
|
|
static String getErrorMessage(Exception e) {
|
|
if (e is SocketException) {
|
|
return 'Koneksi ke printer terputus: ${e.message}';
|
|
} else if (e is PlatformException) {
|
|
return 'Error printer: ${(e).message}';
|
|
} else {
|
|
return 'Gagal mencetak struk: $e';
|
|
}
|
|
}
|
|
|
|
/// Log error with context
|
|
static void logPrintError(String context, Exception e,
|
|
[StackTrace? stackTrace]) {
|
|
debugPrint('[$context] Error: $e');
|
|
if (stackTrace != null) {
|
|
debugPrint('[$context] Stack trace: $stackTrace');
|
|
}
|
|
}
|
|
}
|