diff --git a/app/lib/homework/homework_dialog/homework_dialog.dart b/app/lib/homework/homework_dialog/homework_dialog.dart index be90b2e24..ca3c1b2ec 100644 --- a/app/lib/homework/homework_dialog/homework_dialog.dart +++ b/app/lib/homework/homework_dialog/homework_dialog.dart @@ -362,15 +362,20 @@ class _TodoUntilPicker extends StatelessWidget { color: state.dueDate.error != null ? Colors.red : null, ), child: DatePicker( - key: HwDialogKeys.todoUntilTile, - padding: showLessonChips - ? const EdgeInsets.fromLTRB(12, 12, 12, 5) - : const EdgeInsets.all(12), selectedDate: state.dueDate.$1?.toDateTime, + // If a user chooses a date that was already selected by using a + // due date selection chip, we want [selectDate] to be called + // anyways so we can change the selection to a manual due date + // selection (chip will be deselected). + ignoreSameDateSelection: false, selectDate: (newDate) { bloc.add(DueDateChanged( DueDateSelection.date(Date.fromDateTime(newDate)))); }, + key: HwDialogKeys.todoUntilTile, + padding: showLessonChips + ? const EdgeInsets.fromLTRB(12, 12, 12, 5) + : const EdgeInsets.all(12), ), ), if (showLessonChips) diff --git a/lib/sharezone_widgets/lib/src/widgets.dart b/lib/sharezone_widgets/lib/src/widgets.dart index 391f09afb..64311113a 100644 --- a/lib/sharezone_widgets/lib/src/widgets.dart +++ b/lib/sharezone_widgets/lib/src/widgets.dart @@ -46,19 +46,23 @@ class LoadingCircle extends StatelessWidget { } class DatePicker extends StatelessWidget { - const DatePicker( - {Key? key, - this.labelText, - this.selectedDate, - this.selectDate, - this.padding}) - : super(key: key); + const DatePicker({ + Key? key, + this.labelText, + this.selectedDate, + this.selectDate, + this.padding, + this.ignoreSameDateSelection = true, + }) : super(key: key); final String? labelText; final DateTime? selectedDate; final ValueChanged? selectDate; final EdgeInsets? padding; + /// Whether to call [selectDate] if the chosen date equals [selectedDate]. + final bool ignoreSameDateSelection; + Future _selectDate(BuildContext context) async { FocusManager.instance.primaryFocus?.unfocus(); final DateTime tomorrow = @@ -70,7 +74,10 @@ class DatePicker extends StatelessWidget { firstDate: DateTime(2015, 8), lastDate: DateTime(2101), ); - if (picked != null && picked != selectedDate) selectDate!(picked); + + if (picked == null) return; + if (ignoreSameDateSelection && picked == selectedDate) return; + selectDate!(picked); } @override