smart_usb 0.4.1 copy "smart_usb: ^0.4.1" to clipboard
smart_usb: ^0.4.1 copied to clipboard

A cross-platform (Android/Windows/macOS/Linux) USB plugin for Flutter

example/lib/main.dart

// ignore_for_file: non_constant_identifier_names
import 'package:esc_pos_utils/esc_pos_utils.dart';
import 'package:flutter/material.dart';
import 'package:smart_usb/smart_usb.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<UsbDeviceDescription> _deviceList = [];
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    SmartUsb.init();
    _scan();
  }

  void _scan() async {
    _deviceList.clear();
    var descriptions =
        await SmartUsb.getDevicesWithDescription(requestPermission: false);
    print(descriptions);
    _deviceList = descriptions;
    setState(() {});
  }

  Future<bool> connectDevice(UsbDeviceDescription device) async {
    var isConnect = await SmartUsb.connectDevice(device.device);
    print(isConnect);
    return isConnect;
  }

  Future _printReceiveTest(UsbDeviceDescription device) async {
    List<int> bytes = [];

    // Xprinter XP-N160I
    final profile = await CapabilityProfile.load(name: 'XP-N160I');
    // PaperSize.mm80 or PaperSize.mm58
    final generator = Generator(PaperSize.mm80, profile);
    bytes += generator.setGlobalCodeTable('CP1252');
    bytes += generator.text('Test Print',
        styles: const PosStyles(align: PosAlign.center));
    bytes += generator.cut();
    await SmartUsb.send(bytes);
  }

  Future _connectWithPrint(UsbDeviceDescription device) async {
    List<int> bytes = [];

    // Xprinter XP-N160I
    final profile = await CapabilityProfile.load(name: 'XP-N160I');
    // PaperSize.mm80 or PaperSize.mm58
    final generator = Generator(PaperSize.mm80, profile);
    bytes += generator.setGlobalCodeTable('CP1252');
    bytes += generator.text('Test Print',
        styles: const PosStyles(align: PosAlign.center));

    _printEscPos(device, bytes, generator);
  }

  /// print ticket
  void _printEscPos(
      UsbDeviceDescription device, List<int> bytes, Generator generator) async {
    //bytes += generator.feed(2);
    bytes += generator.cut();
    var isConnect = await SmartUsb.connectDevice(device.device);
    print(isConnect);
    if (isConnect) {
      await SmartUsb.send(bytes);
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: DefaultTabController(
            length: 2,
            child: Scaffold(
                appBar: AppBar(
                  title: const Text('Flutter Smart Usb example app'),
                  bottom: const TabBar(
                    tabs: [
                      Tab(icon: Icon(Icons.home_max)),
                      Tab(icon: Icon(Icons.connect_without_contact_rounded)),
                    ],
                  ),
                ),
                floatingActionButton: FloatingActionButton(
                  onPressed: () {
                    _scan();
                  },
                  child: const Icon(Icons.refresh),
                ),
                body: TabBarView(children: [
                  Center(
                      child: Container(
                    height: double.infinity,
                    constraints: const BoxConstraints(maxWidth: 400),
                    child: SingleChildScrollView(
                      padding: EdgeInsets.zero,
                      child: Column(
                        children: [
                          Column(
                              children: _deviceList
                                  .map(
                                    (device) => ListTile(
                                      title: Text('${device.product}'),
                                      subtitle:
                                          Text("${device.device.vendorId}"),
                                      onTap: () {
                                        // do something
                                      },
                                      trailing: OutlinedButton(
                                        onPressed: () async {
                                          _connectWithPrint(device);
                                        },
                                        child: const Padding(
                                          padding: EdgeInsets.symmetric(
                                              vertical: 2, horizontal: 20),
                                          child: Text("Print test ticket",
                                              textAlign: TextAlign.center),
                                        ),
                                      ),
                                    ),
                                  )
                                  .toList()),
                        ],
                      ),
                    ),
                  )),
                  Row(
                    mainAxisSize: MainAxisSize.min,
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Column(
                        mainAxisSize: MainAxisSize.min,
                        children: [
                          SingleChildScrollView(
                            padding: EdgeInsets.zero,
                            child: Column(
                                mainAxisSize: MainAxisSize.min,
                                children: _deviceList
                                    .map(
                                      (device) => Row(
                                        crossAxisAlignment:
                                            CrossAxisAlignment.center,
                                        children: [
                                          Column(
                                            crossAxisAlignment:
                                                CrossAxisAlignment.start,
                                            children: [
                                              Text('${device.product}'),
                                              Text("${device.device.vendorId}"),
                                            ],
                                          ),
                                          const SizedBox(
                                            width: 10,
                                          ),
                                          OutlinedButton(
                                            onPressed: () async {
                                              connectDevice(device);
                                            },
                                            child: const Padding(
                                              padding: EdgeInsets.symmetric(
                                                  vertical: 2, horizontal: 20),
                                              child: Text("Connect Printer",
                                                  textAlign: TextAlign.center),
                                            ),
                                          ),
                                          const SizedBox(
                                            width: 10,
                                          ),
                                          OutlinedButton(
                                            onPressed: () async {
                                              _printReceiveTest(device);
                                            },
                                            child: const Padding(
                                              padding: EdgeInsets.symmetric(
                                                  vertical: 2, horizontal: 20),
                                              child: Text("Print test ticket",
                                                  textAlign: TextAlign.center),
                                            ),
                                          ),
                                        ],
                                      ),
                                    )
                                    .toList()),
                          ),
                        ],
                      ),
                    ],
                  ),
                ]))));
  }

  void log(String info) {
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(info)));
  }
}
13
likes
130
points
44
downloads

Publisher

unverified uploader

Weekly Downloads

A cross-platform (Android/Windows/macOS/Linux) USB plugin for Flutter

Repository (GitHub)

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

ffi, flutter, libusb, plugin_platform_interface

More

Packages that depend on smart_usb