import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_translate/flutter_translate.dart'; import '../datamodels/dialog_request.dart'; import '../datamodels/dialog_response.dart'; class DialogService { final GlobalKey _dialogNavigationKey = GlobalKey(); late Function(DialogRequest) _showDialogListener; Completer? _dialogCompleter; GlobalKey get dialogNavigationKey => _dialogNavigationKey; void registerDialogListener(Function(DialogRequest) showDialogListener) { _showDialogListener = showDialogListener; } Future showDialog({ String? title, String? description, String? buttonTitleAccept, }) { _dialogCompleter = Completer(); _showDialogListener(DialogRequest( title: title, description: description, buttonTitleAccept: buttonTitleAccept == null || buttonTitleAccept.isEmpty ? translate('dialog.confirm') : buttonTitleAccept)); return _dialogCompleter!.future; } Future showConfirmationDialog( {String? title, String? description, String? buttonTitleAccept, String? buttonTitleDeny}) { _dialogCompleter = Completer(); _showDialogListener(DialogRequest( title: title, description: description, buttonTitleAccept: buttonTitleAccept == null || buttonTitleAccept.isEmpty ? translate('dialog.confirm') : buttonTitleAccept, buttonTitleDeny: buttonTitleDeny == null || buttonTitleDeny.isEmpty ? translate('dialog.cancel') : buttonTitleDeny)); return _dialogCompleter!.future; } void dialogComplete(DialogResponse response) { _dialogNavigationKey.currentState!.pop(); _dialogCompleter!.complete(response); _dialogCompleter = null; } }