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:
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:
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:
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¶
- Keine App-Logik in Shared Models: Nur reine Datenmodelle
- Keine UI in Shared Packages: Kein MaterialApp, Widgets, etc.
- Dependencies minimal halten: Nur was wirklich geteilt wird
- Breaking Changes vermeiden: Wenn Model ändert, beide Apps testen
- 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)