Snack bar fixes

This commit is contained in:
unknown 2018-07-29 19:49:13 +03:00
parent 8971b4d1d7
commit 935f53eafc
7 changed files with 74 additions and 79 deletions

View File

@ -45,6 +45,7 @@ linter:
# - prefer_const_literals_to_create_immutables
# - avoid_classes_with_only_static_members
# - avoid_function_literals_in_foreach_calls
# - avoid_field_initializers_in_const_classes
# these rules are documented on and in the same order as
# the Dart Lint rules page to make maintenance easier
# https://github.com/dart-lang/linter/blob/master/example/all.yaml
@ -61,7 +62,6 @@ linter:
# - avoid_catching_errors # we do this commonly
# - avoid_double_and_int_checks # only useful when targeting JS runtime
- avoid_empty_else
- avoid_field_initializers_in_const_classes
- avoid_init_to_null
# - avoid_js_rounded_ints # only useful when targeting JS runtime
- avoid_null_checks_in_equality_operators

View File

@ -3,7 +3,6 @@ import 'package:flutter/widgets.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/product/product_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/snackbar_row.dart';
import 'package:invoiceninja_flutter/ui/client/client_screen.dart';
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
import 'package:invoiceninja_flutter/ui/client/view/client_view_vm.dart';
@ -63,14 +62,7 @@ Middleware<AppState> _viewClient() {
next(action);
store.dispatch(UpdateCurrentRoute(ClientViewScreen.route));
final message = await Navigator.of(action.context).pushNamed(ClientViewScreen.route);
/*
Scaffold.of(action.context).showSnackBar(SnackBar(
content: SnackBarRow(
message: message,
)));
*/
Navigator.of(action.context).pushNamed(ClientViewScreen.route);
};
}

View File

@ -1,7 +1,6 @@
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/snackbar_row.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/invoice_screen.dart';
import 'package:invoiceninja_flutter/ui/invoice/view/invoice_view_vm.dart';
@ -44,14 +43,7 @@ Middleware<AppState> _viewInvoice() {
next(action);
store.dispatch(UpdateCurrentRoute(InvoiceViewScreen.route));
final message = await Navigator.of(action.context).pushNamed(InvoiceViewScreen.route);
/*
Scaffold.of(action.context).showSnackBar(SnackBar(
content: SnackBarRow(
message: message,
)));
*/
await Navigator.of(action.context).pushNamed(InvoiceViewScreen.route);
};
}
@ -69,14 +61,12 @@ Middleware<AppState> _editInvoice() {
next(action);
store.dispatch(UpdateCurrentRoute(InvoiceEditScreen.route));
final message = await Navigator.of(action.context).pushNamed(InvoiceEditScreen.route);
final invoice = await Navigator.of(action.context).pushNamed(InvoiceEditScreen.route);
if (action.completer != null) {
action.completer.complete(invoice);
}
/*
Scaffold.of(action.context).showSnackBar(SnackBar(
content: SnackBarRow(
message: message,
)));
*/
};
}

View File

@ -1,7 +1,6 @@
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/snackbar_row.dart';
import 'package:invoiceninja_flutter/ui/product/edit/product_edit_vm.dart';
import 'package:invoiceninja_flutter/ui/product/product_screen.dart';
import 'package:redux/redux.dart';
@ -36,14 +35,7 @@ Middleware<AppState> _editProduct() {
next(action);
store.dispatch(UpdateCurrentRoute(ProductEditScreen.route));
final message = await Navigator.of(action.context).pushNamed(ProductEditScreen.route);
/*
Scaffold.of(action.context).showSnackBar(SnackBar(
content: SnackBarRow(
message: message,
)));
*/
Navigator.of(action.context).pushNamed(ProductEditScreen.route);
};
}

View File

@ -6,7 +6,6 @@ import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart';
import 'package:invoiceninja_flutter/ui/client/client_screen.dart';
@ -102,28 +101,16 @@ class ClientEditVM {
store.dispatch(
SaveClientRequest(completer: completer, client: client));
return completer.future.then((savedClient) {
final localization = AppLocalization.of(context);
//final localization = AppLocalization.of(context);
if (client.isNew) {
if (store.state.uiState.currentRoute == InvoiceEditScreen.route) {
/*
final invoice = store.state.invoiceUIState.editing;
invoice.rebuild((b) => b
..clientId = client.id
);
store.dispatch(UpdateInvoice(invoice));
*/
Navigator.of(context).pop(savedClient);
} else {
Navigator.of(context).pushReplacementNamed(
ClientViewScreen.route);
}
/*
Navigator.of(context).pop(localization.successfullyCreatedClient);
Navigator.of(context).push<ClientViewScreen>(
MaterialPageRoute(builder: (_) => ClientViewScreen()));
*/
} else {
Navigator.of(context).pop(localization.successfullyUpdatedClient);
Navigator.of(context).pop(savedClient);
}
}).catchError((Object error) {
showDialog<ErrorDialog>(

View File

@ -53,34 +53,10 @@ class _ClientViewState extends State<ClientView>
},
child: Scaffold(
backgroundColor: Theme.of(context).backgroundColor,
appBar: AppBar(
title: Text(
client.displayName ?? ''), // Text(localizations.clientDetails),
bottom: TabBar(
controller: _controller,
//isScrollable: true,
tabs: [
Tab(
text: localization.overview,
),
Tab(
text: localization.details,
),
],
),
actions: client.isNew
? []
: [
EditIconButton(
isVisible: !client.isDeleted,
onPressed: () => viewModel.onEditPressed(context),
),
ActionMenuButton(
isSaving: viewModel.isSaving,
entity: client,
onSelected: viewModel.onActionSelected,
)
],
appBar: CustomAppBar(
viewModel: viewModel,
client: client,
controller: _controller,
),
body: TabBarView(
controller: _controller,
@ -145,3 +121,53 @@ class _ClientViewState extends State<ClientView>
);
}
}
class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
const CustomAppBar({
@required this.client,
@required this.viewModel,
@required this.controller,
});
final ClientViewVM viewModel;
final ClientEntity client;
final TabController controller;
@override
final Size preferredSize = const Size(double.infinity, 100.0);
@override
Widget build(BuildContext context) {
final localization = AppLocalization.of(context);
return AppBar(
title: Text(
client.displayName ?? ''), // Text(localizations.clientDetails),
bottom: TabBar(
controller: controller,
//isScrollable: true,
tabs: [
Tab(
text: localization.overview,
),
Tab(
text: localization.details,
),
],
),
actions: client.isNew
? []
: [
EditIconButton(
isVisible: !client.isDeleted,
onPressed: () => viewModel.onEditPressed(context),
),
ActionMenuButton(
isSaving: viewModel.isSaving,
entity: client,
onSelected: viewModel.onActionSelected,
)
],
);
}
}

View File

@ -64,7 +64,15 @@ class ClientViewVM {
client: client,
company: state.selectedCompany,
onEditPressed: (BuildContext context) {
store.dispatch(EditClient(client: client, context: context));
final Completer<ClientEntity> completer = new Completer<ClientEntity>();
store.dispatch(EditClient(client: client, context: context, completer: completer));
completer.future.then((client) {
Scaffold.of(context).showSnackBar(SnackBar(
content: SnackBarRow(
message: AppLocalization.of(context).successfullyUpdatedClient,
)
));
});
},
onInvoicesPressed: (BuildContext context) {
store.dispatch(FilterInvoicesByClient(client.id));