add edit page and widgets
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
import 'package:get/get.dart';
|
||||
import '../model/filament_model.dart';
|
||||
import '../helpers/filament_repository.dart';
|
||||
import '../pages/edit_view.dart';
|
||||
|
||||
class DetailsController extends GetxController {
|
||||
Rx<FilamentModel?> filament = Rx<FilamentModel?>(null);
|
||||
final isEditing = false.obs;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
@@ -14,19 +14,9 @@ class DetailsController extends GetxController {
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
void toggleEdit() {
|
||||
isEditing.value = !isEditing.value;
|
||||
}
|
||||
|
||||
void updateFilament(FilamentModel updatedFilament) {
|
||||
FilamentRepository.to.updateFilament(updatedFilament);
|
||||
filament.value = updatedFilament;
|
||||
isEditing.value = false;
|
||||
Get.snackbar(
|
||||
'Erfolg',
|
||||
'Filament wurde aktualisiert',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
void onEditPressed() {
|
||||
// Implement edit functionality here
|
||||
Get.toNamed(EditPage.namedRoute, arguments: {'filament': filament.value});
|
||||
}
|
||||
|
||||
void deleteFilament() {
|
||||
|
||||
164
lib/controllers/edit_controller.dart
Normal file
164
lib/controllers/edit_controller.dart
Normal file
@@ -0,0 +1,164 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../model/filament_model.dart';
|
||||
import '../helpers/filament_repository.dart';
|
||||
|
||||
class EditController extends GetxController {
|
||||
Rx<FilamentModel?> originalFilament = Rx<FilamentModel?>(null);
|
||||
|
||||
// Form Controllers
|
||||
final nameController = TextEditingController();
|
||||
final typeController = TextEditingController();
|
||||
final colorController = TextEditingController();
|
||||
final weightController = TextEditingController();
|
||||
final weightUsedController = TextEditingController();
|
||||
final priceController = TextEditingController();
|
||||
final manufacturerController = TextEditingController();
|
||||
final purchaseDateController = TextEditingController();
|
||||
final notesController = TextEditingController();
|
||||
final piecesController = TextEditingController();
|
||||
final printingTempController = TextEditingController();
|
||||
final bedTempController = TextEditingController();
|
||||
|
||||
// Validation
|
||||
final formKey = GlobalKey<FormState>();
|
||||
final isSaving = false.obs;
|
||||
|
||||
// Available options
|
||||
final List<String> filamentTypes = [
|
||||
'PLA',
|
||||
'ABS',
|
||||
'PETG',
|
||||
'TPU',
|
||||
'ASA',
|
||||
'Nylon',
|
||||
'PC',
|
||||
'PVA',
|
||||
];
|
||||
|
||||
final List<String> availableColors = [
|
||||
'White',
|
||||
'Black',
|
||||
'Red',
|
||||
'Blue',
|
||||
'Green',
|
||||
'Yellow',
|
||||
'Orange',
|
||||
'Purple',
|
||||
'Pink',
|
||||
'Grey',
|
||||
'Brown',
|
||||
];
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
if (Get.arguments != null && Get.arguments['filament'] != null) {
|
||||
originalFilament.value = Get.arguments['filament'];
|
||||
_populateForm();
|
||||
}
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
void _populateForm() {
|
||||
final filament = originalFilament.value;
|
||||
if (filament != null) {
|
||||
nameController.text = filament.name;
|
||||
typeController.text = filament.type;
|
||||
colorController.text = filament.color;
|
||||
weightController.text = filament.weight.toString();
|
||||
weightUsedController.text = filament.weightUsed.toString();
|
||||
priceController.text = filament.price.toString();
|
||||
manufacturerController.text = filament.manufacturer ?? '';
|
||||
purchaseDateController.text = filament.purchaseDate ?? '';
|
||||
notesController.text = filament.notes ?? '';
|
||||
piecesController.text = filament.pices?.toString() ?? '';
|
||||
printingTempController.text = filament.printingTemp?.toString() ?? '';
|
||||
bedTempController.text = filament.bedTemp?.toString() ?? '';
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> saveFilament() async {
|
||||
if (!formKey.currentState!.validate()) return;
|
||||
|
||||
isSaving.value = true;
|
||||
|
||||
try {
|
||||
final updatedFilament = FilamentModel(
|
||||
id: originalFilament.value?.id ?? DateTime.now().millisecondsSinceEpoch.toString(),
|
||||
name: nameController.text.trim(),
|
||||
type: typeController.text.trim(),
|
||||
color: colorController.text.trim(),
|
||||
weight: double.tryParse(weightController.text) ?? 0,
|
||||
weightUsed: double.tryParse(weightUsedController.text) ?? 0,
|
||||
price: double.tryParse(priceController.text) ?? 0,
|
||||
manufacturer: manufacturerController.text.trim().isEmpty
|
||||
? null
|
||||
: manufacturerController.text.trim(),
|
||||
purchaseDate: purchaseDateController.text.trim().isEmpty
|
||||
? null
|
||||
: purchaseDateController.text.trim(),
|
||||
notes: notesController.text.trim().isEmpty
|
||||
? null
|
||||
: notesController.text.trim(),
|
||||
pices: int.tryParse(piecesController.text),
|
||||
printingTemp: int.tryParse(printingTempController.text),
|
||||
bedTemp: int.tryParse(bedTempController.text),
|
||||
);
|
||||
|
||||
bool success;
|
||||
if (originalFilament.value != null) {
|
||||
success = await FilamentRepository.to.updateFilament(updatedFilament);
|
||||
} else {
|
||||
success = await FilamentRepository.to.createFilament(updatedFilament);
|
||||
}
|
||||
|
||||
if (success) {
|
||||
Get.back(result: updatedFilament);
|
||||
Get.snackbar(
|
||||
'Erfolg',
|
||||
originalFilament.value != null
|
||||
? 'Filament wurde aktualisiert'
|
||||
: 'Filament wurde erstellt',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
backgroundColor: Get.theme.colorScheme.primary.withAlpha(26),
|
||||
colorText: Get.theme.colorScheme.primary,
|
||||
);
|
||||
} else {
|
||||
Get.snackbar(
|
||||
'Fehler',
|
||||
'Filament konnte nicht gespeichert werden',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
backgroundColor: Colors.red.withAlpha(26),
|
||||
colorText: Colors.red,
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
Get.snackbar(
|
||||
'Fehler',
|
||||
'Ein Fehler ist aufgetreten: $e',
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
backgroundColor: Colors.red.withAlpha(26),
|
||||
colorText: Colors.red,
|
||||
);
|
||||
} finally {
|
||||
isSaving.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
nameController.dispose();
|
||||
typeController.dispose();
|
||||
colorController.dispose();
|
||||
weightController.dispose();
|
||||
weightUsedController.dispose();
|
||||
priceController.dispose();
|
||||
manufacturerController.dispose();
|
||||
purchaseDateController.dispose();
|
||||
notesController.dispose();
|
||||
piecesController.dispose();
|
||||
printingTempController.dispose();
|
||||
bedTempController.dispose();
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ import 'package:get/get.dart';
|
||||
import '../../model/filament_model.dart';
|
||||
import '../../helpers/filament_repository.dart';
|
||||
import '../pages/details_view.dart';
|
||||
import '../pages/edit_view.dart';
|
||||
|
||||
class ListController extends GetxController {
|
||||
final filamentList = <FilamentModel>[].obs;
|
||||
@@ -35,7 +36,9 @@ class ListController extends GetxController {
|
||||
Get.toNamed(DetailsPage.namedRoute, arguments: {'filament': filament});
|
||||
}
|
||||
|
||||
void editFilament(FilamentModel filament) {}
|
||||
void editFilament(FilamentModel filament) {
|
||||
Get.toNamed(EditPage.namedRoute, arguments: {'filament': filament});
|
||||
}
|
||||
|
||||
void removeFilament(FilamentModel filament) {
|
||||
FilamentRepository.to.deleteFilament(filament.id);
|
||||
|
||||
Reference in New Issue
Block a user