Settings
This commit is contained in:
parent
b2c7f942ea
commit
e3adf81e9d
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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}';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 ?? ''),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue