pharmago_packages 1.1.2 copy "pharmago_packages: ^1.1.2" to clipboard
pharmago_packages: ^1.1.2 copied to clipboard

Reusable Flutter components for pharmacy applications. Provides cross-platform widgets for barcode scanning (camera and external USB readers) and comprehensive PDF generation with KPIs, tables, and charts.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:get/get.dart';
import 'package:pharmago_packages/pharmago_packages.dart';

import 'pages/barcode_page.dart';
import 'pages/home_page.dart';
import 'pages/pdf_pharmago_page.dart';
import 'pages/qr_scanner_page.dart';

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

/// Supported locales for the app
class AppLocales {
  static const ptBR = Locale('pt', 'BR');
  static const enUS = Locale('en', 'US');
  static const esES = Locale('es', 'ES');

  static const List<Locale> supportedLocales = [ptBR, enUS, esES];

  /// Returns the next locale in the cycle
  static Locale getNextLocale(Locale current) {
    final currentIndex = supportedLocales.indexWhere(
      (l) => l.languageCode == current.languageCode && l.countryCode == current.countryCode,
    );
    final nextIndex = (currentIndex + 1) % supportedLocales.length;
    return supportedLocales[nextIndex];
  }

  /// Returns the flag emoji for a locale
  static String getFlag(Locale locale) {
    switch ('${locale.languageCode}_${locale.countryCode}') {
      case 'pt_BR':
        return '🇧🇷';
      case 'en_US':
        return '🇺🇸';
      case 'es_ES':
        return '🇪🇸';
      default:
        return '🌐';
    }
  }

  /// Returns the language name for a locale
  static String getLanguageName(Locale locale) {
    switch ('${locale.languageCode}_${locale.countryCode}') {
      case 'pt_BR':
        return 'Português';
      case 'en_US':
        return 'English';
      case 'es_ES':
        return 'Español';
      default:
        return 'Unknown';
    }
  }
}

/// Translations class for the example app combining all translations
class AppTranslations extends Translations {
  @override
  Map<String, Map<String, String>> get keys {
    // Merge package translations with app-specific translations
    final translations = Map<String, Map<String, String>>.from(
      PharmagoPackageTranslations.translations,
    );

    // Add app-specific translations
    translations['en_US']?.addAll(_enUS);
    translations['pt_BR']?.addAll(_ptBR);
    translations['es_ES']?.addAll(_esES);

    return translations;
  }

  static const Map<String, String> _enUS = {
    // Home Page
    'app_title': 'PharmaGO Packages',
    'package_examples': 'Package Examples',
    'select_package': 'Select a package to see its demonstration.',
    'barcode_scanner_title': 'Barcode Scanner',
    'barcode_scanner_description':
        'Camera-based barcode scanning and external reader support with keyboard listener.',
    'pdf_pharmago_title': 'PDF PharmaGO',
    'pdf_pharmago_description':
        'Custom PDF generation with headers, KPIs, tables, charts, and footers.',
    'qr_scanner_card_title': 'QR Code Tracker',
    'qr_scanner_card_description':
        'Full-screen QR Code auto-detection that follows and shows the code position in real time.',
    'toggle_theme': 'Toggle theme',
    'change_language': 'Change language',

    // QR Scanner Page
    'qr_scanner_title': 'QR Code Tracker',
    'qr_scanner_change_color': 'Change overlay color',
    'qr_scanner_toggle_label': 'Toggle custom label',
    'qr_scanner_camera_error': 'Could not start the camera.',
    'qr_scanner_point_camera': 'Point the camera at one or more QR Codes',
    'qr_scanner_no_value': '(no value)',
    'qr_scanner_detected_singular': 'detected',
    'qr_scanner_detected_plural': 'detected',

    // PDF Page
    'pdf_demo_title': 'PDF PharmaGO Demo',
    'pdf_generation': 'PDF Generation',
    'pdf_demo_description':
        'This example demonstrates the PDF PharmaGO package capabilities:',
    'pdf_feature_header': 'Custom header with title, subtitle, and app name',
    'pdf_feature_kpi': 'KPI sections with trend indicators',
    'pdf_feature_table': 'Data tables with 150 items and footer totals',
    'pdf_feature_charts': 'Charts: bar, pie, and line with PdfColumnSpan',
    'pdf_feature_footer': 'Footer with page numbers (maxPage: 500)',
    'pdf_feature_form': 'Form sections with label/value pairs and styling',
    'options': 'Options',
    'landscape_orientation': 'Landscape orientation',
    'landscape_subtitle': 'Generate PDF in landscape mode',
    'generate_pdf': 'Generate PDF',
    'generating': 'Generating...',
    'pdf_info_text':
        'Click the button to generate a sample sales report PDF and preview it.',
    'pdf_package_info':
        'Uses pdf and printing packages for cross-platform PDF generation and preview.',
  };

