import 'package:invoiceninja_flutter/data/repositories/settings_repository.dart'; import 'package:invoiceninja_flutter/redux/app/app_middleware.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/ui/settings/settings_screen.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; import 'package:redux/redux.dart'; import 'package:flutter/material.dart'; List> createStoreSettingsMiddleware([ SettingsRepository repository = const SettingsRepository(), ]) { final viewSettings = _viewSettings(); final saveSettings = _saveSettings(repository); return [ TypedMiddleware(viewSettings), TypedMiddleware(saveSettings), ]; } Middleware _viewSettings() { return (Store store, dynamic dynamicAction, NextDispatcher next) { final action = dynamicAction as ViewSettings; if (hasChanges( store: store, context: action.context, force: action.force)) { return; } next(action); store.dispatch(UpdateCurrentRoute(SettingsScreen.route + (action.section != null ? '/${action.section}' : '/company_details'))); if (isMobile(action.context)) { Navigator.of(action.context).pushNamedAndRemoveUntil( SettingsScreen.route, (Route route) => false); } }; } Middleware _saveSettings(SettingsRepository settingsRepository) { return (Store store, dynamic dynamicAction, NextDispatcher next) { final action = dynamicAction as SaveSettingsRequest; settingsRepository .saveData(store.state.credentials, action.settings) .then((response) { print('Done: $response'); }).catchError((Object error) { print(error); store.dispatch(SaveSettingsFailure(error)); action.completer.completeError(error); }); next(action); }; }