114 lines
4.2 KiB
Dart
114 lines
4.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:uuid/uuid.dart';
|
|
|
|
import '../helper/input_validators.dart';
|
|
import '../models/anwendung_model.dart';
|
|
import '../models/kauf_filament_model.dart';
|
|
import '../services/get_storage_services.dart';
|
|
import 'home_controller.dart';
|
|
|
|
class AnwendungController extends GetxController {
|
|
AnwendungController({required this.filamentId});
|
|
|
|
static const storageKey = 'filament_anwendungen';
|
|
final String filamentId;
|
|
final storage = Get.find<GetStorageService>();
|
|
final formKey = GlobalKey<FormState>();
|
|
final druckbettController = TextEditingController();
|
|
final druckController = TextEditingController();
|
|
final empfohleneDrucktemperaturController = TextEditingController();
|
|
final empfohlenerHeizbettbereichController = TextEditingController();
|
|
final bauraumController = TextEditingController();
|
|
final sonstigesController = TextEditingController();
|
|
final bauraumGeschlossen = false.obs;
|
|
final isSaving = false.obs;
|
|
final message = RxnString();
|
|
final hasError = false.obs;
|
|
final filament = Rxn<KaufFilamentModel>();
|
|
final anwendungen = <AnwendungModel>[].obs;
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
final filamente = storage
|
|
.getModelList(HomeController.storageKey)
|
|
.map(KaufFilamentModel.fromJson)
|
|
.toList();
|
|
filament.value = filamente.firstWhereOrNull(
|
|
(item) => item.filamentId == filamentId,
|
|
);
|
|
final profiles =
|
|
storage
|
|
.getModelList(storageKey)
|
|
.map(AnwendungModel.fromJson)
|
|
.where((item) => item.filamentId == filamentId)
|
|
.toList()
|
|
..sort((a, b) => b.erstelltAm.compareTo(a.erstelltAm));
|
|
if (profiles.isNotEmpty) {
|
|
final profile = profiles.first;
|
|
anwendungen.assignAll([profile]);
|
|
druckbettController.text = profile.druckbettTemperatur.toString();
|
|
druckController.text = profile.druckTemperatur.toString();
|
|
empfohleneDrucktemperaturController.text =
|
|
profile.empfohleneDrucktemperatur;
|
|
empfohlenerHeizbettbereichController.text =
|
|
profile.empfohlenerHeizbettbereich;
|
|
bauraumController.text = profile.bauraumTemperatur?.toString() ?? '';
|
|
sonstigesController.text = profile.sonstiges;
|
|
bauraumGeschlossen.value = profile.bauraumGeschlossen;
|
|
}
|
|
}
|
|
|
|
Future<void> saveAnwendung() async {
|
|
if (isSaving.value || filament.value == null) return;
|
|
if (!(formKey.currentState?.validate() ?? false)) return;
|
|
isSaving.value = true;
|
|
message.value = null;
|
|
try {
|
|
final existing = anwendungen.firstOrNull;
|
|
final entry = AnwendungModel(
|
|
anwendungId: existing?.anwendungId ?? const Uuid().v4(),
|
|
filamentId: filamentId,
|
|
erstelltAm: existing?.erstelltAm ?? DateTime.now(),
|
|
druckbettTemperatur: InputValidators.number(druckbettController.text)!,
|
|
druckTemperatur: InputValidators.number(druckController.text)!,
|
|
empfohleneDrucktemperatur: empfohleneDrucktemperaturController.text
|
|
.trim(),
|
|
empfohlenerHeizbettbereich: empfohlenerHeizbettbereichController.text
|
|
.trim(),
|
|
bauraumGeschlossen: bauraumGeschlossen.value,
|
|
bauraumTemperatur: InputValidators.number(bauraumController.text),
|
|
sonstiges: sonstigesController.text.trim(),
|
|
);
|
|
final entries = storage.getModelList(storageKey);
|
|
await storage.saveModelList(storageKey, [
|
|
...entries.where((item) => item['filamentId'] != filamentId),
|
|
entry.toJson(),
|
|
]);
|
|
anwendungen.assignAll([entry]);
|
|
if (Get.isRegistered<HomeController>()) {
|
|
Get.find<HomeController>().loadProfile();
|
|
}
|
|
hasError.value = false;
|
|
message.value = 'Verarbeitungsprofil gespeichert.';
|
|
} catch (_) {
|
|
hasError.value = true;
|
|
message.value = 'Speichern fehlgeschlagen. Bitte erneut versuchen.';
|
|
} finally {
|
|
isSaving.value = false;
|
|
}
|
|
}
|
|
|
|
@override
|
|
void onClose() {
|
|
druckbettController.dispose();
|
|
druckController.dispose();
|
|
empfohleneDrucktemperaturController.dispose();
|
|
empfohlenerHeizbettbereichController.dispose();
|
|
bauraumController.dispose();
|
|
sonstigesController.dispose();
|
|
super.onClose();
|
|
}
|
|
}
|