import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:days_left/model/DialogModels.dart'; class DialogService { GlobalKey _dialogNavigationKey = GlobalKey(); Function(DialogRequest) _showDialogListener; Completer _dialogCompleter; GlobalKey get dialogNavigationKey => _dialogNavigationKey; /// Registers a callback function. Typically to show the dialog void registerDialogListener(Function(DialogRequest) showDialogListener) { _showDialogListener = showDialogListener; } /// Calls the dialog listener and returns a Future that will wait for dialogComplete. Future showDialog({ String title, String description, String buttonTitle = 'Ok', }) { _dialogCompleter = Completer(); _showDialogListener(DialogRequest( title: title, description: description, buttonTitle: buttonTitle, )); return _dialogCompleter.future; } /// Shows a confirmation dialog Future showConfirmationDialog( {String title, String description, String confirmationTitle = 'Ok', String cancelTitle = 'Cancel'}) { _dialogCompleter = Completer(); _showDialogListener(DialogRequest( title: title, description: description, buttonTitle: confirmationTitle, cancelTitle: cancelTitle)); return _dialogCompleter.future; } /// Completes the _dialogCompleter to resume the Future's execution call void dialogComplete(DialogResponse response) { _dialogNavigationKey.currentState.pop(); _dialogCompleter.complete(response); _dialogCompleter = null; } }