  static const Map<String, String> _ptBR = {
    // Home Page
    'app_title': 'PharmaGO Packages',
    'package_examples': 'Exemplos de Pacotes',
    'select_package': 'Selecione um pacote para ver sua demonstração.',
    'barcode_scanner_title': 'Scanner de Código de Barras',
    'barcode_scanner_description':
        'Leitura de código de barras por câmera e suporte a leitor externo com listener de teclado.',
    'pdf_pharmago_title': 'PDF PharmaGO',
    'pdf_pharmago_description':
        'Geração de PDF customizado com cabeçalhos, KPIs, tabelas, gráficos e rodapés.',
    'qr_scanner_card_title': 'Rastreador de QR Code',
    'qr_scanner_card_description':
        'Auto detecção de QR Code em tela cheia que segue e mostra a posição do código em tempo real.',
    'toggle_theme': 'Alternar tema',
    'change_language': 'Mudar idioma',

    // QR Scanner Page
    'qr_scanner_title': 'Rastreador de QR Code',
    'qr_scanner_change_color': 'Mudar cor do overlay',
    'qr_scanner_toggle_label': 'Alternar rótulo customizado',
    'qr_scanner_camera_error': 'Não foi possível iniciar a câmera.',
    'qr_scanner_point_camera': 'Aponte a câmera para um ou mais QR Codes',
    'qr_scanner_no_value': '(sem valor)',
    'qr_scanner_detected_singular': 'detectado',
    'qr_scanner_detected_plural': 'detectados',

    // PDF Page
    'pdf_demo_title': 'Demo do PDF PharmaGO',
    'pdf_generation': 'Geração de PDF',
    'pdf_demo_description':
        'Este exemplo demonstra as capacidades do pacote PDF PharmaGO:',
    'pdf_feature_header': 'Cabeçalho customizado com título, subtítulo e nome do app',
    'pdf_feature_kpi': 'Seções de KPI com indicadores de tendência',
    'pdf_feature_table': 'Tabelas de dados com 150 itens e totais no rodapé',
    'pdf_feature_charts': 'Gráficos: barra, pizza e linha com PdfColumnSpan',
    'pdf_feature_footer': 'Rodapé com números de página (maxPage: 500)',
    'pdf_feature_form': 'Seções de formulário com pares label/valor e estilos',
    'options': 'Opções',
    'landscape_orientation': 'Orientação paisagem',
    'landscape_subtitle': 'Gerar PDF em modo paisagem',
    'generate_pdf': 'Gerar PDF',
    'generating': 'Gerando...',
    'pdf_info_text':
        'Clique no botão para gerar um relatório de vendas de exemplo em PDF e visualizá-lo.',
    'pdf_package_info':
        'Usa pacotes pdf e printing para geração e visualização de PDF multiplataforma.',
  };

