add some new features

This commit is contained in:
2026-10-29 15:03:48 +01:00
parent c876405a8f
commit 20012db615
39 changed files with 2908 additions and 97 deletions
+38 -51
View File
@@ -145,57 +145,44 @@ class FilamentForm extends StatelessWidget {
: null,
),
const SizedBox(height: 16),
LayoutBuilder(
builder: (context, constraints) {
final fields = [
TextFormField(
controller: controller.preisController,
keyboardType: const TextInputType.numberWithOptions(
decimal: true,
),
decoration: const InputDecoration(
labelText: 'Preis',
suffixText: '€',
),
validator: (value) {
final price = double.tryParse(
(value ?? '').replaceAll(',', '.'),
);
return price == null || !price.isFinite || price < 0
? 'Preis ungültig'
: null;
},
),
TextFormField(
controller: controller.gewichtController,
keyboardType: const TextInputType.numberWithOptions(
decimal: true,
),
decoration: const InputDecoration(
labelText: 'Startgewicht',
suffixText: 'g',
),
validator: InputValidators.positive,
),
];
if (constraints.maxWidth < 280) {
return Column(
children: [
fields[0],
const SizedBox(height: 16),
fields[1],
],
);
}
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(child: fields[0]),
const SizedBox(width: 12),
Expanded(child: fields[1]),
],
);
},
TextFormField(
controller: controller.preisController,
keyboardType: const TextInputType.numberWithOptions(
decimal: true,
),
decoration: const InputDecoration(
labelText: 'Preis',
suffixText: '€',
),
validator: InputValidators.nonNegative,
),
const SizedBox(height: 16),
TextFormField(
controller: controller.gewichtController,
keyboardType: const TextInputType.numberWithOptions(
decimal: true,
),
decoration: const InputDecoration(
labelText: 'Nettogewicht',
suffixText: 'g',
helperText: 'Startgewicht ohne Spule, nur Material.',
helperMaxLines: 2,
),
validator: InputValidators.positive,
),
const SizedBox(height: 16),
TextFormField(
controller: controller.bruttoGewichtController,
keyboardType: const TextInputType.numberWithOptions(
decimal: true,
),
decoration: const InputDecoration(
labelText: 'Bruttogewicht (optional)',
suffixText: 'g',
helperText: 'Material und Spule zusammen.',
helperMaxLines: 2,
),
validator: controller.validateBruttogewicht,
),
const SizedBox(height: 24),
Obx(