windows_printer 0.1.0 copy "windows_printer: ^0.1.0" to clipboard
windows_printer: ^0.1.0 copied to clipboard

A Flutter plugin for managing and interacting with printers on Windows platforms.

example/lib/main.dart

import 'dart:convert';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:windows_printer/windows_printer.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Windows Printer Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const PrinterPage(),
    );
  }
}

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

  @override
  State<PrinterPage> createState() => _PrinterPageState();
}

class _PrinterPageState extends State<PrinterPage> {
  List<String> _printers = [];
  String? _selectedPrinter;
  Map<String, dynamic>? _printerProperties;
  Map<String, dynamic>? _paperSizeDetails;
  bool _loading = true;
  String _status = '';

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

  Future<void> _loadPrinters() async {
    setState(() {
      _loading = true;
      _status = 'Loading printers...';
    });

    try {
      final printers = await WindowsPrinter.getAvailablePrinters();
      setState(() {
        _printers = printers;
        _loading = false;
        _status = 'Found ${printers.length} printers';
      });
    } catch (e) {
      setState(() {
        _loading = false;
        _status = 'Error: $e';
      });
    }
  }

  Future<void> _selectPrinter(String? printer) async {
    if (printer == null) return;

    setState(() {
      _selectedPrinter = printer;
      _printerProperties = null;
      _paperSizeDetails = null;
      _loading = true;
      _status = 'Loading printer details...';
    });

    try {
      // Get printer properties and paper size details in parallel
      final properties = WindowsPrinter.getPrinterProperties(printer);
      final paperDetails = WindowsPrinter.getPaperSizeDetails(printer);

      // Wait for both operations to complete
      final results = await Future.wait([properties, paperDetails]);

      setState(() {
        _printerProperties = results[0];
        _paperSizeDetails = results[1];
        _loading = false;
        _status = 'Printer details loaded';
      });
    } catch (e) {
      setState(() {
        _loading = false;
        _status = 'Error: $e';
      });
    }
  }

  Future<void> _setDefaultPrinter() async {
    if (_selectedPrinter == null) return;

    setState(() {
      _loading = true;
      _status = 'Setting default printer...';
    });

    try {
      final success = await WindowsPrinter.setDefaultPrinter(_selectedPrinter!);
      
      // Reload printer list to update default status
      await _loadPrinters();
      
      setState(() {
        _loading = false;
        _status = success ? 'Default printer set successfully' : 'Failed to set default printer';
      });
    } catch (e) {
      setState(() {
        _loading = false;
        _status = 'Error: $e';
      });
    }
  }

  Future<void> _openPrinterProperties() async {
    if (_selectedPrinter == null) return;

    setState(() {
      _status = 'Opening printer properties...';
    });

    try {
      await WindowsPrinter.openPrinterProperties(_selectedPrinter!);
    } catch (e) {
      setState(() {
        _status = 'Error: $e';
      });
    }
  }