  static const Map<String, String> _esES = {
    // Home Page
    'app_title': 'PharmaGO Packages',
    'package_examples': 'Ejemplos de Paquetes',
    'select_package': 'Seleccione un paquete para ver su demostración.',
    'barcode_scanner_title': 'Escáner de Código de Barras',
    'barcode_scanner_description':
        'Escaneo de código de barras por cámara y soporte a lector externo con listener de teclado.',
    'pdf_pharmago_title': 'PDF PharmaGO',
    'pdf_pharmago_description':
        'Generación de PDF personalizado con encabezados, KPIs, tablas, gráficos y pies de página.',
    'qr_scanner_card_title': 'Rastreador de Código QR',
    'qr_scanner_card_description':
        'Detección automática de Código QR en pantalla completa que sigue y muestra la posición del código en tiempo real.',
    'toggle_theme': 'Cambiar tema',
    'change_language': 'Cambiar idioma',

    // QR Scanner Page
    'qr_scanner_title': 'Rastreador de Código QR',
    'qr_scanner_change_color': 'Cambiar color del overlay',
    'qr_scanner_toggle_label': 'Alternar etiqueta personalizada',
    'qr_scanner_camera_error': 'No se pudo iniciar la cámara.',
    'qr_scanner_point_camera': 'Apunte la cámara a uno o más Códigos QR',
    'qr_scanner_no_value': '(sin valor)',
    'qr_scanner_detected_singular': 'detectado',
    'qr_scanner_detected_plural': 'detectados',

    // PDF Page
    'pdf_demo_title': 'Demo de PDF PharmaGO',
    'pdf_generation': 'Generación de PDF',
    'pdf_demo_description':
        'Este ejemplo demuestra las capacidades del paquete PDF PharmaGO:',
    'pdf_feature_header':
        'Encabezado personalizado con título, subtítulo y nombre de la app',
    'pdf_feature_kpi': 'Secciones de KPI con indicadores de tendencia',
    'pdf_feature_table': 'Tablas de datos con 150 elementos y totales en el pie',
    'pdf_feature_charts': 'Gráficos: barra, pastel y línea con PdfColumnSpan',
    'pdf_feature_footer': 'Pie de página con números de página (maxPage: 500)',
    'pdf_feature_form': 'Secciones de formulario con pares etiqueta/valor y estilos',
    'options': 'Opciones',
    'landscape_orientation': 'Orientación horizontal',
    'landscape_subtitle': 'Generar PDF en modo horizontal',
    'generate_pdf': 'Generar PDF',
    'generating': 'Generando...',
    'pdf_info_text':
        'Haga clic en el botón para generar un informe de ventas de ejemplo en PDF y previsualizarlo.',
    'pdf_package_info':
        'Usa paquetes pdf y printing para generación y visualización de PDF multiplataforma.',
  };
}

/// Language switcher widget for AppBar
/// Cycles through pt_BR -> en_US -> es_ES on each tap
class LanguageSwitcher extends StatelessWidget {
  const LanguageSwitcher({super.key});

  @override
  Widget build(BuildContext context) {
    return GetBuilder<GetMaterialController>(
      builder: (_) {
        final currentLocale = Get.locale ?? AppLocales.ptBR;
        return IconButton(
          icon: Text(
            AppLocales.getFlag(currentLocale),
            style: const TextStyle(fontSize: 20),
          ),
          onPressed: () {
            final nextLocale = AppLocales.getNextLocale(currentLocale);
            Get.updateLocale(nextLocale);
          },
          tooltip: 'change_language'.tr,
        );
      },
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'PharmaGO Packages Demo',
      translations: AppTranslations(),
      locale: AppLocales.ptBR,
      fallbackLocale: AppLocales.ptBR,
      supportedLocales: AppLocales.supportedLocales,
      localizationsDelegates: const [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(
          seedColor: Colors.blue,
          brightness: Brightness.light,
        ),
        useMaterial3: true,
      ),
      darkTheme: ThemeData(
        colorScheme: ColorScheme.fromSeed(
          seedColor: Colors.blue,
          brightness: Brightness.dark,
        ),
        useMaterial3: true,
      ),
      themeMode: ThemeMode.system,
      initialRoute: '/',
      getPages: [
        GetPage(
          name: '/',
          page: () => const HomePage(),
        ),
        GetPage(
          name: '/barcode',
          page: () => const BarcodePage(),
        ),
        GetPage(
          name: '/pdf',
          page: () => const PdfPharmagoPage(),
        ),
        GetPage(
          name: '/qr_scanner',
          page: () => const QrScannerPage(),
        ),
      ],
    );
  }
}
0
likes
110
points
100
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Reusable Flutter components for pharmacy applications. Provides cross-platform widgets for barcode scanning (camera and external USB readers) and comprehensive PDF generation with KPIs, tables, and charts.

Repository (GitHub)
View/report issues

Topics

#barcode #scanner #pdf #pharmacy #widget

License

MIT (license)

Dependencies

audioplayers, device_info_plus, flutter, flutter_web_plugins, gap, get, pdf, permission_handler, plugin_platform_interface, printing, shared_preferences, system_info_plus, web

More

Packages that depend on pharmago_packages

Packages that implement pharmago_packages