Show toast messages

This commit is contained in:
Hillel Coren 2021-01-31 11:52:29 +02:00
parent 7bb66c75b9
commit 48290144c9
24 changed files with 170 additions and 152 deletions

View File

@ -1026,63 +1026,32 @@ void editEntity(
callback: () { callback: () {
switch (entityType) { switch (entityType) {
case EntityType.client: case EntityType.client:
store.dispatch( store.dispatch(EditClient(
EditClient( client: entity,
client: entity, navigator: navigator,
navigator: navigator, completer: completer,
completer: completer ?? ));
snackBarCompleter<ClientEntity>(
context,
entity.isNew
? localization.createdClient
: localization.updatedClient)),
);
break; break;
case EntityType.user: case EntityType.user:
store.dispatch( store.dispatch(EditUser(
EditUser( user: entity,
user: entity, navigator: navigator,
navigator: navigator, completer: completer,
completer: completer ?? ));
snackBarCompleter<UserEntity>(
context,
entity.isNew
? localization.createdUser
: localization.updatedUser)),
);
break; break;
case EntityType.project: case EntityType.project:
store.dispatch(EditProject( store.dispatch(EditProject(
project: entity, project: entity, navigator: navigator, completer: completer));
navigator: navigator,
completer: completer ??
snackBarCompleter<ProjectEntity>(
context,
entity.isNew
? localization.createdProject
: localization.updatedProject)));
break; break;
case EntityType.taxRate: case EntityType.taxRate:
store.dispatch(EditTaxRate( store.dispatch(EditTaxRate(
taxRate: entity, taxRate: entity, navigator: navigator, completer: completer));
navigator: navigator,
completer: completer ??
snackBarCompleter<TaxRateEntity>(
context,
entity.isNew
? localization.createdTaxRate
: localization.updatedTaxRate)));
break; break;
case EntityType.companyGateway: case EntityType.companyGateway:
store.dispatch(EditCompanyGateway( store.dispatch(EditCompanyGateway(
companyGateway: entity, companyGateway: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer));
snackBarCompleter<CompanyGatewayEntity>(
context,
entity.isNew
? localization.createdCompanyGateway
: localization.updatedCompanyGateway)));
break; break;
case EntityType.invoice: case EntityType.invoice:
final invoice = entity as InvoiceEntity; final invoice = entity as InvoiceEntity;
@ -1108,12 +1077,7 @@ void editEntity(
store.dispatch(EditInvoice( store.dispatch(EditInvoice(
invoice: entity, invoice: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<InvoiceEntity>(
context,
entity.isNew
? localization.createdInvoice
: localization.updatedInvoice),
invoiceItemIndex: subIndex, invoiceItemIndex: subIndex,
)); ));
} }
@ -1122,12 +1086,7 @@ void editEntity(
store.dispatch(EditQuote( store.dispatch(EditQuote(
quote: entity, quote: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<InvoiceEntity>(
context,
entity.isNew
? localization.createdQuote
: localization.updatedQuote),
quoteItemIndex: subIndex, quoteItemIndex: subIndex,
)); ));
break; break;
@ -1135,24 +1094,12 @@ void editEntity(
store.dispatch(EditVendor( store.dispatch(EditVendor(
vendor: entity, vendor: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<VendorEntity>(
context,
entity.isNew
? localization.createdVendor
: localization.updatedVendor),
)); ));
break; break;
case EntityType.product: case EntityType.product:
store.dispatch(EditProduct( store.dispatch(EditProduct(
product: entity, product: entity, navigator: navigator, completer: completer));
navigator: navigator,
completer: completer ??
snackBarCompleter<ProductEntity>(
context,
entity.isNew
? localization.createdProduct
: localization.updatedProduct)));
break; break;
case EntityType.task: case EntityType.task:
store.dispatch(EditTask( store.dispatch(EditTask(
@ -1160,54 +1107,27 @@ void editEntity(
(b) => b..showAsRunning = (entity as TaskEntity).isRunning), (b) => b..showAsRunning = (entity as TaskEntity).isRunning),
navigator: navigator, navigator: navigator,
taskTimeIndex: subIndex, taskTimeIndex: subIndex,
completer: completer ?? completer: completer,
snackBarCompleter<TaskEntity>(
context,
entity.isNew
? localization.createdTask
: localization.updatedTask),
)); ));
break; break;
case EntityType.expense: case EntityType.expense:
store.dispatch(EditExpense( store.dispatch(
expense: entity, EditExpense(
navigator: navigator, expense: entity, navigator: navigator, completer: completer),
completer: completer ?? );
snackBarCompleter<ExpenseEntity>(
context,
entity.isNew
? localization.createdExpense
: localization.updatedExpense),
));
break; break;
//case EntityType.expenseCategory:
//store.dispatch(EditExpenseCategory(taxRate: entity, navigator: navigator));
//break;
//case EntityType.credit:
//store.dispatch(EditCredit(credit: entity, navigator: navigator));
//break;
case EntityType.payment: case EntityType.payment:
store.dispatch(EditPayment( store.dispatch(EditPayment(
payment: entity, payment: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<PaymentEntity>(
context,
entity.isNew
? localization.createdPayment
: localization.updatedPayment),
)); ));
break; break;
case EntityType.group: case EntityType.group:
store.dispatch(EditGroup( store.dispatch(EditGroup(
group: entity, group: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<GroupEntity>(
context,
entity.isNew
? localization.createdGroup
: localization.updatedGroup),
)); ));
break; break;
// STARTER: edit - do not remove comment // STARTER: edit - do not remove comment
@ -1215,12 +1135,7 @@ void editEntity(
store.dispatch(EditTaskStatus( store.dispatch(EditTaskStatus(
taskStatus: entity, taskStatus: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<TaskStatusEntity>(
context,
entity.isNew
? localization.createdTaskStatus
: localization.updatedTaskStatus),
)); ));
break; break;
@ -1228,12 +1143,7 @@ void editEntity(
store.dispatch(EditExpenseCategory( store.dispatch(EditExpenseCategory(
expenseCategory: entity, expenseCategory: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<ExpenseCategoryEntity>(
context,
entity.isNew
? localization.createdExpenseCategory
: localization.updatedExpenseCategory),
)); ));
break; break;
@ -1241,12 +1151,7 @@ void editEntity(
store.dispatch(EditRecurringInvoice( store.dispatch(EditRecurringInvoice(
recurringInvoice: entity, recurringInvoice: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<InvoiceEntity>(
context,
entity.isNew
? localization.createdRecurringInvoice
: localization.updatedRecurringInvoice),
)); ));
break; break;
@ -1254,12 +1159,7 @@ void editEntity(
store.dispatch(EditWebhook( store.dispatch(EditWebhook(
webhook: entity, webhook: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<WebhookEntity>(
context,
entity.isNew
? localization.createdWebhook
: localization.updatedWebhook),
)); ));
break; break;
@ -1267,12 +1167,7 @@ void editEntity(
store.dispatch(EditToken( store.dispatch(EditToken(
token: entity, token: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<TokenEntity>(
context,
entity.isNew
? localization.createdToken
: localization.updatedToken),
)); ));
break; break;
@ -1280,12 +1175,7 @@ void editEntity(
store.dispatch(EditPaymentTerm( store.dispatch(EditPaymentTerm(
paymentTerm: entity, paymentTerm: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<PaymentTermEntity>(
context,
entity.isNew
? localization.createdPaymentTerm
: localization.updatedPaymentTerm),
)); ));
break; break;
@ -1293,12 +1183,7 @@ void editEntity(
store.dispatch(EditDesign( store.dispatch(EditDesign(
design: entity, design: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<DesignEntity>(
context,
entity.isNew
? localization.createdDesign
: localization.updatedDesign),
)); ));
break; break;
@ -1306,12 +1191,7 @@ void editEntity(
store.dispatch(EditCredit( store.dispatch(EditCredit(
credit: entity, credit: entity,
navigator: navigator, navigator: navigator,
completer: completer ?? completer: completer,
snackBarCompleter<InvoiceEntity>(
context,
entity.isNew
? localization.createdCredit
: localization.updatedCredit),
)); ));
break; break;
} }

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart';
@ -11,6 +12,7 @@ import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart';
import 'package:invoiceninja_flutter/ui/client/edit/client_edit.dart'; import 'package:invoiceninja_flutter/ui/client/edit/client_edit.dart';
import 'package:invoiceninja_flutter/ui/client/view/client_view_vm.dart'; import 'package:invoiceninja_flutter/ui/client/view/client_view_vm.dart';
import 'package:invoiceninja_flutter/ui/settings/localization_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
@ -98,9 +100,11 @@ class ClientEditVM {
return null; return null;
} }
final Completer<ClientEntity> completer = Completer<ClientEntity>(); final Completer<ClientEntity> completer = Completer<ClientEntity>();
final localization = AppLocalization.of(context);
store.dispatch( store.dispatch(
SaveClientRequest(completer: completer, client: client)); SaveClientRequest(completer: completer, client: client));
return completer.future.then((savedClient) { return completer.future.then((savedClient) {
showToast(client.isNew ? localization.createdClient : localization.updatedClient);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(ClientViewScreen.route)); store.dispatch(UpdateCurrentRoute(ClientViewScreen.route));
if (client.isNew && state.clientUIState.saveCompleter == null) { if (client.isNew && state.clientUIState.saveCompleter == null) {

View File

@ -2,9 +2,11 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
@ -68,11 +70,16 @@ class CompanyGatewayEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute)); store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<CompanyGatewayEntity> completer = final Completer<CompanyGatewayEntity> completer =
new Completer<CompanyGatewayEntity>(); new Completer<CompanyGatewayEntity>();
store.dispatch(SaveCompanyGatewayRequest( store.dispatch(SaveCompanyGatewayRequest(
completer: completer, companyGateway: companyGateway)); completer: completer, companyGateway: companyGateway));
return completer.future.then((savedCompanyGateway) { return completer.future.then((savedCompanyGateway) {
showToast(companyGateway.isNew
? localization.createdCompanyGateway
: localization.updatedCompanyGateway);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(CompanyGatewayViewScreen.route)); store.dispatch(UpdateCurrentRoute(CompanyGatewayViewScreen.route));
if (companyGateway.isNew) { if (companyGateway.isNew) {

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/credit/credit_actions.dart'; import 'package:invoiceninja_flutter/redux/credit/credit_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
@ -79,9 +80,14 @@ class CreditEditVM extends EntityEditVM {
}); });
return null; return null;
} }
final localization = AppLocalization.of(context);
final Completer<InvoiceEntity> completer = Completer<InvoiceEntity>(); final Completer<InvoiceEntity> completer = Completer<InvoiceEntity>();
store.dispatch(SaveCreditRequest(completer: completer, credit: credit)); store.dispatch(SaveCreditRequest(completer: completer, credit: credit));
return completer.future.then((savedCredit) { return completer.future.then((savedCredit) {
showToast(credit.isNew
? localization.createdCredit
: localization.updatedCredit);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(CreditViewScreen.route)); store.dispatch(UpdateCurrentRoute(CreditViewScreen.route));
if (credit.isNew) { if (credit.isNew) {

View File

@ -55,11 +55,15 @@ class DocumentEditVM {
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
/* /*
final localization = AppLocalization.of(context);
final Completer<DocumentEntity> completer = final Completer<DocumentEntity> completer =
new Completer<DocumentEntity>(); new Completer<DocumentEntity>();
store.dispatch( store.dispatch(
SaveDocumentRequest(completer: completer, document: document)); SaveDocumentRequest(completer: completer, document: document));
return completer.future.then((savedDocument) { return completer.future.then((savedDocument) {
showToast(client.isNew
? localization.createdClient
: localization.updatedClient);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(DocumentViewScreen.route)); store.dispatch(UpdateCurrentRoute(DocumentViewScreen.route));
if (document.isNew) { if (document.isNew) {

View File

@ -2,8 +2,10 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
@ -96,11 +98,16 @@ class ExpenseEditVM {
}); });
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<ExpenseEntity> completer = final Completer<ExpenseEntity> completer =
new Completer<ExpenseEntity>(); new Completer<ExpenseEntity>();
store.dispatch( store.dispatch(
SaveExpenseRequest(completer: completer, expense: expense)); SaveExpenseRequest(completer: completer, expense: expense));
return completer.future.then((savedExpense) { return completer.future.then((savedExpense) {
showToast(expense.isNew
? localization.createdExpense
: localization.updatedExpense);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(ExpenseViewScreen.route)); store.dispatch(UpdateCurrentRoute(ExpenseViewScreen.route));
if (expense.isNew) { if (expense.isNew) {

View File

@ -2,9 +2,11 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
@ -68,11 +70,16 @@ class ExpenseCategoryEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute)); store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<ExpenseCategoryEntity> completer = final Completer<ExpenseCategoryEntity> completer =
new Completer<ExpenseCategoryEntity>(); new Completer<ExpenseCategoryEntity>();
store.dispatch(SaveExpenseCategoryRequest( store.dispatch(SaveExpenseCategoryRequest(
completer: completer, expenseCategory: expenseCategory)); completer: completer, expenseCategory: expenseCategory));
return completer.future.then((savedExpenseCategory) { return completer.future.then((savedExpenseCategory) {
showToast(expenseCategory.isNew
? localization.createdExpenseCategory
: localization.updatedExpenseCategory);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(ExpenseCategoryViewScreen.route)); store.dispatch(UpdateCurrentRoute(ExpenseCategoryViewScreen.route));
if (expenseCategory.isNew) { if (expenseCategory.isNew) {

View File

@ -2,9 +2,11 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
@ -67,9 +69,14 @@ class GroupEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute)); store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<GroupEntity> completer = Completer<GroupEntity>(); final Completer<GroupEntity> completer = Completer<GroupEntity>();
store.dispatch(SaveGroupRequest(completer: completer, group: group)); store.dispatch(SaveGroupRequest(completer: completer, group: group));
return completer.future.then((savedGroup) { return completer.future.then((savedGroup) {
showToast(group.isNew
? localization.createdGroup
: localization.updatedGroup);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(GroupViewScreen.route)); store.dispatch(UpdateCurrentRoute(GroupViewScreen.route));
if (group.isNew) { if (group.isNew) {

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_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/app/dialogs/error_dialog.dart';
@ -102,10 +103,15 @@ class InvoiceEditVM extends EntityEditVM {
}); });
return null; return null;
} }
final localization = AppLocalization.of(context);
final Completer<InvoiceEntity> completer = Completer<InvoiceEntity>(); final Completer<InvoiceEntity> completer = Completer<InvoiceEntity>();
store.dispatch( store.dispatch(
SaveInvoiceRequest(completer: completer, invoice: invoice)); SaveInvoiceRequest(completer: completer, invoice: invoice));
return completer.future.then((savedInvoice) { return completer.future.then((savedInvoice) {
showToast(invoice.isNew
? localization.createdInvoice
: localization.updatedInvoice);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(InvoiceViewScreen.route)); store.dispatch(UpdateCurrentRoute(InvoiceViewScreen.route));
if (invoice.isNew) { if (invoice.isNew) {

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/static/static_state.dart'; import 'package:invoiceninja_flutter/redux/static/static_state.dart';
import 'package:invoiceninja_flutter/redux/ui/pref_state.dart'; import 'package:invoiceninja_flutter/redux/ui/pref_state.dart';
@ -83,10 +84,14 @@ class PaymentEditVM {
}); });
return null; return null;
} }
final localization = AppLocalization.of(context);
final Completer<PaymentEntity> completer = Completer<PaymentEntity>(); final Completer<PaymentEntity> completer = Completer<PaymentEntity>();
store.dispatch( store.dispatch(
SavePaymentRequest(completer: completer, payment: payment)); SavePaymentRequest(completer: completer, payment: payment));
return completer.future.then((savedPayment) { return completer.future.then((savedPayment) {
showToast(payment.isNew
? localization.createdPayment
: localization.updatedPayment);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(PaymentViewScreen.route)); store.dispatch(UpdateCurrentRoute(PaymentViewScreen.route));
if (payment.isNew) { if (payment.isNew) {

View File

@ -12,6 +12,7 @@ import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart';
import 'package:invoiceninja_flutter/ui/payment/refund/payment_refund.dart'; import 'package:invoiceninja_flutter/ui/payment/refund/payment_refund.dart';
import 'package:invoiceninja_flutter/ui/payment/view/payment_view_vm.dart'; import 'package:invoiceninja_flutter/ui/payment/view/payment_view_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/redux/payment/payment_actions.dart'; import 'package:invoiceninja_flutter/redux/payment/payment_actions.dart';

View File

@ -2,10 +2,12 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/payment_term/payment_term_screen.dart'; import 'package:invoiceninja_flutter/ui/payment_term/payment_term_screen.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
@ -68,11 +70,16 @@ class PaymentTermEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute)); store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<PaymentTermEntity> completer = final Completer<PaymentTermEntity> completer =
new Completer<PaymentTermEntity>(); new Completer<PaymentTermEntity>();
store.dispatch(SavePaymentTermRequest( store.dispatch(SavePaymentTermRequest(
completer: completer, paymentTerm: paymentTerm)); completer: completer, paymentTerm: paymentTerm));
return completer.future.then((savedPaymentTerm) { return completer.future.then((savedPaymentTerm) {
showToast(paymentTerm.isNew
? localization.createdPaymentTerm
: localization.updatedPaymentTerm);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(PaymentTermScreen.route)); store.dispatch(UpdateCurrentRoute(PaymentTermScreen.route));
if (paymentTerm.isNew) { if (paymentTerm.isNew) {

View File

@ -3,6 +3,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart';
@ -11,6 +12,7 @@ import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart'; import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart';
import 'package:invoiceninja_flutter/ui/product/edit/product_edit.dart'; import 'package:invoiceninja_flutter/ui/product/edit/product_edit.dart';
import 'package:invoiceninja_flutter/ui/product/view/product_view_vm.dart'; import 'package:invoiceninja_flutter/ui/product/view/product_view_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
@ -68,11 +70,16 @@ class ProductEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute)); store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<ProductEntity> completer = final Completer<ProductEntity> completer =
new Completer<ProductEntity>(); new Completer<ProductEntity>();
store.dispatch( store.dispatch(
SaveProductRequest(completer: completer, product: product)); SaveProductRequest(completer: completer, product: product));
return completer.future.then((savedProduct) { return completer.future.then((savedProduct) {
showToast(product.isNew
? localization.createdProduct
: localization.updatedProduct);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(ProductViewScreen.route)); store.dispatch(UpdateCurrentRoute(ProductViewScreen.route));
if (product.isNew) { if (product.isNew) {

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/data/models/client_model.dart'; import 'package:invoiceninja_flutter/data/models/client_model.dart';
import 'package:invoiceninja_flutter/data/models/company_model.dart'; import 'package:invoiceninja_flutter/data/models/company_model.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart'; import 'package:invoiceninja_flutter/data/models/entities.dart';
@ -9,6 +10,7 @@ import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_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/app/dialogs/error_dialog.dart';
import 'package:invoiceninja_flutter/ui/project/view/project_view_vm.dart'; import 'package:invoiceninja_flutter/ui/project/view/project_view_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/redux/project/project_actions.dart'; import 'package:invoiceninja_flutter/redux/project/project_actions.dart';
@ -88,11 +90,16 @@ class ProjectEditVM {
}); });
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<ProjectEntity> completer = final Completer<ProjectEntity> completer =
new Completer<ProjectEntity>(); new Completer<ProjectEntity>();
store.dispatch( store.dispatch(
SaveProjectRequest(completer: completer, project: project)); SaveProjectRequest(completer: completer, project: project));
return completer.future.then((savedProject) { return completer.future.then((savedProject) {
showToast(project.isNew
? localization.createdProject
: localization.updatedProject);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(ProjectViewScreen.route)); store.dispatch(UpdateCurrentRoute(ProjectViewScreen.route));
if (project.isNew && state.projectUIState.saveCompleter == null) { if (project.isNew && state.projectUIState.saveCompleter == null) {

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/quote/quote_actions.dart'; import 'package:invoiceninja_flutter/redux/quote/quote_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
@ -79,9 +80,14 @@ class QuoteEditVM extends EntityEditVM {
}); });
return null; return null;
} }
final localization = AppLocalization.of(context);
final Completer<InvoiceEntity> completer = Completer<InvoiceEntity>(); final Completer<InvoiceEntity> completer = Completer<InvoiceEntity>();
store.dispatch(SaveQuoteRequest(completer: completer, quote: quote)); store.dispatch(SaveQuoteRequest(completer: completer, quote: quote));
return completer.future.then((savedQuote) { return completer.future.then((savedQuote) {
showToast(quote.isNew
? localization.createdQuote
: localization.updatedQuote);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(QuoteViewScreen.route)); store.dispatch(UpdateCurrentRoute(QuoteViewScreen.route));
if (quote.isNew) { if (quote.isNew) {

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/recurring_invoice/recurring_invoice_actions.dart'; import 'package:invoiceninja_flutter/redux/recurring_invoice/recurring_invoice_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
@ -79,10 +80,15 @@ class RecurringInvoiceEditVM extends EntityEditVM {
}); });
return null; return null;
} }
final localization = AppLocalization.of(context);
final Completer<InvoiceEntity> completer = Completer<InvoiceEntity>(); final Completer<InvoiceEntity> completer = Completer<InvoiceEntity>();
store.dispatch(SaveRecurringInvoiceRequest( store.dispatch(SaveRecurringInvoiceRequest(
completer: completer, recurringInvoice: recurringInvoice)); completer: completer, recurringInvoice: recurringInvoice));
return completer.future.then((savedRecurringInvoice) { return completer.future.then((savedRecurringInvoice) {
showToast(recurringInvoice.isNew
? localization.createdRecurringInvoice
: localization.updatedRecurringInvoice);
if (isMobile(context)) { if (isMobile(context)) {
store store
.dispatch(UpdateCurrentRoute(RecurringInvoiceViewScreen.route)); .dispatch(UpdateCurrentRoute(RecurringInvoiceViewScreen.route));

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
@ -84,9 +85,13 @@ class TaskEditVM {
return null; return null;
} }
final localization = AppLocalization.of(context);
final Completer<TaskEntity> completer = new Completer<TaskEntity>(); final Completer<TaskEntity> completer = new Completer<TaskEntity>();
store.dispatch(SaveTaskRequest(completer: completer, task: task)); store.dispatch(SaveTaskRequest(completer: completer, task: task));
return completer.future.then((savedTask) { return completer.future.then((savedTask) {
showToast(
task.isNew ? localization.createTask : localization.updatedTask);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(TaskViewScreen.route)); store.dispatch(UpdateCurrentRoute(TaskViewScreen.route));
if (task.isNew) { if (task.isNew) {

View File

@ -2,9 +2,11 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
@ -67,11 +69,16 @@ class TaskStatusEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute)); store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<TaskStatusEntity> completer = final Completer<TaskStatusEntity> completer =
new Completer<TaskStatusEntity>(); new Completer<TaskStatusEntity>();
store.dispatch(SaveTaskStatusRequest( store.dispatch(SaveTaskStatusRequest(
completer: completer, taskStatus: taskStatus)); completer: completer, taskStatus: taskStatus));
return completer.future.then((savedTaskStatus) { return completer.future.then((savedTaskStatus) {
showToast(taskStatus.isNew
? localization.createdTaskStatus
: localization.updatedTaskStatus);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(TaskStatusViewScreen.route)); store.dispatch(UpdateCurrentRoute(TaskStatusViewScreen.route));
if (taskStatus.isNew) { if (taskStatus.isNew) {

View File

@ -2,9 +2,11 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
@ -67,11 +69,16 @@ class TaxRateEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute)); store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<TaxRateEntity> completer = final Completer<TaxRateEntity> completer =
new Completer<TaxRateEntity>(); new Completer<TaxRateEntity>();
store.dispatch( store.dispatch(
SaveTaxRateRequest(completer: completer, taxRate: taxRate)); SaveTaxRateRequest(completer: completer, taxRate: taxRate));
return completer.future.then((savedTaxRate) { return completer.future.then((savedTaxRate) {
showToast(taxRate.isNew
? localization.createdTaxRate
: localization.updatedTaxRate);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(TaxRateViewScreen.route)); store.dispatch(UpdateCurrentRoute(TaxRateViewScreen.route));
if (taxRate.isNew) { if (taxRate.isNew) {

View File

@ -2,11 +2,13 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart'; import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/dialogs.dart'; import 'package:invoiceninja_flutter/utils/dialogs.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
@ -74,11 +76,16 @@ class TokenEditVM {
passwordCallback( passwordCallback(
context: context, context: context,
callback: (password) { callback: (password) {
final localization = AppLocalization.of(context);
final Completer<TokenEntity> completer = final Completer<TokenEntity> completer =
new Completer<TokenEntity>(); new Completer<TokenEntity>();
store.dispatch(SaveTokenRequest( store.dispatch(SaveTokenRequest(
completer: completer, token: token, password: password)); completer: completer, token: token, password: password));
return completer.future.then((savedToken) { return completer.future.then((savedToken) {
showToast(token.isNew
? localization.createdToken
: localization.updatedToken);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(TokenViewScreen.route)); store.dispatch(UpdateCurrentRoute(TokenViewScreen.route));
if (token.isNew) { if (token.isNew) {

View File

@ -2,10 +2,12 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/dialogs.dart'; import 'package:invoiceninja_flutter/utils/dialogs.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
@ -70,6 +72,7 @@ class UserEditVM {
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute)); store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<UserEntity> completer = new Completer<UserEntity>(); final Completer<UserEntity> completer = new Completer<UserEntity>();
passwordCallback( passwordCallback(
context: context, context: context,
@ -78,6 +81,9 @@ class UserEditVM {
completer: completer, user: user, password: password)); completer: completer, user: user, password: password));
}); });
return completer.future.then((savedUser) { return completer.future.then((savedUser) {
showToast(
user.isNew ? localization.createdUser : localization.updatedUser);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(UserViewScreen.route)); store.dispatch(UpdateCurrentRoute(UserViewScreen.route));
if (user.isNew) { if (user.isNew) {

View File

@ -3,6 +3,7 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/data/models/vendor_model.dart'; import 'package:invoiceninja_flutter/data/models/vendor_model.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
@ -80,9 +81,14 @@ class VendorEditVM {
}); });
return null; return null;
} }
final localization = AppLocalization.of(context);
final Completer<VendorEntity> completer = new Completer<VendorEntity>(); final Completer<VendorEntity> completer = new Completer<VendorEntity>();
store.dispatch(SaveVendorRequest(completer: completer, vendor: vendor)); store.dispatch(SaveVendorRequest(completer: completer, vendor: vendor));
return completer.future.then((savedVendor) { return completer.future.then((savedVendor) {
showToast(vendor.isNew
? localization.createdVendor
: localization.updatedVendor);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(VendorViewScreen.route)); store.dispatch(UpdateCurrentRoute(VendorViewScreen.route));
if (vendor.isNew && state.vendorUIState.saveCompleter == null) { if (vendor.isNew && state.vendorUIState.saveCompleter == null) {

View File

@ -2,10 +2,12 @@ import 'dart:async';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart'; import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
@ -71,11 +73,16 @@ class WebhookEditVM {
)); ));
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<WebhookEntity> completer = final Completer<WebhookEntity> completer =
new Completer<WebhookEntity>(); new Completer<WebhookEntity>();
store.dispatch( store.dispatch(
SaveWebhookRequest(completer: completer, webhook: webhook)); SaveWebhookRequest(completer: completer, webhook: webhook));
return completer.future.then((savedWebhook) { return completer.future.then((savedWebhook) {
showToast(webhook.isNew
? localization.createdWebhook
: localization.updatedWebhook);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(WebhookViewScreen.route)); store.dispatch(UpdateCurrentRoute(WebhookViewScreen.route));
if (webhook.isNew) { if (webhook.isNew) {

View File

@ -13,6 +13,8 @@ import 'package:invoiceninja_flutter/redux/stub/stub_actions.dart';
import 'package:invoiceninja_flutter/data/models/stub_model.dart'; import 'package:invoiceninja_flutter/data/models/stub_model.dart';
import 'package:invoiceninja_flutter/ui/stub/edit/stub_edit.dart'; import 'package:invoiceninja_flutter/ui/stub/edit/stub_edit.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
class StubEditScreen extends StatelessWidget { class StubEditScreen extends StatelessWidget {
const StubEditScreen({Key key}) : super(key: key); const StubEditScreen({Key key}) : super(key: key);
@ -65,9 +67,13 @@ class StubEditVM {
createEntity(context: context, entity: StubEntity(), force: true); createEntity(context: context, entity: StubEntity(), force: true);
}, },
onSavePressed: (BuildContext context) { onSavePressed: (BuildContext context) {
final localization = AppLocalization.of(context);
final Completer<StubEntity> completer = new Completer<StubEntity>(); final Completer<StubEntity> completer = new Completer<StubEntity>();
store.dispatch(SaveStubRequest(completer: completer, stub: stub)); store.dispatch(SaveStubRequest(completer: completer, stub: stub));
return completer.future.then((savedStub) { return completer.future.then((savedStub) {
showToast(stub.isNew
? localization.createdStub
: localization.updatedStub);
if (isMobile(context)) { if (isMobile(context)) {
store.dispatch(UpdateCurrentRoute(StubViewScreen.route)); store.dispatch(UpdateCurrentRoute(StubViewScreen.route));
if (stub.isNew) { if (stub.isNew) {