first commit structure of app
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
import '../models/kauf_filament_model.dart';
|
||||
import '../services/get_storage_services.dart';
|
||||
|
||||
class HomeController extends GetxController {
|
||||
static const storageKey = 'kauf_filamente';
|
||||
|
||||
final storage = Get.find<GetStorageService>();
|
||||
final uuid = const Uuid();
|
||||
|
||||
final filamente = <KaufFilamentModel>[].obs;
|
||||
|
||||
final formKey = GlobalKey<FormState>();
|
||||
|
||||
final haendlerController = TextEditingController();
|
||||
final farbeController = TextEditingController();
|
||||
final preisController = TextEditingController();
|
||||
final markeController = TextEditingController();
|
||||
final gewichtController = TextEditingController();
|
||||
|
||||
final kaufdatum = DateTime.now().obs;
|
||||
final material = 'PLA'.obs;
|
||||
final editingId = RxnString();
|
||||
|
||||
final materialien = [
|
||||
'PLA',
|
||||
'PLA+',
|
||||
'PLA light',
|
||||
'PLA-CF',
|
||||
'PLA+',
|
||||
'PETG',
|
||||
'PETG-CF',
|
||||
'ABS',
|
||||
'ASA',
|
||||
'TPU',
|
||||
'Sonstiges',
|
||||
];
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
loadFilamente();
|
||||
}
|
||||
|
||||
void loadFilamente() {
|
||||
final data = storage.getModelList(storageKey);
|
||||
|
||||
filamente.assignAll(
|
||||
data.map(KaufFilamentModel.fromJson),
|
||||
);
|
||||
|
||||
sortFilamente();
|
||||
}
|
||||
|
||||
void sortFilamente() {
|
||||
filamente.sort(
|
||||
(a, b) => b.kaufdatum.compareTo(a.kaufdatum),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> persist() async {
|
||||
await storage.saveModelList(
|
||||
storageKey,
|
||||
filamente.map((f) => f.toJson()).toList(),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> saveFilament() async {
|
||||
if (!formKey.currentState!.validate()) return;
|
||||
|
||||
final preis = double.tryParse(
|
||||
preisController.text.trim().replaceAll(',', '.'),
|
||||
);
|
||||
|
||||
if (preis == null || !preis.isFinite || preis < 0) {
|
||||
Get.snackbar('Ungültiger Preis', 'Bitte Preis überprüfen.');
|
||||
return;
|
||||
}
|
||||
|
||||
final filament = KaufFilamentModel(
|
||||
filamentId: editingId.value ?? uuid.v4(),
|
||||
marke: markeController.text.trim(),
|
||||
kaufdatum: kaufdatum.value,
|
||||
haendler: haendlerController.text.trim(),
|
||||
material: material.value,
|
||||
preis: preis,
|
||||
farbe: farbeController.text.trim(),
|
||||
gewicht: gewichtController.text.trim().isEmpty
|
||||
? '1kg'
|
||||
: gewichtController.text.trim(),
|
||||
);
|
||||
|
||||
if (editingId.value == null) {
|
||||
filamente.add(filament);
|
||||
} else {
|
||||
final index = filamente.indexWhere(
|
||||
(f) => f.filamentId == editingId.value,
|
||||
);
|
||||
|
||||
if (index < 0) {
|
||||
Get.snackbar('Fehler', 'Datensatz nicht gefunden.');
|
||||
return;
|
||||
}
|
||||
|
||||
filamente[index] = filament;
|
||||
}
|
||||
|
||||
sortFilamente();
|
||||
await persist();
|
||||
resetForm();
|
||||
}
|
||||
|
||||
void editFilament(KaufFilamentModel filament) {
|
||||
editingId.value = filament.filamentId;
|
||||
kaufdatum.value = filament.kaufdatum;
|
||||
markeController.text = filament.marke;
|
||||
haendlerController.text = filament.haendler;
|
||||
material.value = filament.material;
|
||||
preisController.text = filament.preis.toStringAsFixed(2);
|
||||
farbeController.text = filament.farbe;
|
||||
gewichtController.text = filament.gewicht;
|
||||
}
|
||||
|
||||
Future<void> duplicateFilament(
|
||||
KaufFilamentModel filament,
|
||||
) async {
|
||||
filamente.add(
|
||||
filament.copyWith(filamentId: uuid.v4()),
|
||||
);
|
||||
|
||||
sortFilamente();
|
||||
await persist();
|
||||
}
|
||||
|
||||
Future<void> deleteFilament(String filamentId) async {
|
||||
filamente.removeWhere((f) => f.filamentId == filamentId);
|
||||
if (editingId.value == filamentId) resetForm();
|
||||
await persist();
|
||||
}
|
||||
|
||||
void resetForm() {
|
||||
editingId.value = null;
|
||||
haendlerController.clear();
|
||||
markeController.clear();
|
||||
farbeController.clear();
|
||||
preisController.clear();
|
||||
kaufdatum.value = DateTime.now();
|
||||
material.value = 'PLA';
|
||||
gewichtController.clear();
|
||||
formKey.currentState?.reset();
|
||||
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
haendlerController.dispose();
|
||||
markeController.dispose();
|
||||
farbeController.dispose();
|
||||
preisController.dispose();
|
||||
gewichtController.dispose();
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user