import 'package:aman_kassa_flutter/core/locator.dart'; import 'package:aman_kassa_flutter/core/models/dialog_models.dart'; import 'package:aman_kassa_flutter/core/services/dialog_service.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class DialogManager extends StatefulWidget { final Widget child; DialogManager({Key key, this.child}) : super(key: key); _DialogManagerState createState() => _DialogManagerState(); } class _DialogManagerState extends State { DialogService _dialogService = locator(); TextEditingController controller; @override void initState() { super.initState(); controller = new TextEditingController(); _dialogService.registerDialogListener(_showDialog, _showDialogInput); } @override void dispose() { controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return widget.child; } void _showDialog(DialogRequest request) { var isConfirmationDialog = request.cancelTitle != null; showDialog( context: context, builder: (context) => AlertDialog( title: Text(request.title), content: Text(request.description), actions: [ if (isConfirmationDialog) FlatButton( child: Text(request.cancelTitle), onPressed: () { _dialogService .dialogComplete(DialogResponse(confirmed: false)); }, ), FlatButton( child: Text(request.buttonTitle), onPressed: () { _dialogService .dialogComplete(DialogResponse(confirmed: true)); }, ), ], )); } void _showDialogInput(DialogRequest request) { var isConfirmationDialog = request.cancelTitle != null; controller.clear(); showDialog( context: context, builder: (context) => AlertDialog( title: Text(request.title), content: Column( mainAxisSize: MainAxisSize.min, children: [ Text(request.description), TextField( controller: controller, keyboardType: TextInputType.number, inputFormatters: [ WhitelistingTextInputFormatter(RegExp("^[0-9.]*")), ], ) ], ), actions: [ if (isConfirmationDialog) FlatButton( child: Text(request.cancelTitle), onPressed: () { _dialogService .dialogComplete(DialogResponse(confirmed: false)); }, ), FlatButton( child: Text(request.buttonTitle), onPressed: () { _dialogService .dialogComplete(DialogResponse(confirmed: true, responseText: controller.text)); }, ), ], )); } }