Fix: Passt das Verhalten der InputFelder an, dass sich diese wirklich verändern

This commit is contained in:
2026-01-01 23:19:49 +01:00
parent a937d34df2
commit 58cbd2a462
7 changed files with 85 additions and 62 deletions

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import '../../../Services/date_service.dart';
import '../../Dialog/dialog_action.dart';
import '../../Dialog/dialog_input_field.dart';
import '../../Dialog/dialog_input_field_type_enum.dart';
@@ -9,16 +10,13 @@ import '../../Dialog/dynamic_dialog.dart';
class DateRangePicker extends StatefulWidget {
/// Initialisiert eine neue Instanz dieser Klasse
const DateRangePicker({
this.controller,
this.autofocus = false,
super.key,
this.decoration,
this.initialValue,
this.onChanged,
});
/// Der Initiale Wert des Input-Feldes
final DateTimeRange? initialValue;
/// Ob das Feld automatisch ausgewählt werden soll
final bool autofocus;
@@ -28,42 +26,39 @@ class DateRangePicker extends StatefulWidget {
/// Die Dekoration, wie das Feld aussehen soll
final InputDecoration? decoration;
/// Der Controller über den der Wert des Inputfeldes gesetzt
/// und ausgelesen werden kann
final TextEditingController? controller;
@override
State<StatefulWidget> createState() => _DateRangePicker();
}
class _DateRangePicker extends State<DateRangePicker> {
final ValueNotifier<DateTimeRange?> _value = ValueNotifier(null);
final TextEditingController _valueController = TextEditingController();
@override
void initState() {
super.initState();
void dispose() {
_valueController.dispose();
_value.value = widget.initialValue;
_value.addListener(() {
widget.onChanged?.call(_value.value);
});
super.dispose();
}
@override
Widget build(final BuildContext context) => TextField(
readOnly: true,
controller: TextEditingController(
text: widget.initialValue != null
? '${widget.initialValue!.start.day}'
'.${widget.initialValue!.start.month}'
'.${widget.initialValue!.start.year}'
' - '
'${widget.initialValue!.end.day}'
'.${widget.initialValue!.end.month}'
'.${widget.initialValue!.end.year}'
: null,
),
controller: widget.controller ?? _valueController,
decoration: widget.decoration,
onTap: _pickDateRange,
);
Future<void> _pickDateRange() async {
final TextEditingController controller =
widget.controller ?? _valueController;
final DateTimeRange<DateTime>? dateTimeRange =
DateService.stringToDateTimeRange(controller.text);
await DynamicDialog(
title: 'Zeitraum auswählen',
inputFields: [
@@ -72,14 +67,14 @@ class _DateRangePicker extends State<DateRangePicker> {
label: 'Startdatum',
keyboardType: TextInputType.datetime,
inputType: DialogInputFieldTypeEnum.date,
initialValue: _value.value?.start,
initialValue: dateTimeRange?.start,
),
DialogInputField(
id: 'dateTo',
label: 'Enddatum',
keyboardType: TextInputType.datetime,
inputType: DialogInputFieldTypeEnum.date,
initialValue: _value.value?.end,
initialValue: dateTimeRange?.end,
),
],
actions: [
@@ -87,7 +82,8 @@ class _DateRangePicker extends State<DateRangePicker> {
DialogAction(
label: 'Leeren',
onPressed: (_) {
_value.value = null;
controller.text = '';
widget.onChanged?.call(null);
},
),
DialogAction(
@@ -98,10 +94,13 @@ class _DateRangePicker extends State<DateRangePicker> {
values['dateFrom'] is DateTime &&
values['dateTo'] != null &&
values['dateTo'] is DateTime) {
_value.value = DateTimeRange(
final DateTimeRange<DateTime> timeRange = DateTimeRange(
start: values['dateFrom'],
end: values['dateTo'],
);
controller.text = DateService.dateTimeRangeToString(timeRange)!;
widget.onChanged?.call(timeRange);
}
},
),

View File

@@ -1,6 +1,7 @@
import 'package:date_field/date_field.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import '../../../Services/date_service.dart';
/// Ein Feld mit Popup über welches man Datumsfelder auswählen kann
class DynamicDateTimeField extends StatefulWidget {
@@ -45,7 +46,7 @@ class _DynamicDateTimeFieldState extends State<DynamicDateTimeField> {
@override
Widget build(final BuildContext context) => DateTimeField(
initialPickerDateTime: widget.initialValue,
dateFormat: DateFormat('d.M.y'),
dateFormat: DateService.dateFormat,
value: _value,
mode: widget.mode,
autofocus: widget.autofocus,

View File

@@ -62,7 +62,7 @@ class _MonthlyBalanceChart extends State<MonthlyBalanceChart> {
amountMin: widget.amountMin,
amountMax: widget.amountMax,
dateFrom: widget.dateFrom,
dateTo: widget.dateTo,
dateTo: (widget.dateTo != null) ? widget.dateTo : DateTime.now(),
),
builder:
(