71 lines
2.3 KiB
Dart
71 lines
2.3 KiB
Dart
import 'dart:async';
|
||
|
||
import 'package:aman_kassa_flutter/core/models/dialog_models.dart';
|
||
import 'package:flutter/cupertino.dart';
|
||
|
||
class DialogService {
|
||
GlobalKey<NavigatorState> _dialogNavigationKey = GlobalKey<NavigatorState>();
|
||
Function(DialogRequest) _showDialogListener;
|
||
Function(DialogRequest) _showDialogInputListener;
|
||
Completer<DialogResponse> _dialogCompleter;
|
||
|
||
GlobalKey<NavigatorState> 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<DialogResponse> showDialog({
|
||
String title = 'Aman Касса',
|
||
String description,
|
||
String buttonTitle = 'Ok',
|
||
}) {
|
||
_dialogCompleter = Completer<DialogResponse>();
|
||
_showDialogListener(DialogRequest(
|
||
title: title,
|
||
description: description,
|
||
buttonTitle: buttonTitle,
|
||
));
|
||
return _dialogCompleter.future;
|
||
}
|
||
|
||
/// Shows a confirmation dialog
|
||
Future<DialogResponse> showConfirmationDialog(
|
||
{String title,
|
||
String description,
|
||
String confirmationTitle = 'Ok',
|
||
String cancelTitle = 'Cancel'}) {
|
||
_dialogCompleter = Completer<DialogResponse>();
|
||
_showDialogListener(DialogRequest(
|
||
title: title,
|
||
description: description,
|
||
buttonTitle: confirmationTitle,
|
||
cancelTitle: cancelTitle));
|
||
return _dialogCompleter.future;
|
||
}
|
||
|
||
Future<DialogResponse> showConfirmationDialogInput(
|
||
{String title =' Aman Касса',
|
||
String description,
|
||
String confirmationTitle = 'Ok',
|
||
String cancelTitle = 'Cancel'}) {
|
||
_dialogCompleter = Completer<DialogResponse>();
|
||
_showDialogInputListener(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;
|
||
}
|
||
}
|