import 'dart:async'; import 'package:aman_kassa_flutter/core/models/dialog_models.dart'; import 'package:flutter/cupertino.dart'; class DialogService { GlobalKey _dialogNavigationKey = GlobalKey(); Function(DialogRequest) _showDialogListener; Function(DialogRequest) _showDialogInputListener; Completer _dialogCompleter; Completer get completer => this._dialogCompleter; GlobalKey get dialogNavigationKey => _dialogNavigationKey; /// Registers a callback function. Typically to show the dialog void registerDialogListener(Function(DialogRequest) showDialogListener, Function(DialogRequest) showDialogInputListener) { _showDialogListener = showDialogListener; _showDialogInputListener = showDialogInputListener; } /// Calls the dialog listener and returns a Future that will wait for dialogComplete. Future showDialog({ String title = 'Aman Касса', 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; } Future showConfirmationDialogInput( {String title = ' Aman Касса', String description, String confirmationTitle = 'Ok', String cancelTitle = 'Cancel', String formatType}) { _dialogCompleter = Completer(); _showDialogInputListener(DialogRequest( title: title, description: description, buttonTitle: confirmationTitle, cancelTitle: cancelTitle, formatType: formatType)); 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; } }