fix: simplify DefaultConfirmationDialog usage by handling the possible null value internally

This commit is contained in:
Bart Ribbers 2024-07-18 14:28:23 +02:00 committed by Freek van de Ven
parent bb337a4084
commit 226c90943a
4 changed files with 23 additions and 17 deletions

View file

@ -198,7 +198,7 @@ typedef TimePickerBuilder = Future<TimeOfDay?> Function(
/// ///
/// The function should return a [Future] that resolves to `true` if the user /// The function should return a [Future] that resolves to `true` if the user
/// confirms. /// confirms.
typedef ConfirmationDialogBuilder = Future<bool?> Function( typedef ConfirmationDialogBuilder = Future<bool> Function(
BuildContext context, { BuildContext context, {
required String title, required String title,
required String description, required String description,

View file

@ -99,14 +99,13 @@ class _AvailabilitiesModificationScreenState
Future<void> onClickSave() async { Future<void> onClickSave() async {
// TODO(Joey): The name confirmationDialogBuilder does not represent the // TODO(Joey): The name confirmationDialogBuilder does not represent the
// expected implementation. // expected implementation.
var confirmed = await options.confirmationDialogBuilder( var isConfirmed = await options.confirmationDialogBuilder(
context, context,
title: translations.availabilityDialogConfirmTitle, title: translations.availabilityDialogConfirmTitle,
description: translations.availabilityDialogConfirmDescription, description: translations.availabilityDialogConfirmDescription,
); );
// TODO(Joey): We should make the interface of the dialog function return
// a non nullable bool. Now we are implicitly setting default behaviour if (isConfirmed) {
if (confirmed ?? false) {
await onSave(); await onSave();
} }
} }

View file

@ -111,12 +111,12 @@ class _AvailabilityOverviewState extends State<AvailabilityOverview> {
} }
Future<void> onClearButtonClicked() async { Future<void> onClearButtonClicked() async {
var confirmed = await options.confirmationDialogBuilder( var isConfirmed = await options.confirmationDialogBuilder(
context, context,
title: translations.clearAvailabilityConfirmTitle, title: translations.clearAvailabilityConfirmTitle,
description: translations.clearAvailabilityConfirmDescription, description: translations.clearAvailabilityConfirmDescription,
); );
if (confirmed ?? false) { if (isConfirmed) {
await service await service
.clearAvailabilities(selectedAvailabilities.getAvailabilities()); .clearAvailabilities(selectedAvailabilities.getAvailabilities());
setState(() { setState(() {

View file

@ -13,19 +13,26 @@ class DefaultConfirmationDialog extends StatelessWidget {
}); });
/// Shows a confirmation dialog with a title and a description /// Shows a confirmation dialog with a title and a description
static Future<bool?> builder( static Future<bool> builder(
BuildContext context, { BuildContext context, {
required String title, required String title,
required String description, required String description,
}) => }) async {
showModalBottomSheet( var isConfirmed = await showModalBottomSheet<bool>(
context: context, context: context,
shape: const RoundedRectangleBorder(), shape: const RoundedRectangleBorder(),
builder: (context) => DefaultConfirmationDialog( builder: (context) => DefaultConfirmationDialog(
title: title, title: title,
description: description, description: description,
), ),
); );
if (isConfirmed == null) {
return false;
}
return isConfirmed;
}
/// The title shown in the dialog /// The title shown in the dialog
final String title; final String title;