floating action and bottom bar release
parent
3e7007ab63
commit
28bffdf0f7
|
|
@ -0,0 +1,39 @@
|
|||
import 'user.dart';
|
||||
|
||||
class AuthResponse {
|
||||
final AuthBody body;
|
||||
final int status;
|
||||
final bool operation;
|
||||
|
||||
|
||||
AuthResponse( {this.body, this.status, this.operation});
|
||||
|
||||
factory AuthResponse.fromJson(Map<String, dynamic> json) {
|
||||
return AuthResponse(
|
||||
operation: json['operation'],
|
||||
status: json['status'],
|
||||
body: AuthBody.fromJson(json['body'])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
List<String> parseListString(json){
|
||||
if(json==null) return null;
|
||||
return new List<String>.from(json);
|
||||
}
|
||||
|
||||
class AuthBody {
|
||||
final List<String> email;
|
||||
final List<String> password;
|
||||
final String message;
|
||||
final User user;
|
||||
AuthBody({this.message, this.user, this.email, this.password});
|
||||
factory AuthBody.fromJson(Map<String, dynamic> json) {
|
||||
return AuthBody(
|
||||
email: json['email']!=null ? parseListString(json['email']): null,
|
||||
message: json['message'],
|
||||
password: json['password']!=null ? parseListString(json['password']): null,
|
||||
user: json['user']!=null ? User.fromJson(json['user']) : null
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
|
||||
class DialogRequest {
|
||||
final String title;
|
||||
final String description;
|
||||
final String buttonTitle;
|
||||
final String cancelTitle;
|
||||
|
||||
DialogRequest(
|
||||
{@required this.title,
|
||||
@required this.description,
|
||||
@required this.buttonTitle,
|
||||
this.cancelTitle});
|
||||
}
|
||||
|
||||
class DialogResponse {
|
||||
final String fieldOne;
|
||||
final String fieldTwo;
|
||||
final bool confirmed;
|
||||
|
||||
DialogResponse({
|
||||
this.fieldOne,
|
||||
this.fieldTwo,
|
||||
this.confirmed,
|
||||
});
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
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;
|
||||
Completer<DialogResponse> _dialogCompleter;
|
||||
|
||||
GlobalKey<NavigatorState> get dialogNavigationKey => _dialogNavigationKey;
|
||||
|
||||
/// Registers a callback function. Typically to show the dialog
|
||||
void registerDialogListener(Function(DialogRequest) showDialogListener) {
|
||||
_showDialogListener = showDialogListener;
|
||||
}
|
||||
|
||||
/// Calls the dialog listener and returns a Future that will wait for dialogComplete.
|
||||
Future<DialogResponse> showDialog({
|
||||
String title,
|
||||
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;
|
||||
}
|
||||
|
||||
/// Completes the _dialogCompleter to resume the Future's execution call
|
||||
void dialogComplete(DialogResponse response) {
|
||||
_dialogNavigationKey.currentState.pop();
|
||||
_dialogCompleter.complete(response);
|
||||
_dialogCompleter = null;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
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';
|
||||
|
||||
class DialogManager extends StatefulWidget {
|
||||
final Widget child;
|
||||
DialogManager({Key key, this.child}) : super(key: key);
|
||||
|
||||
_DialogManagerState createState() => _DialogManagerState();
|
||||
}
|
||||
|
||||
class _DialogManagerState extends State<DialogManager> {
|
||||
DialogService _dialogService = locator<DialogService>();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_dialogService.registerDialogListener(_showDialog);
|
||||
}
|
||||
|
||||
@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: <Widget>[
|
||||
if (isConfirmationDialog)
|
||||
FlatButton(
|
||||
child: Text(request.cancelTitle),
|
||||
onPressed: () {
|
||||
_dialogService
|
||||
.dialogComplete(DialogResponse(confirmed: false));
|
||||
},
|
||||
),
|
||||
FlatButton(
|
||||
child: Text(request.buttonTitle),
|
||||
onPressed: () {
|
||||
_dialogService
|
||||
.dialogComplete(DialogResponse(confirmed: true));
|
||||
},
|
||||
),
|
||||
],
|
||||
));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue