This commit is contained in:
Hillel Coren 2019-10-04 12:16:32 +03:00
parent b2c7f942ea
commit e3adf81e9d
6 changed files with 27 additions and 10 deletions

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
// This version must be updated in tandem with the pubspec version.
const String kAppVersion = '2.0.1';
const String kAppVersion = '2.0.2';
const String kSiteUrl = 'https://invoiceninja.com';
const String kAppUrl = 'https://admin.invoiceninja.com';
const String kAppPlansURL =
@ -117,8 +117,8 @@ const List<String> kSettingsSections = [
kSettingsBuyNowButtons,
kSettingsEmailSettings,
kSettingsTemplatesAndReminders,
//kSettingsCreditCardsAndBanks,
//kSettingsDataVisualizations,
kSettingsCreditCardsAndBanks,
kSettingsDataVisualizations,
];
const int kPaymentStatusPending = 1;

View File

@ -289,7 +289,7 @@ abstract class AppState implements Built<AppState, AppStateBuilder> {
String toString() {
//return 'Settings: ${selectedCompanyState.company.settings}';
//return 'URL: ${authState.url}, ${selectedCompany.plan}';
return 'Route: ${uiState.currentRoute}, size: ${selectedCompany.sizeId}/${uiState.settingsUIState.editing.company.sizeId}, country: ${selectedCompany.countryId}/${uiState.settingsUIState.editing.company.countryId} updatedAt: ${settingsUIState.updatedAt}';
return 'Route: ${uiState.currentRoute}, settings isChanged: ${uiState.settingsUIState.isChanged}';
//return 'Route: ${uiState.currentRoute}, Previous: ${uiState.previousRoute}, Layout: ${uiState.layout}, Menu: ${uiState.isMenuVisible}, History: ${uiState.isHistoryVisible}';
}
}

View File

@ -144,7 +144,9 @@ class SettingsScreens extends StatelessWidget {
final state = store.state;
final uiState = state.uiState;
final subRoute = uiState.subRoute;
final index = kSettingsSections.indexOf(subRoute);
final index = subRoute.isEmpty
? kSettingsSections.length
: kSettingsSections.indexOf(subRoute);
return Row(
children: <Widget>[
@ -175,6 +177,7 @@ class SettingsScreens extends StatelessWidget {
TemplatesAndRemindersBuilder(),
CreditCardsAndBanksBuilder(),
DataVisualizationsBuilder(),
BlankScreen(),
],
),
),
@ -218,7 +221,7 @@ class EntityScreens extends StatelessWidget {
children: <Widget>[
(entityUIState.selectedId ?? '').isNotEmpty
? viewWidget
: BlankScreen(),
: BlankScreen(AppLocalization.of(context).noRecordSelected),
editWidget,
],
),
@ -229,11 +232,14 @@ class EntityScreens extends StatelessWidget {
}
class BlankScreen extends StatelessWidget {
const BlankScreen([this.message]);
final String message;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: HelpText(AppLocalization.of(context).noRecordSelected),
body: HelpText(message ?? ''),
);
}
}

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
import 'package:invoiceninja_flutter/ui/app/buttons/action_icon_button.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
@ -23,7 +24,8 @@ class SettingsScaffold extends StatelessWidget {
@override
Widget build(BuildContext context) {
final localization = AppLocalization.of(context);
final state = StoreProvider.of<AppState>(context).state;
final store = StoreProvider.of<AppState>(context);
final state = store.state;
return WillPopScope(
onWillPop: () async {
@ -44,6 +46,12 @@ class SettingsScaffold extends StatelessWidget {
),
onPressed: () {
FocusScope.of(context).requestFocus(FocusNode());
store.dispatch(ViewSettings(
context: context,
userCompany: state.userCompany,
section: '',
force: true,
));
onCancelPressed(context);
},
);

View File

@ -64,13 +64,13 @@ class _UserDetailsState extends State<UserDetails> {
}
void _onChanged() {
final user = widget.viewModel.state.user.rebuild((b) => b
final user = widget.viewModel.user.rebuild((b) => b
..firstName = _firstNameController.text.trim()
..lastName = _lastNameController.text.trim()
..email = _emailController.text.trim()
//..firstName = _firstNameController.text.trim()
);
if (user != widget.viewModel.state.user) {
if (user != widget.viewModel.user) {
widget.viewModel.onChanged(user);
}
}

View File

@ -27,6 +27,7 @@ class UserDetailsBuilder extends StatelessWidget {
class UserDetailsVM {
UserDetailsVM({
@required this.user,
@required this.state,
@required this.onChanged,
@required this.onSavePressed,
@ -38,6 +39,7 @@ class UserDetailsVM {
return UserDetailsVM(
state: state,
user: state.uiState.settingsUIState.editing.user,
onChanged: (user) => store.dispatch(UpdateUserSettings(user: user)),
onCancelPressed: (context) =>
store.dispatch(ResetUserSettings(user: state.user)),
@ -51,6 +53,7 @@ class UserDetailsVM {
}
final AppState state;
final UserEntity user;
final Function(UserEntity) onChanged;
final Function(BuildContext) onSavePressed;
final Function(BuildContext) onCancelPressed;