import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:satu/core/models/dialog_models.dart'; class DialogService { final GlobalKey _dialogNavigationKey = GlobalKey(); late Function(DialogRequest)? _showDialogListener; late Function(DialogRequest)? _showDialogInputListener; Completer? _dialogCompleter; Completer? get completer => _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 = 'SATU', 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({ required String title, required String requestPrice, required String requestCount, String? description, String confirmationTitle = 'ПОДТВЕРДИТЬ', String cancelTitle = 'Отмена', }) { _dialogCompleter = Completer(); _showDialogInputListener!(DialogRequest( title: title, description: description ?? '', buttonTitle: confirmationTitle, cancelTitle: cancelTitle, requestPrice: requestPrice, requestCount: requestCount)); 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; } }