epson_usb_printer 1.0.0 copy "epson_usb_printer: ^1.0.0" to clipboard
epson_usb_printer: ^1.0.0 copied to clipboard

This plugin allows to print receipts using epson dot matrix printer also provide epson utils to create print receipt more easier

example/lib/main.dart

import 'package:epson_usb_printer/epson_usb_printer.dart';
import 'package:epson_usb_printer/model/Paper.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  List<String> printerNames = [];
  String? _selectedPrinterName;

  List<Paper> papers = [];
  Paper? _selectedPaper;

  TextEditingController controller = TextEditingController(text: "80");

  @override
  void initState() {
    super.initState();
  }

  _getListPrinter(){
    printerNames = PrinterDevice.getInstalledPrinters();
    setState(() {

    });
  }

  _getListPaper(){
    if(_selectedPrinterName != null){
      papers = PrinterPaper.getAvailablePaperNames(_selectedPrinterName!);
      setState(() {

      });
    }
  }

  List<DropdownMenuItem<Paper>> _getPaperItems() {
    List<DropdownMenuItem<Paper>> items = [];
    if (papers.isEmpty) {
      items.add(const DropdownMenuItem(
        child: Text('NONE'),
      ));
    } else {
      for (var device in papers) {
        items.add(DropdownMenuItem(
          value: device,
          child: Text(device.name, overflow: TextOverflow.ellipsis),
        ));
      }
    }

    return items;
  }

  List<DropdownMenuItem<String>> _getDeviceItems() {
    List<DropdownMenuItem<String>> items = [];
    if (printerNames.isEmpty) {
      items.add(const DropdownMenuItem(
        child: Text('NONE'),
      ));
    } else {
      for (var device in printerNames) {
        items.add(DropdownMenuItem(
          value: device,
          child: Text(device, overflow: TextOverflow.ellipsis),
        ));
      }
    }

    return items;
  }

  _testPrint({bool withImage = false}){
    final generate = EpsonGenerate(_selectedPrinterName!, _selectedPaper!, maxLine: int.parse(controller.text));

    generate.feed(2);
    generate.text("Demo Shop", style: EpsonStyle(
      bold: false,
      italic: false,
      underline: false,
      align: EpsonAlign.center,
    ),);
    generate.text(
        "Komplek Permata, Jl. R. E. Martadinata No.28 Blok K, RT.11/RW.11, Ancol, Jakarta Utara, Jkt Utara, Daerah Khusus Ibukota Jakarta 14420",
        style: EpsonStyle(align: EpsonAlign.center,bold: false,
          italic: false,
          underline: false,));
    generate.text('(021) 6456633',
        style: EpsonStyle(align: EpsonAlign.center,bold: false,
          italic: false,
          underline: false,));

    generate.hr();
    generate.row([
      EpsonColumn(
          text: 'No',
          width: 1,
          styles: EpsonStyle(align: EpsonAlign.left, bold: true)
      ),
      EpsonColumn(
          text: 'Item',
          width: 5,
          styles: EpsonStyle(align: EpsonAlign.left, bold: true)
      ),
      EpsonColumn(
          text: 'Price',
          width: 2,
          styles: EpsonStyle(align: EpsonAlign.right, bold: true)
      ),
      EpsonColumn(
          text: 'Qty',
          width: 2,
          styles: EpsonStyle(align: EpsonAlign.right, bold: true)
      ),
      EpsonColumn(
          text: 'Total',
          width: 2,
          styles: EpsonStyle(align: EpsonAlign.right, bold: true)
      ),

    ]);
    generate.hr();
    generate.row([
      EpsonColumn(
          text: '1',
          width: 1,
          styles: EpsonStyle(align: EpsonAlign.left, bold: true)
      ),
      EpsonColumn(
          text: 'Teh Pucuk',
          width: 5,
          styles: EpsonStyle(align: EpsonAlign.left, bold: true)
      ),
      EpsonColumn(
          text: '5000',
          width: 2,
          styles: EpsonStyle(align: EpsonAlign.right, bold: true)
      ),
      EpsonColumn(
          text: '2',
          width: 2,
          styles: EpsonStyle(align: EpsonAlign.right, bold: true)
      ),
      EpsonColumn(
          text: '10000',
          width: 2,
          styles: EpsonStyle(align: EpsonAlign.right, bold: true)
      ),

    ]);
    generate.row([
      EpsonColumn(
          text: '2',
          width: 1,
          styles: EpsonStyle(align: EpsonAlign.left, bold: true)
      ),
      EpsonColumn(
          text: 'Ramen',
          width: 5,
          styles: EpsonStyle(align: EpsonAlign.left, bold: true)
      ),
      EpsonColumn(
          text: '80000',
          width: 2,
          styles: EpsonStyle(align: EpsonAlign.right, bold: true)
      ),
      EpsonColumn(
          text: '1',
          width: 2,
          styles: EpsonStyle(align: EpsonAlign.right, bold: true)
      ),
      EpsonColumn(
          text: '80000',
          width: 2,
          styles: EpsonStyle(align: EpsonAlign.right, bold: true)
      ),

    ]);
    generate.hr();
    generate.printText();
  }

  _calibrateMaxChars(){
    final generate = EpsonGenerate(_selectedPrinterName!, _selectedPaper!,);
    generate.calibrateActualMaxLine(step: int.parse(controller.text));
    generate.printText();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: const Text('Plugin Datecs app'),
          ),
          body: Padding(
            padding: const EdgeInsets.all(12.0),
            child: Column(
              children: [
                const SizedBox(height: 20,),
                Row(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: <Widget>[
                    const Text(
                      'Device:',
                      style: TextStyle(
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    const SizedBox(width: 30,),
                    Expanded(
                      child: DropdownButton(
                        isExpanded: true,
                        items: _getDeviceItems(),
                        onChanged: (value) async {
                          _selectedPrinterName = value;
                          _getListPaper();
                          setState(() {

                          });
                        }, //_disconnect
                        value: _selectedPrinterName,
                      ),
                    ),
                    const SizedBox(width: 10,),
                    IconButton(
                      color: Theme.of(context).primaryColor,
                      icon: const Icon(Icons.refresh),
                      onPressed: () async {
                        _getListPrinter();
                      },
                    ),

                  ],
                ),
                const SizedBox(height: 20,),
                Row(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: <Widget>[
                    const Text(
                      'Paper:',
                      style: TextStyle(
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    const SizedBox(width: 30,),
                    Expanded(
                      child: DropdownButton(
                        isExpanded: true,
                        items: _getPaperItems(),
                        onChanged: (value) async {
                          _selectedPaper = value as Paper;
                          setState(() {

                          });
                        }, //_disconnect
                        value: _selectedPaper,
                      ),
                    ),
                  ],
                ),
                const SizedBox(height: 20,),
                Row(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: <Widget>[
                    const Text(
                      'Actual Maxline Calibrate:',
                      style: TextStyle(
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    const SizedBox(width: 30,),
                    Expanded(
                      child: TextFormField(
                        controller: controller,
                      )
                    ),
                    const SizedBox(width: 10,),
                    RawMaterialButton(
                        fillColor: Colors.blue,
                        onPressed: () async{
                          _calibrateMaxChars();
                        },
                        child: const Padding(
                          padding: EdgeInsets.all(8),
                          child: Text(
                            'Calibrate Max Line ', style: TextStyle(
                              color: Colors.white
                          ),
                          ),
                        )
                    ),
                  ],
                ),
                const SizedBox(height: 20,),
                RawMaterialButton(
                    fillColor: Colors.blue,
                    onPressed: () async{
                      _testPrint();
                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8),
                      child: Text(
                        'Test Print ', style: TextStyle(
                          color: Colors.white
                      ),
                      ),
                    )
                ),

                const SizedBox(height: 20,),
                RawMaterialButton(
                    fillColor: Colors.blue,
                    onPressed: () async{

                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8),
                      child: Text(
                        'Test Print with Image', style: TextStyle(
                          color: Colors.white
                      ),
                      ),
                    )
                ),
              ],
            ),
          )
      ),
    );
  }
}
0
likes
0
points
57
downloads

Publisher

unverified uploader

Weekly Downloads

This plugin allows to print receipts using epson dot matrix printer also provide epson utils to create print receipt more easier

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

ffi, flutter, win32

More

Packages that depend on epson_usb_printer

Packages that implement epson_usb_printer