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 Касса', required String description, String buttonTitle = 'Ok', }) { _dialogCompleter = Completer(); _showDialogListener!(DialogRequest( title: title, description: description, buttonTitle: buttonTitle, )); return _dialogCompleter!.future; } /// Shows a confirmation dialog Future showConfirmationDialog( {required String title, required 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 Касса', required 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; } }