Zum Inhalt

Shared Package

Shared models, constants, utilities, and business logic used by both easySale ERP System and Shop System.

Contents

  • Models: Common data models (Customer, Order, Article, etc.)
  • System Settings: Theme settings, country/language configuration
  • Enums: Shared enumerations
  • Constants: Design tokens, Firebase collection names, etc.
  • Base Classes: EntityBase, BaseImage

Usage

import 'package:shared/shared.dart';

// Use shared models
final customer = Customer(...);
final order = Order(...);

// Use shared constants
final spacing = SharedSpacing.lg;
final collectionName = SharedCollections.customers;

Versioning

This package follows semantic versioning: - Major: Breaking changes requiring app updates - Minor: New features, backward compatible - Patch: Bug fixes

Check CHANGELOG.md for version history.


Shared Package Guide (Detailliert)

Shared Packages nutzen

Shared Package zur App hinzufügen

In der pubspec.yaml deiner App (z.B. apps/erp_system/pubspec.yaml):

dependencies:
  flutter:
    sdk: flutter

  # Shared Packages
  shared_models:
    path: ../../packages/shared_models
  shared_constants:
    path: ../../packages/shared_constants
  shared_firebase:
    path: ../../packages/shared_firebase

Nach dem Hinzufügen:

cd apps/erp_system
flutter pub get

Shared Model erstellen

1. Model in shared_models erstellen

packages/shared_models/lib/models/product/product.dart:

class Product {
  final String id;
  final String name;
  final double price;

  Product({
    required this.id,
    required this.name,
    required this.price,
  });

  Map<String, dynamic> toJson() => {
    'id': id,
    'name': name,
    'price': price,
  };

  factory Product.fromJson(Map<String, dynamic> json) => Product(
    id: json['id'],
    name: json['name'],
    price: json['price'],
  );
}

2. Model exportieren

packages/shared_models/lib/shared_models.dart:

library shared_models;

export 'models/product/product.dart';
// Weitere Models hier exportieren

3. In App nutzen

apps/erp_system/lib/pages/products_page.dart:

import 'package:shared_models/shared_models.dart';

class ProductsPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final product = Product(
      id: '1',
      name: 'Test',
      price: 9.99,
    );

    return Text(product.name);
  }
}

Vorhandene Models migrieren

Schritt 1: Model kopieren

# Beispiel: Customer Model
cp apps/erp_system/lib/models/customer/customer.dart \
   packages/shared_models/lib/models/customer/

Schritt 2: Imports anpassen

Im kopierten Model (packages/shared_models/lib/models/customer/customer.dart): - Entferne App-spezifische Imports - Behalte nur Flutter/Firebase/Dart Imports

Schritt 3: Model exportieren

In packages/shared_models/lib/shared_models.dart:

export 'models/customer/customer.dart';

Schritt 4: In Apps nutzen

Ersetze in beiden Apps:

// Alt
import 'package:easy_sale_erp/models/customer/customer.dart';

// Neu
import 'package:shared_models/shared_models.dart';

Schritt 5: Original löschen

Wenn alles funktioniert:

rm apps/erp_system/lib/models/customer/customer.dart
rm apps/shop_system/lib/models/customer/customer.dart

Best Practices

  1. Keine App-Logik in Shared Models: Nur reine Datenmodelle
  2. Keine UI in Shared Packages: Kein MaterialApp, Widgets, etc.
  3. Dependencies minimal halten: Nur was wirklich geteilt wird
  4. Breaking Changes vermeiden: Wenn Model ändert, beide Apps testen
  5. Dokumentation: Komplexe Models kommentieren

Gemeinsame Models (Kandidaten)

Basierend auf beiden Apps sollten folgende Models geteilt werden:

  • all_base (Base-Klassen für alle Models)
  • all_enums (Gemeinsame Enums)
  • articles (Produkt/Artikel Models)
  • cart (Warenkorb Models)
  • customer (Kunden Models)
  • order (Bestellungen Models)
  • system_settings (System Einstellungen)
  • delivery_break (Lieferpausen)
  • purchase_list (Einkaufslisten)

ERP-spezifisch (NICHT teilen): - ❌ connector (nur ERP) - ❌ job (nur ERP) - ❌ tutorial (nur ERP) - ❌ user (nur ERP) - ❌ nav_bar (nur ERP)

Shop-spezifisch (NICHT teilen): - ❌ feed (nur Shop)