  Future<void> _printTestPage() async {
    if (_selectedPrinter == null) return;

    setState(() {
      _loading = true;
      _status = 'Printing test page...';
    });

    try {
      // Generate a simple test receipt
      final testContent = 'Test Print\n'
          'Date: ${DateTime.now()}\n'
          'Printer: $_selectedPrinter\n'
          '-------------------------\n'
          'Hello, World!\n'
          '-------------------------\n\n\n\n';
      
      final Uint8List data = Uint8List.fromList(utf8.encode(testContent));
      
      final success = await WindowsPrinter.printRawData(
        printerName: _selectedPrinter,
        data: data,
      );
      
      setState(() {
        _loading = false;
        _status = success ? 'Test page printed successfully' : 'Failed to print test page';
      });
    } catch (e) {
      setState(() {
        _loading = false;
        _status = 'Error: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Windows Printer Demo'),
        actions: [
          IconButton(
            icon: const Icon(Icons.refresh),
            onPressed: _loadPrinters,
          ),
        ],
      ),
      body: _loading
          ? const Center(child: CircularProgressIndicator())
          : Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: Text(
                    'Status: $_status',
                    style: Theme.of(context).textTheme.bodyLarge,
                  ),
                ),
                const Divider(),
                Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: Row(
                    children: [
                      Expanded(
                        child: DropdownButton<String>(
                          isExpanded: true,
                          hint: const Text('Select a printer'),
                          value: _selectedPrinter,
                          items: _printers.map((printer) {
                            return DropdownMenuItem<String>(
                              value: printer,
                              child: Text(printer),
                            );
                          }).toList(),
                          onChanged: _selectPrinter,
                        ),
                      ),
                      const SizedBox(width: 16),
                      ElevatedButton(
                        onPressed: _selectedPrinter == null ? null : _setDefaultPrinter,
                        child: const Text('Set as Default'),
                      ),
                      const SizedBox(width: 16),
                      ElevatedButton(
                        onPressed: _selectedPrinter == null ? null : _openPrinterProperties,
                        child: const Text('Properties'),
                      ),
                      const SizedBox(width: 16),
                      ElevatedButton(
                        onPressed: _selectedPrinter == null ? null : _printTestPage,
                        child: const Text('Print Test'),
                      ),
                    ],
                  ),
                ),
                if (_printerProperties != null) ...[
                  const Divider(),
                  Expanded(
                    child: Row(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        // Printer properties
                        Expanded(
                          child: Padding(
                            padding: const EdgeInsets.all(16.0),
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: [
                                Text(
                                  'Printer Properties',
                                  style: Theme.of(context).textTheme.titleLarge,
                                ),
                                const SizedBox(height: 8),
                                Expanded(
                                  child: ListView(
                                    children: _printerProperties!.entries.map((entry) {
                                      return Card(
                                        child: Padding(
                                          padding: const EdgeInsets.all(8.0),
                                          child: Column(
                                            crossAxisAlignment: CrossAxisAlignment.start,
                                            children: [
                                              Text(
                                                entry.key,
                                                style: Theme.of(context).textTheme.titleMedium,
                                              ),
                                              const SizedBox(height: 4),
                                              Text(
                                                entry.value.toString(),
                                                style: Theme.of(context).textTheme.bodyMedium,
                                              ),
                                            ],
                                          ),
                                        ),
                                      );
                                    }).toList(),
                                  ),
                                ),
                              ],
                            ),
                          ),
                        ),
                        // Paper size details
                        if (_paperSizeDetails != null)
                          Expanded(
                            child: Padding(
                              padding: const EdgeInsets.all(16.0),
                              child: Column(
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: [
                                  Text(
                                    'Paper Sizes',
                                    style: Theme.of(context).textTheme.titleLarge,
                                  ),
                                  const SizedBox(height: 8),
                                  Text(
                                    'Current: ${_paperSizeDetails!["currentPaperName"] ?? "Unknown"}',
                                    style: Theme.of(context).textTheme.titleMedium,
                                  ),
                                  const SizedBox(height: 8),
                                  Expanded(
                                    child: ListView.builder(
                                      itemCount: (_paperSizeDetails!["availablePaperSizes"] as List?)?.length ?? 0,
                                      itemBuilder: (context, index) {
                                        final paperSize = (_paperSizeDetails!["availablePaperSizes"] as List)[index] as Map<String, dynamic>;
                                        final bool isSelected = paperSize["isSelected"] == true;
                                        
                                        return Card(
                                          color: isSelected ? Colors.blue.shade100 : null,
                                          child: ListTile(
                                            title: Text(paperSize["name"] as String),
                                            subtitle: Text(
                                              'ID: ${paperSize["id"]}, '
                                              'Width: ${paperSize["width"]}, '
                                              'Height: ${paperSize["height"]}',
                                            ),
                                          ),
                                        );
                                      },
                                    ),
                                  ),
                                ],
                              ),
                            ),
                          ),
                      ],
                    ),
                  ),
                ],
              ],
            ),
    );
  }
}
12
likes
0
points
214
downloads

Publisher

verified publishermanasbasnet.com

Weekly Downloads

A Flutter plugin for managing and interacting with printers on Windows platforms.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on windows_printer

Packages that implement windows_printer