Null safety

This commit is contained in:
Hillel Coren 2023-09-22 13:53:19 +03:00
parent b17162ef25
commit a88f96e1f1
37 changed files with 131 additions and 165 deletions

View File

@ -234,10 +234,10 @@ Middleware<AppState> _createLoadState(
store.dispatch(LoadStateSuccess(appState)); store.dispatch(LoadStateSuccess(appState));
store.dispatch(RefreshData( store.dispatch(RefreshData(
completer: Completer<Null>() completer: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
AppBuilder.of(navigatorKey.currentContext!)!.rebuild(); AppBuilder.of(navigatorKey.currentContext!)!.rebuild();
store.dispatch(UpdatedSetting()); store.dispatch(UpdatedSetting());
} as FutureOr<Null> Function(Null)))); })));
if (uiState!.currentRoute != LoginScreen.route && if (uiState!.currentRoute != LoginScreen.route &&
uiState!.currentRoute.isNotEmpty) { uiState!.currentRoute.isNotEmpty) {

View File

@ -379,12 +379,12 @@ Middleware<AppState> _createCompany(AuthRepository repository) {
store.dispatch(RefreshData( store.dispatch(RefreshData(
allCompanies: true, allCompanies: true,
completer: Completer<Null>() completer: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(SelectCompany(companyIndex: state.companies.length)); store.dispatch(SelectCompany(companyIndex: state.companies.length));
store.dispatch(ViewDashboard(force: true)); store.dispatch(ViewDashboard(force: true));
action!.completer!.complete(); action!.completer!.complete();
} as FutureOr<Null> Function(Null)), }),
)); ));
}); });
@ -459,9 +459,9 @@ Middleware<AppState> _purgeData(AuthRepository repository) {
store.dispatch(RefreshData( store.dispatch(RefreshData(
clearData: true, clearData: true,
completer: Completer<Null>() completer: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
action.completer.complete(null); action.completer.complete(null);
} as FutureOr<Null> Function(Null)))); })));
}).catchError((Object error) { }).catchError((Object error) {
store.dispatch(PurgeDataFailure(error)); store.dispatch(PurgeDataFailure(error));
action.completer.completeError(error); action.completer.completeError(error);

View File

@ -309,9 +309,9 @@ void handleCompanyGatewayAction(BuildContext? context,
case EntityAction.disconnect: case EntityAction.disconnect:
final completer = final completer =
snackBarCompleter<Null>(context, localization!.disconnectedGateway); snackBarCompleter<Null>(context, localization!.disconnectedGateway);
completer.future.then<Null>(() { completer.future.then<Null>((_) {
store.dispatch(RefreshData()); store.dispatch(RefreshData());
} as FutureOr<Null> Function(Null)); });
confirmCallback( confirmCallback(
context: context, context: context,
callback: (_) { callback: (_) {

View File

@ -483,82 +483,67 @@ void handleDocumentAction(
context, AppLocalization.of(context)!.deletedDocument); context, AppLocalization.of(context)!.deletedDocument);
switch (document!.parentType) { switch (document!.parentType) {
case EntityType.client: case EntityType.client:
completer.future.then<Null>((() => store.dispatch( completer.future.then<Null>(((_) => store
LoadClient(clientId: document.parentId))) .dispatch(LoadClient(clientId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
case EntityType.credit: case EntityType.credit:
completer.future.then<Null>((() => store.dispatch( completer.future.then<Null>(((_) => store
LoadCredit(creditId: document.parentId))) .dispatch(LoadCredit(creditId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
case EntityType.expense: case EntityType.expense:
completer.future.then<Null>((() => store.dispatch( completer.future.then<Null>(((_) => store.dispatch(
LoadExpense(expenseId: document.parentId))) LoadExpense(expenseId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
case EntityType.group: case EntityType.group:
completer.future.then<Null>((() => store completer.future.then<Null>(((_) => store
.dispatch(LoadGroup(groupId: document.parentId))) .dispatch(LoadGroup(groupId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
case EntityType.invoice: case EntityType.invoice:
completer.future.then<Null>((() => store.dispatch( completer.future.then<Null>(((_) => store.dispatch(
LoadInvoice(invoiceId: document.parentId))) LoadInvoice(invoiceId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
case EntityType.product: case EntityType.product:
completer.future.then<Null>((() => store.dispatch( completer.future.then<Null>(((_) => store.dispatch(
LoadProduct(productId: document.parentId))) LoadProduct(productId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
case EntityType.project: case EntityType.project:
completer.future.then<Null>((() => store.dispatch( completer.future.then<Null>(((_) => store.dispatch(
LoadProject(projectId: document.parentId))) LoadProject(projectId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
case EntityType.purchaseOrder: case EntityType.purchaseOrder:
completer.future.then<Null>((() => store.dispatch( completer.future.then<Null>(((_) => store.dispatch(
LoadPurchaseOrder( LoadPurchaseOrder(
purchaseOrderId: document.parentId))) purchaseOrderId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
case EntityType.quote: case EntityType.quote:
completer.future.then<Null>((() => store completer.future.then<Null>(((_) => store
.dispatch(LoadQuote(quoteId: document.parentId))) .dispatch(LoadQuote(quoteId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
case EntityType.recurringExpense: case EntityType.recurringExpense:
completer.future.then<Null>((() => store.dispatch( completer.future.then<Null>(((_) => store.dispatch(
LoadRecurringExpense( LoadRecurringExpense(
recurringExpenseId: document.parentId))) recurringExpenseId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
case EntityType.recurringInvoice: case EntityType.recurringInvoice:
completer.future.then<Null>((() => store.dispatch( completer.future.then<Null>(((_) => store.dispatch(
LoadRecurringInvoice( LoadRecurringInvoice(
recurringInvoiceId: document.parentId))) recurringInvoiceId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
case EntityType.task: case EntityType.task:
completer.future.then<Null>((() => store completer.future.then<Null>(((_) =>
.dispatch(LoadTask(taskId: document.parentId))) store.dispatch(LoadTask(taskId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
case EntityType.vendor: case EntityType.vendor:
completer.future.then<Null>((() => store.dispatch( completer.future.then<Null>(((_) => store
LoadVendor(vendorId: document.parentId))) .dispatch(LoadVendor(vendorId: document.parentId))));
as FutureOr<Null> Function(Null));
break; break;
default: default:
completer.future.then<Null>((() => completer.future
store.dispatch(RefreshData())) .then<Null>(((_) => store.dispatch(RefreshData())));
as FutureOr<Null> Function(Null));
} }
completer.future.then<Null>((() => completer.future
store.dispatch(RefreshData())) .then<Null>(((_) => store.dispatch(RefreshData())));
as FutureOr<Null> Function(Null));
store.dispatch(DeleteDocumentRequest( store.dispatch(DeleteDocumentRequest(
completer: completer, completer: completer,
documentIds: [document.id], documentIds: [document.id],

View File

@ -90,11 +90,11 @@ class _DesktopSessionTimeoutState extends State<DesktopSessionTimeout> {
onPressed: () { onPressed: () {
final store = StoreProvider.of<AppState>(context); final store = StoreProvider.of<AppState>(context);
final completer = Completer<Null>(); final completer = Completer<Null>();
completer.future.then(() { completer.future.then<Null>((_) {
setState(() { setState(() {
_isWarned = false; _isWarned = false;
}); });
} as FutureOr<Null> Function(Null)); });
store.dispatch(RefreshData(completer: completer)); store.dispatch(RefreshData(completer: completer));
}, },
child: Text( child: Text(

View File

@ -88,9 +88,9 @@ class _HealthCheckDialogState extends State<HealthCheckDialog> {
webClient.get(url, credentials.token).then((dynamic response) { webClient.get(url, credentials.token).then((dynamic response) {
store.dispatch(RefreshData( store.dispatch(RefreshData(
completer: Completer<Null>() completer: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
runCheck(); runCheck();
} as FutureOr<Null> Function(Null)))); })));
}).catchError((dynamic error) { }).catchError((dynamic error) {
showErrorDialog(message: error); showErrorDialog(message: error);
}); });

View File

@ -261,9 +261,9 @@ class _HistoryListTileState extends State<HistoryListTile> {
entities: [entity], entities: [entity],
completer: state.prefState.isHistoryFloated completer: state.prefState.isHistoryFloated
? (Completer<Null>() ? (Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
Navigator.pop(context); Navigator.pop(context);
} as FutureOr<Null> Function(Null))) }))
: null, : null,
); );
}, },

View File

@ -140,9 +140,9 @@ class MenuDrawerVM {
final completer = snackBarCompleter<Null>( final completer = snackBarCompleter<Null>(
context, AppLocalization.of(context)!.addedCompany, context, AppLocalization.of(context)!.addedCompany,
shouldPop: true) shouldPop: true)
..future.then<Null>(() { ..future.then<Null>((_) {
AppBuilder.of(navigatorKey.currentContext!)!.rebuild(); AppBuilder.of(navigatorKey.currentContext!)!.rebuild();
} as FutureOr<Null> Function(Null)); });
store store
.dispatch(AddCompany(context: context, completer: completer)); .dispatch(AddCompany(context: context, completer: completer));

View File

@ -470,9 +470,8 @@ class _EntityListState extends State<EntityList> {
entities: entities, entities: entities,
multiselect: true, multiselect: true,
completer: Completer<Null>() completer: Completer<Null>()
..future.then<Null>((() => ..future.then<Null>(
widget.onClearMultiselect()) ((_) => widget.onClearMultiselect())),
as FutureOr<Null> Function(Null)),
); );
}, },
onCancelPressed: (_) => widget.onClearMultiselect(), onCancelPressed: (_) => widget.onClearMultiselect(),

View File

@ -184,13 +184,11 @@ class _LoginState extends State<LoginView> {
} }
final Completer<Null> completer = Completer<Null>(); final Completer<Null> completer = Completer<Null>();
completer.future completer.future.then<Null>((_) {
.then<Null>(() {
setState(() { setState(() {
_loginError = ''; _loginError = '';
}); });
} as FutureOr<Null> Function(Null)) }).catchError((Object error) {
.catchError((Object error) {
setState(() { setState(() {
_buttonController.reset(); _buttonController.reset();
_loginError = error.toString(); _loginError = error.toString();

View File

@ -184,8 +184,8 @@ class LoginVM {
provider: UserEntity.OAUTH_PROVIDER_GOOGLE, provider: UserEntity.OAUTH_PROVIDER_GOOGLE,
oneTimePassword: oneTimePassword, oneTimePassword: oneTimePassword,
)); ));
completer.future.then<Null>((() => _handleLogin(context: context)) completer.future
as FutureOr<Null> Function(Null)); .then<Null>(((_) => _handleLogin(context: context)));
} }
}); });
if (!signedIn) { if (!signedIn) {
@ -215,9 +215,8 @@ class LoginVM {
accessToken: accessToken, accessToken: accessToken,
provider: UserEntity.OAUTH_PROVIDER_GOOGLE, provider: UserEntity.OAUTH_PROVIDER_GOOGLE,
)); ));
completer.future.then<Null>((() => completer.future.then<Null>(
_handleLogin(context: context, isSignUp: true)) ((_) => _handleLogin(context: context, isSignUp: true)));
as FutureOr<Null> Function(Null));
} }
}); });
if (!signedIn) { if (!signedIn) {
@ -249,8 +248,8 @@ class LoginVM {
provider: UserEntity.OAUTH_PROVIDER_MICROSOFT, provider: UserEntity.OAUTH_PROVIDER_MICROSOFT,
oneTimePassword: oneTimePassword, oneTimePassword: oneTimePassword,
)); ));
completer.future.then<Null>((() => _handleLogin(context: context)) completer.future
as FutureOr<Null> Function(Null)); .then<Null>(((_) => _handleLogin(context: context)));
}, (dynamic error) { }, (dynamic error) {
completer.completeError(error); completer.completeError(error);
}); });
@ -270,9 +269,8 @@ class LoginVM {
provider: UserEntity.OAUTH_PROVIDER_MICROSOFT, provider: UserEntity.OAUTH_PROVIDER_MICROSOFT,
accessToken: accessToken, accessToken: accessToken,
)); ));
completer.future.then<Null>((() => completer.future.then<Null>(
_handleLogin(context: context, isSignUp: true)) ((_) => _handleLogin(context: context, isSignUp: true)));
as FutureOr<Null> Function(Null));
}, (dynamic error) { }, (dynamic error) {
completer.completeError(error); completer.completeError(error);
}); });
@ -311,8 +309,7 @@ class LoginVM {
authCode: credentials.authorizationCode, authCode: credentials.authorizationCode,
idToken: credentials.identityToken, idToken: credentials.identityToken,
)); ));
completer.future.then<Null>((() => _handleLogin(context: context)) completer.future.then<Null>(((_) => _handleLogin(context: context)));
as FutureOr<Null> Function(Null));
} catch (error) { } catch (error) {
completer.completeError(error); completer.completeError(error);
print('## onAppleLoginPressed: $error'); print('## onAppleLoginPressed: $error');
@ -340,9 +337,8 @@ class LoginVM {
firstName: credentials.givenName, firstName: credentials.givenName,
lastName: credentials.familyName, lastName: credentials.familyName,
)); ));
completer.future.then<Null>((() => completer.future.then<Null>(
_handleLogin(context: context, isSignUp: true)) ((_) => _handleLogin(context: context, isSignUp: true)));
as FutureOr<Null> Function(Null));
} catch (error) { } catch (error) {
completer.completeError(error); completer.completeError(error);
print('## onAppleSignUpPressed: $error'); print('## onAppleSignUpPressed: $error');
@ -363,9 +359,8 @@ class LoginVM {
email: email.trim(), email: email.trim(),
password: password.trim(), password: password.trim(),
)); ));
completer.future.then<Null>((() => completer.future.then<Null>(
_handleLogin(context: context, isSignUp: true)) ((_) => _handleLogin(context: context, isSignUp: true)));
as FutureOr<Null> Function(Null));
}, },
onRecoverPressed: ( onRecoverPressed: (
BuildContext context, BuildContext context,

View File

@ -72,9 +72,8 @@ class CompanyGatewayScreen extends StatelessWidget {
entities: companyGateways, entities: companyGateways,
multiselect: true, multiselect: true,
completer: Completer<Null>() completer: Completer<Null>()
..future.then<Null>((() => store ..future.then<Null>(((_) =>
.dispatch(ClearCompanyGatewayMultiselect())) store.dispatch(ClearCompanyGatewayMultiselect()))),
as FutureOr<Null> Function(Null)),
); );
}, },
onCancelPressed: (context) => onCancelPressed: (context) =>

View File

@ -92,9 +92,9 @@ class EmailCreditVM extends EmailEntityVM {
context, AppLocalization.of(context)!.emailedCredit, context, AppLocalization.of(context)!.emailedCredit,
shouldPop: isMobile(context)); shouldPop: isMobile(context));
if (!isMobile(context)) { if (!isMobile(context)) {
completer.future.then<Null>(() { completer.future.then<Null>((_) {
viewEntity(entity: credit); viewEntity(entity: credit);
} as FutureOr<Null> Function(Null)); });
} }
store.dispatch(EmailCreditRequest( store.dispatch(EmailCreditRequest(
completer: completer, completer: completer,

View File

@ -103,9 +103,9 @@ class CreditEditDetailsVM extends EntityEditDetailsVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(UpdateCurrentRoute(CreditEditScreen.route)); store.dispatch(UpdateCurrentRoute(CreditEditScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity client) { completer.future.then((SelectableEntity client) {
store.dispatch(UpdateCurrentRoute(CreditEditScreen.route)); store.dispatch(UpdateCurrentRoute(CreditEditScreen.route));
}); });

View File

@ -120,9 +120,9 @@ class ExpenseEditVM extends AbstractExpenseEditVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(UpdateCurrentRoute(ExpenseEditScreen.route)); store.dispatch(UpdateCurrentRoute(ExpenseEditScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity client) { completer.future.then((SelectableEntity client) {
store.dispatch(UpdateCurrentRoute(ExpenseEditScreen.route)); store.dispatch(UpdateCurrentRoute(ExpenseEditScreen.route));
}); });
@ -134,9 +134,9 @@ class ExpenseEditVM extends AbstractExpenseEditVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(UpdateCurrentRoute(ExpenseEditScreen.route)); store.dispatch(UpdateCurrentRoute(ExpenseEditScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity expense) { completer.future.then((SelectableEntity expense) {
store.dispatch(UpdateCurrentRoute(ExpenseEditScreen.route)); store.dispatch(UpdateCurrentRoute(ExpenseEditScreen.route));
}); });

View File

@ -131,9 +131,9 @@ class InvoiceEditDetailsVM extends EntityEditDetailsVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(UpdateCurrentRoute(InvoiceEditScreen.route)); store.dispatch(UpdateCurrentRoute(InvoiceEditScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity client) { completer.future.then((SelectableEntity client) {
store.dispatch(UpdateCurrentRoute(InvoiceEditScreen.route)); store.dispatch(UpdateCurrentRoute(InvoiceEditScreen.route));
}); });

View File

@ -113,9 +113,9 @@ class EmailInvoiceVM extends EmailEntityVM {
context, AppLocalization.of(context)!.emailedInvoice, context, AppLocalization.of(context)!.emailedInvoice,
shouldPop: isMobile(context)); shouldPop: isMobile(context));
if (!isMobile(context)) { if (!isMobile(context)) {
completer.future.then<Null>(() { completer.future.then<Null>((_) {
viewEntity(entity: invoice); viewEntity(entity: invoice);
} as FutureOr<Null> Function(Null)); });
} }
store.dispatch(EmailInvoiceRequest( store.dispatch(EmailInvoiceRequest(
completer: completer, completer: completer,

View File

@ -88,9 +88,9 @@ class ProjectEditVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(UpdateCurrentRoute(ProjectEditScreen.route)); store.dispatch(UpdateCurrentRoute(ProjectEditScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity client) { completer.future.then((SelectableEntity client) {
store.dispatch(UpdateCurrentRoute(ProjectEditScreen.route)); store.dispatch(UpdateCurrentRoute(ProjectEditScreen.route));
}); });

View File

@ -102,10 +102,10 @@ class PurchaseOrderEditDetailsVM extends EntityEditDetailsVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch( store.dispatch(
UpdateCurrentRoute(PurchaseOrderEditScreen.route)); UpdateCurrentRoute(PurchaseOrderEditScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity client) { completer.future.then((SelectableEntity client) {
store.dispatch(UpdateCurrentRoute(PurchaseOrderEditScreen.route)); store.dispatch(UpdateCurrentRoute(PurchaseOrderEditScreen.route));
}); });

View File

@ -90,9 +90,9 @@ class EmailPurchaseOrderVM extends EmailEntityVM {
context, AppLocalization.of(context)!.emailedPurchaseOrder, context, AppLocalization.of(context)!.emailedPurchaseOrder,
shouldPop: isMobile(context)); shouldPop: isMobile(context));
if (!isMobile(context)) { if (!isMobile(context)) {
completer.future.then<Null>(() { completer.future.then<Null>((_) {
viewEntity(entity: purchaseOrder); viewEntity(entity: purchaseOrder);
} as FutureOr<Null> Function(Null)); });
} }
store.dispatch(EmailPurchaseOrderRequest( store.dispatch(EmailPurchaseOrderRequest(
completer: completer, completer: completer,

View File

@ -102,9 +102,9 @@ class QuoteEditDetailsVM extends EntityEditDetailsVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(UpdateCurrentRoute(QuoteEditScreen.route)); store.dispatch(UpdateCurrentRoute(QuoteEditScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity client) { completer.future.then((SelectableEntity client) {
store.dispatch(UpdateCurrentRoute(QuoteEditScreen.route)); store.dispatch(UpdateCurrentRoute(QuoteEditScreen.route));
}); });

View File

@ -89,9 +89,9 @@ class EmailQuoteVM extends EmailEntityVM {
context, AppLocalization.of(context)!.emailedQuote, context, AppLocalization.of(context)!.emailedQuote,
shouldPop: isMobile(context)); shouldPop: isMobile(context));
if (!isMobile(context)) { if (!isMobile(context)) {
completer.future.then<Null>(() { completer.future.then<Null>((_) {
viewEntity(entity: quote); viewEntity(entity: quote);
} as FutureOr<Null> Function(Null)); });
} }
store.dispatch(EmailQuoteRequest( store.dispatch(EmailQuoteRequest(
completer: completer, completer: completer,

View File

@ -90,10 +90,10 @@ class RecurringExpenseEditVM extends AbstractExpenseEditVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch( store.dispatch(
UpdateCurrentRoute(RecurringExpenseEditScreen.route)); UpdateCurrentRoute(RecurringExpenseEditScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity client) { completer.future.then((SelectableEntity client) {
store.dispatch(UpdateCurrentRoute(RecurringExpenseEditScreen.route)); store.dispatch(UpdateCurrentRoute(RecurringExpenseEditScreen.route));
}); });
@ -105,10 +105,10 @@ class RecurringExpenseEditVM extends AbstractExpenseEditVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch( store.dispatch(
UpdateCurrentRoute(RecurringExpenseEditScreen.route)); UpdateCurrentRoute(RecurringExpenseEditScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity expense) { completer.future.then((SelectableEntity expense) {
store.dispatch(UpdateCurrentRoute(RecurringExpenseEditScreen.route)); store.dispatch(UpdateCurrentRoute(RecurringExpenseEditScreen.route));
}); });

View File

@ -105,10 +105,10 @@ class RecurringInvoiceEditDetailsVM extends EntityEditDetailsVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch( store.dispatch(
UpdateCurrentRoute(RecurringInvoiceEditScreen.route)); UpdateCurrentRoute(RecurringInvoiceEditScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity client) { completer.future.then((SelectableEntity client) {
store.dispatch(UpdateCurrentRoute(RecurringInvoiceEditScreen.route)); store.dispatch(UpdateCurrentRoute(RecurringInvoiceEditScreen.route));
}); });

View File

@ -73,8 +73,7 @@ class AccountManagementVM {
final companyLength = state.companies.length; final companyLength = state.companies.length;
final deleteCompleter = Completer<Null>() final deleteCompleter = Completer<Null>()
..future ..future.then<Null>((_) {
.then<Null>(() {
final context = navigatorKey.currentContext; final context = navigatorKey.currentContext;
final state = store.state; final state = store.state;
if (companyLength == 1) { if (companyLength == 1) {
@ -87,7 +86,7 @@ class AccountManagementVM {
final index = selectedCompanyIndex == 0 ? 1 : 0; final index = selectedCompanyIndex == 0 ? 1 : 0;
store.dispatch(SelectCompany(companyIndex: index)); store.dispatch(SelectCompany(companyIndex: index));
final refreshCompleter = Completer<Null>() final refreshCompleter = Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(SelectCompany(companyIndex: 0)); store.dispatch(SelectCompany(companyIndex: 0));
store.dispatch(ViewDashboard()); store.dispatch(ViewDashboard());
AppBuilder.of(navigatorKey.currentContext!)!.rebuild(); AppBuilder.of(navigatorKey.currentContext!)!.rebuild();
@ -95,12 +94,11 @@ class AccountManagementVM {
if (Navigator.of(context!).canPop()) { if (Navigator.of(context!).canPop()) {
Navigator.of(context).pop(); Navigator.of(context).pop();
} }
} as FutureOr<Null> Function(Null)); });
store.dispatch( store.dispatch(
RefreshData(clearData: true, completer: refreshCompleter)); RefreshData(clearData: true, completer: refreshCompleter));
} }
} as FutureOr<Null> Function(Null)) }).catchError((Object error) {
.catchError((Object error) {
if (Navigator.of(navigatorKey.currentContext!).canPop()) { if (Navigator.of(navigatorKey.currentContext!).canPop()) {
Navigator.of(navigatorKey.currentContext!).pop(); Navigator.of(navigatorKey.currentContext!).pop();
} }

View File

@ -82,10 +82,10 @@ class ClientPortalVM {
final oldSubdomain = state.company!.subdomain; final oldSubdomain = state.company!.subdomain;
final newSubdomain = settingsUIState.company.subdomain; final newSubdomain = settingsUIState.company.subdomain;
if (oldSubdomain != newSubdomain) { if (oldSubdomain != newSubdomain) {
completer.future.then<Null>(() { completer.future.then<Null>((_) {
showRefreshDataDialog( showRefreshDataDialog(
context: navigatorKey.currentContext!); context: navigatorKey.currentContext!);
} as FutureOr<Null> Function(Null)); });
} }
store.dispatch(SaveCompanyRequest( store.dispatch(SaveCompanyRequest(

View File

@ -83,7 +83,7 @@ class InvoiceDesignVM {
case EntityType.company: case EntityType.company:
final completer = snackBarCompleter<Null>( final completer = snackBarCompleter<Null>(
context, AppLocalization.of(context)!.savedSettings) context, AppLocalization.of(context)!.savedSettings)
..future.then<Null>(() { ..future.then<Null>((_) {
final webClient = WebClient(); final webClient = WebClient();
final credentials = state.credentials; final credentials = state.credentials;
final url = '${credentials.url}/designs/set/default'; final url = '${credentials.url}/designs/set/default';
@ -106,7 +106,7 @@ class InvoiceDesignVM {
showErrorDialog(message: '$error'); showErrorDialog(message: '$error');
}); });
}); });
} as FutureOr<Null> Function(Null)); });
store.dispatch(SaveCompanyRequest( store.dispatch(SaveCompanyRequest(
completer: completer, company: settingsUIState.company)); completer: completer, company: settingsUIState.company));
break; break;

View File

@ -75,14 +75,14 @@ class LocalizationSettingsVM {
final appBuilder = AppBuilder.of(context); final appBuilder = AppBuilder.of(context);
final completer = snackBarCompleter<Null>( final completer = snackBarCompleter<Null>(
context, AppLocalization.of(context)!.savedSettings) context, AppLocalization.of(context)!.savedSettings)
..future.then<Null>(() { ..future.then<Null>((_) {
appBuilder!.rebuild(); appBuilder!.rebuild();
store.dispatch(RefreshData( store.dispatch(RefreshData(
includeStatic: true, includeStatic: true,
completer: Completer<dynamic>() completer: Completer<dynamic>()
..future ..future
.then((dynamic value) => appBuilder.rebuild()))); .then((dynamic value) => appBuilder.rebuild())));
} as FutureOr<Null> Function(Null)); });
store.dispatch(SaveCompanyRequest( store.dispatch(SaveCompanyRequest(
completer: completer, company: settingsUIState.company)); completer: completer, company: settingsUIState.company));
break; break;

View File

@ -146,18 +146,15 @@ class _SettingsWizardState extends State<SettingsWizard> {
callback: (password, idToken) { callback: (password, idToken) {
final localization = AppLocalization.of(context); final localization = AppLocalization.of(context);
final completer = Completer<Null>(); final completer = Completer<Null>();
completer.future completer.future.then<Null>((_) {
.then<Null>(() {
final toastCompleter = final toastCompleter =
snackBarCompleter<Null>(context, localization!.savedSettings); snackBarCompleter<Null>(context, localization!.savedSettings);
toastCompleter.future toastCompleter.future.then<Null>((_) {
.then<Null>(() {
setState(() { setState(() {
_isSaving = false; _isSaving = false;
_showLogo = true; _showLogo = true;
}); });
} as FutureOr<Null> Function(Null)) }).catchError((Object error) {
.catchError((Object error) {
setState(() { setState(() {
_isSaving = false; _isSaving = false;
}); });
@ -174,8 +171,7 @@ class _SettingsWizardState extends State<SettingsWizard> {
), ),
), ),
); );
} as FutureOr<Null> Function(Null)) }).catchError((Object error) {
.catchError((Object error) {
setState(() => _isSaving = false); setState(() => _isSaving = false);
}); });

View File

@ -96,8 +96,7 @@ class TemplatesAndRemindersVM {
case EntityType.company: case EntityType.company:
final completer = snackBarCompleter<Null>( final completer = snackBarCompleter<Null>(
context, AppLocalization.of(context)!.savedSettings); context, AppLocalization.of(context)!.savedSettings);
completer.future.then<Null>( completer.future.then<Null>(((_) => callback()));
(() => callback()) as FutureOr<Null> Function(Null));
store.dispatch(SaveCompanyRequest( store.dispatch(SaveCompanyRequest(
completer: completer, company: settingsUIState.company)); completer: completer, company: settingsUIState.company));
break; break;

View File

@ -176,9 +176,9 @@ class UserDetailsVM {
callback: (password, idToken) { callback: (password, idToken) {
final completer = snackBarCompleter<Null>(context, final completer = snackBarCompleter<Null>(context,
AppLocalization.of(context)!.disconnectedGoogle); AppLocalization.of(context)!.disconnectedGoogle);
completer.future.then<Null>(() { completer.future.then<Null>((_) {
GoogleOAuth.disconnect(); GoogleOAuth.disconnect();
} as FutureOr<Null> Function(Null)); });
store.dispatch( store.dispatch(
DisconnecOAuthUserRequest( DisconnecOAuthUserRequest(
user: state.user, user: state.user,
@ -315,7 +315,7 @@ class UserDetailsVM {
final appBuilder = AppBuilder.of(context); final appBuilder = AppBuilder.of(context);
final origUserSettings = state.userCompany!.settings; final origUserSettings = state.userCompany!.settings;
completer.future.then<Null>(() async { completer.future.then<Null>((_) async {
final newUserSettings = store.state.userCompany!.settings!; final newUserSettings = store.state.userCompany!.settings!;
if (origUserSettings!.includeDeletedClients != if (origUserSettings!.includeDeletedClients !=
newUserSettings.includeDeletedClients || newUserSettings.includeDeletedClients ||
@ -338,7 +338,7 @@ class UserDetailsVM {
} }
appBuilder!.rebuild(); appBuilder!.rebuild();
} as FutureOr<Null> Function(Null)); });
confirmCallback( confirmCallback(
context: context, context: context,

View File

@ -82,9 +82,9 @@ class TaskEditDetailsVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(UpdateCurrentRoute(TaskEditDetailsScreen.route)); store.dispatch(UpdateCurrentRoute(TaskEditDetailsScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity client) { completer.future.then((SelectableEntity client) {
store.dispatch(UpdateCurrentRoute(TaskEditDetailsScreen.route)); store.dispatch(UpdateCurrentRoute(TaskEditDetailsScreen.route));
}); });
@ -107,9 +107,9 @@ class TaskEditDetailsVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(UpdateCurrentRoute(TaskEditDetailsScreen.route)); store.dispatch(UpdateCurrentRoute(TaskEditDetailsScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity client) { completer.future.then((SelectableEntity client) {
store.dispatch(UpdateCurrentRoute(TaskEditDetailsScreen.route)); store.dispatch(UpdateCurrentRoute(TaskEditDetailsScreen.route));
}); });

View File

@ -78,9 +78,8 @@ class TaskStatusScreen extends StatelessWidget {
entities: taskStatusIds, entities: taskStatusIds,
multiselect: true, multiselect: true,
completer: Completer<Null>() completer: Completer<Null>()
..future.then<Null>((() => ..future.then<Null>(
store.dispatch(ClearTaskStatusMultiselect())) ((_) => store.dispatch(ClearTaskStatusMultiselect()))),
as FutureOr<Null> Function(Null)),
); );
}, },
label: localization!.actions, label: localization!.actions,

View File

@ -110,9 +110,9 @@ class TransactionEditVM {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(UpdateCurrentRoute(TransactionEditScreen.route)); store.dispatch(UpdateCurrentRoute(TransactionEditScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity client) { completer.future.then((SelectableEntity client) {
store.dispatch(UpdateCurrentRoute(TransactionEditScreen.route)); store.dispatch(UpdateCurrentRoute(TransactionEditScreen.route));
}); });

View File

@ -1109,10 +1109,10 @@ class _MatchWithdrawalsState extends State<_MatchWithdrawals> {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(UpdateCurrentRoute( store.dispatch(UpdateCurrentRoute(
TransactionScreen.route)); TransactionScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity vendor) { completer.future.then((SelectableEntity vendor) {
store.dispatch(SaveTransactionSuccess(transaction store.dispatch(SaveTransactionSuccess(transaction
.rebuild((b) => b..pendingVendorId = vendor.id))); .rebuild((b) => b..pendingVendorId = vendor.id)));
@ -1193,10 +1193,10 @@ class _MatchWithdrawalsState extends State<_MatchWithdrawals> {
force: true, force: true,
completer: completer, completer: completer,
cancelCompleter: Completer<Null>() cancelCompleter: Completer<Null>()
..future.then<Null>(() { ..future.then<Null>((_) {
store.dispatch(UpdateCurrentRoute( store.dispatch(UpdateCurrentRoute(
TransactionScreen.route)); TransactionScreen.route));
} as FutureOr<Null> Function(Null))); }));
completer.future.then((SelectableEntity category) { completer.future.then((SelectableEntity category) {
store.dispatch(SaveTransactionSuccess( store.dispatch(SaveTransactionSuccess(
transaction.rebuild( transaction.rebuild(

View File

@ -118,14 +118,14 @@ class TransactionViewVM {
ConvertTransactionsToExpensesRequest( ConvertTransactionsToExpensesRequest(
snackBarCompleter<Null>( snackBarCompleter<Null>(
context, AppLocalization.of(context)!.convertedTransaction) context, AppLocalization.of(context)!.convertedTransaction)
..future.then<Null>(() { ..future.then<Null>((_) {
if (state.transactionListState.isInMultiselect()) { if (state.transactionListState.isInMultiselect()) {
store.dispatch(ClearTransactionMultiselect()); store.dispatch(ClearTransactionMultiselect());
if (store.state.prefState.isPreviewVisible) { if (store.state.prefState.isPreviewVisible) {
store.dispatch(TogglePreviewSidebar()); store.dispatch(TogglePreviewSidebar());
} }
} }
} as FutureOr<Null> Function(Null)), }),
transactionIds, transactionIds,
vendorId, vendorId,
categoryId, categoryId,

View File

@ -46,11 +46,9 @@ Completer<T> snackBarCompleter<T>(
Completer<Null> popCompleter(BuildContext context, dynamic result) { Completer<Null> popCompleter(BuildContext context, dynamic result) {
final Completer<Null> completer = Completer<Null>(); final Completer<Null> completer = Completer<Null>();
completer.future completer.future.then<Null>((_) {
.then<Null>(() {
Navigator.of(context).pop<dynamic>(result); Navigator.of(context).pop<dynamic>(result);
} as FutureOr<Null> Function(Null)) }).catchError((Object error) {
.catchError((Object error) {
showDialog<ErrorDialog>( showDialog<ErrorDialog>(
context: navigatorKey.currentContext!, context: navigatorKey.currentContext!,
builder: (BuildContext context) { builder: (BuildContext context) {