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 { GlobalKey _dialogNavigationKey = GlobalKey(); 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; } }