Refactor
This commit is contained in:
parent
0807099c79
commit
34f15aaedc
|
|
@ -208,10 +208,7 @@ abstract class PaymentEntity extends Object
|
|||
}
|
||||
|
||||
@override
|
||||
String get listDisplayName {
|
||||
// TODO change to payment number
|
||||
return id;
|
||||
}
|
||||
String get listDisplayName => number ?? '';
|
||||
|
||||
@override
|
||||
double get listDisplayAmount => amount;
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ class HistoryDrawer extends StatelessWidget {
|
|||
if (state.prefState.isHistoryFloated)
|
||||
Builder(
|
||||
builder: (context) => IconButton(
|
||||
icon: Icon(Icons.menu),
|
||||
icon: Icon(Icons.close),
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/lists/activity_list_tile.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/templates_and_reminders.dart';
|
||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
|
@ -263,7 +263,7 @@ class _InvoiceEmailViewState extends State<InvoiceEmailView>
|
|||
|
||||
return DefaultTabController(
|
||||
length: 3,
|
||||
child: SettingsScaffold(
|
||||
child: EditScaffold(
|
||||
title: localization.sendEmail,
|
||||
onCancelPressed: (context) =>
|
||||
viewEntity(context: context, entity: widget.viewModel.invoice),
|
||||
|
|
|
|||
|
|
@ -7,9 +7,8 @@ import 'package:invoiceninja_flutter/ui/client/edit/client_edit_notes.dart';
|
|||
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_settings.dart';
|
||||
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_shipping_address.dart';
|
||||
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/buttons/action_flat_button.dart';
|
||||
import 'package:invoiceninja_flutter/utils/platforms.dart';
|
||||
|
||||
class ClientEdit extends StatefulWidget {
|
||||
const ClientEdit({
|
||||
|
|
@ -47,87 +46,62 @@ class _ClientEditState extends State<ClientEdit>
|
|||
final viewModel = widget.viewModel;
|
||||
final client = viewModel.client;
|
||||
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
viewModel.onBackPressed();
|
||||
return true;
|
||||
return EditScaffold(
|
||||
title: client.isNew ? localization.newClient : localization.editClient,
|
||||
onCancelPressed: (context) => viewModel.onCancelPressed(context),
|
||||
onSavePressed: (context) {
|
||||
if (!_formKey.currentState.validate()) {
|
||||
return;
|
||||
}
|
||||
viewModel.onSavePressed(context);
|
||||
},
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
automaticallyImplyLeading: isMobile(context),
|
||||
title: Text(
|
||||
client.isNew ? localization.newClient : localization.editClient),
|
||||
actions: <Widget>[
|
||||
if (!isMobile(context))
|
||||
FlatButton(
|
||||
child: Text(
|
||||
localization.cancel,
|
||||
style: TextStyle(color: Colors.white),
|
||||
),
|
||||
onPressed: () => viewModel.onCancelPressed(context),
|
||||
),
|
||||
ActionFlatButton(
|
||||
tooltip: localization.save,
|
||||
isVisible: !client.isDeleted,
|
||||
isDirty: client.isNew || client != viewModel.origClient,
|
||||
isSaving: viewModel.isSaving,
|
||||
onPressed: () {
|
||||
if (!_formKey.currentState.validate()) {
|
||||
return;
|
||||
}
|
||||
viewModel.onSavePressed(context);
|
||||
},
|
||||
)
|
||||
appBarBottom: TabBar(
|
||||
controller: _controller,
|
||||
isScrollable: true,
|
||||
tabs: [
|
||||
Tab(
|
||||
text: localization.details,
|
||||
),
|
||||
Tab(
|
||||
text: localization.contacts,
|
||||
),
|
||||
Tab(
|
||||
text: localization.notes,
|
||||
),
|
||||
Tab(
|
||||
text: localization.settings,
|
||||
),
|
||||
Tab(
|
||||
text: localization.billingAddress,
|
||||
),
|
||||
Tab(
|
||||
text: localization.shippingAddress,
|
||||
),
|
||||
],
|
||||
),
|
||||
body: Form(
|
||||
key: _formKey,
|
||||
child: TabBarView(
|
||||
key: ValueKey(viewModel.client.id),
|
||||
controller: _controller,
|
||||
children: <Widget>[
|
||||
ClientEditDetails(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
ClientEditContactsScreen(),
|
||||
ClientEditNotes(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
ClientEditSettings(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
ClientEditBillingAddress(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
ClientEditShippingAddress(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
],
|
||||
bottom: TabBar(
|
||||
controller: _controller,
|
||||
isScrollable: true,
|
||||
tabs: [
|
||||
Tab(
|
||||
text: localization.details,
|
||||
),
|
||||
Tab(
|
||||
text: localization.contacts,
|
||||
),
|
||||
Tab(
|
||||
text: localization.notes,
|
||||
),
|
||||
Tab(
|
||||
text: localization.settings,
|
||||
),
|
||||
Tab(
|
||||
text: localization.billingAddress,
|
||||
),
|
||||
Tab(
|
||||
text: localization.shippingAddress,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
body: Form(
|
||||
key: _formKey,
|
||||
child: TabBarView(
|
||||
key: ValueKey(viewModel.client.id),
|
||||
controller: _controller,
|
||||
children: <Widget>[
|
||||
ClientEditDetails(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
ClientEditContactsScreen(),
|
||||
ClientEditNotes(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
ClientEditSettings(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
ClientEditBillingAddress(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
ClientEditShippingAddress(
|
||||
viewModel: viewModel,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import 'package:invoiceninja_flutter/redux/client/client_actions.dart';
|
|||
import 'package:invoiceninja_flutter/redux/static/static_state.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/client/client_screen.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/utils/localization.dart';
|
||||
|
|
@ -45,7 +44,6 @@ class ClientEditVM {
|
|||
@required this.origClient,
|
||||
@required this.onChanged,
|
||||
@required this.onSavePressed,
|
||||
@required this.onBackPressed,
|
||||
@required this.onCancelPressed,
|
||||
@required this.staticState,
|
||||
@required this.copyBillingAddress,
|
||||
|
|
@ -63,12 +61,6 @@ class ClientEditVM {
|
|||
origClient: state.clientState.map[client.id],
|
||||
staticState: state.staticState,
|
||||
isSaving: state.isSaving,
|
||||
onBackPressed: () {
|
||||
if (state.uiState.currentRoute.contains(ClientScreen.route)) {
|
||||
store.dispatch(UpdateCurrentRoute(
|
||||
client.isNew ? ClientScreen.route : ClientViewScreen.route));
|
||||
}
|
||||
},
|
||||
onChanged: (ClientEntity client) =>
|
||||
store.dispatch(UpdateClient(client)),
|
||||
copyBillingAddress: () =>
|
||||
|
|
@ -137,7 +129,6 @@ class ClientEditVM {
|
|||
final ClientEntity origClient;
|
||||
final Function(ClientEntity) onChanged;
|
||||
final Function(BuildContext) onSavePressed;
|
||||
final Function onBackPressed;
|
||||
final Function(BuildContext) onCancelPressed;
|
||||
final StaticState staticState;
|
||||
final Function() copyShippingAddress;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/color_picker.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/invoice/tax_rate_dropdown.dart';
|
||||
import 'package:invoiceninja_flutter/ui/company_gateway/edit/company_gateway_edit_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||
import 'package:invoiceninja_flutter/utils/formatting.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
|
@ -67,7 +67,7 @@ class _CompanyGatewayEditState extends State<CompanyGatewayEdit>
|
|||
final localization = AppLocalization.of(context);
|
||||
final companyGateway = viewModel.companyGateway;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: viewModel.companyGateway.isNew
|
||||
? localization.newCompanyGateway
|
||||
: companyGateway.gateway.name,
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/invoice/tax_rate_dropdown.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||
import 'package:invoiceninja_flutter/utils/formatting.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
|
@ -11,8 +12,6 @@ import 'package:flutter/material.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
|
||||
import 'package:invoiceninja_flutter/ui/product/edit/product_edit_vm.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/buttons/action_flat_button.dart';
|
||||
import 'package:invoiceninja_flutter/utils/platforms.dart';
|
||||
|
||||
class ProductEdit extends StatefulWidget {
|
||||
const ProductEdit({
|
||||
|
|
@ -30,7 +29,7 @@ class _ProductEditState extends State<ProductEdit> {
|
|||
static final GlobalKey<FormState> _formKey =
|
||||
GlobalKey<FormState>(debugLabel: '_productEdit');
|
||||
final FocusScopeNode _focusNode = FocusScopeNode();
|
||||
bool autoValidate = false;
|
||||
bool _autoValidate = false;
|
||||
|
||||
final _productKeyController = TextEditingController();
|
||||
final _notesController = TextEditingController();
|
||||
|
|
@ -109,140 +108,108 @@ class _ProductEditState extends State<ProductEdit> {
|
|||
final viewModel = widget.viewModel;
|
||||
final product = viewModel.product;
|
||||
final company = viewModel.company;
|
||||
final userCompany = viewModel.state.userCompany;
|
||||
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
viewModel.onBackPressed();
|
||||
return true;
|
||||
return EditScaffold(
|
||||
title: viewModel.product.isNew
|
||||
? localization.newProduct
|
||||
: localization.editProduct,
|
||||
onCancelPressed: (context) => viewModel.onCancelPressed(context),
|
||||
onSavePressed: (context) {
|
||||
final bool isValid = _formKey.currentState.validate();
|
||||
|
||||
setState(() {
|
||||
_autoValidate = !isValid;
|
||||
});
|
||||
|
||||
if (!isValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
viewModel.onSavePressed(context);
|
||||
},
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
automaticallyImplyLeading: isMobile(context),
|
||||
title: Text(viewModel.product.isNew
|
||||
? localization.newProduct
|
||||
: localization.editProduct),
|
||||
actions: <Widget>[
|
||||
if (!isMobile(context))
|
||||
FlatButton(
|
||||
child: Text(
|
||||
localization.cancel,
|
||||
style: TextStyle(color: Colors.white),
|
||||
body: AppForm(
|
||||
formKey: _formKey,
|
||||
focusNode: _focusNode,
|
||||
child: ListView(
|
||||
key: ValueKey(widget.viewModel.product.id),
|
||||
children: <Widget>[
|
||||
FormCard(
|
||||
children: <Widget>[
|
||||
DecoratedFormField(
|
||||
label: localization.product,
|
||||
controller: _productKeyController,
|
||||
validator: (val) => val.isEmpty || val.trim().isEmpty
|
||||
? localization.pleaseEnterAProductKey
|
||||
: null,
|
||||
autovalidate: _autoValidate,
|
||||
),
|
||||
onPressed: () => viewModel.onCancelPressed(context),
|
||||
),
|
||||
Builder(builder: (BuildContext context) {
|
||||
if (!userCompany.canEditEntity(product)) {
|
||||
return Container();
|
||||
}
|
||||
|
||||
return ActionFlatButton(
|
||||
tooltip: localization.save,
|
||||
isVisible: !product.isDeleted,
|
||||
isSaving: viewModel.isSaving,
|
||||
isDirty: product.isNew || product != viewModel.origProduct,
|
||||
onPressed: () {
|
||||
final bool isValid = _formKey.currentState.validate();
|
||||
|
||||
setState(() {
|
||||
autoValidate = !isValid;
|
||||
});
|
||||
|
||||
if (!isValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
viewModel.onSavePressed(context);
|
||||
},
|
||||
);
|
||||
}),
|
||||
],
|
||||
),
|
||||
body: AppForm(
|
||||
formKey: _formKey,
|
||||
focusNode: _focusNode,
|
||||
child: ListView(
|
||||
key: ValueKey(widget.viewModel.product.id),
|
||||
children: <Widget>[
|
||||
FormCard(
|
||||
children: <Widget>[
|
||||
DecoratedFormField(
|
||||
label: localization.description,
|
||||
controller: _notesController,
|
||||
maxLines: 4,
|
||||
),
|
||||
CustomField(
|
||||
controller: _custom1Controller,
|
||||
field: CustomFieldType.product1,
|
||||
value: product.customValue1,
|
||||
),
|
||||
CustomField(
|
||||
controller: _custom2Controller,
|
||||
field: CustomFieldType.product2,
|
||||
value: product.customValue2,
|
||||
),
|
||||
DecoratedFormField(
|
||||
label: localization.price,
|
||||
controller: _priceController,
|
||||
keyboardType: TextInputType.numberWithOptions(decimal: true),
|
||||
),
|
||||
if (company.enableProductQuantity)
|
||||
DecoratedFormField(
|
||||
label: localization.product,
|
||||
controller: _productKeyController,
|
||||
validator: (val) => val.isEmpty || val.trim().isEmpty
|
||||
? localization.pleaseEnterAProductKey
|
||||
: null,
|
||||
autovalidate: autoValidate,
|
||||
),
|
||||
DecoratedFormField(
|
||||
label: localization.description,
|
||||
controller: _notesController,
|
||||
maxLines: 4,
|
||||
),
|
||||
CustomField(
|
||||
controller: _custom1Controller,
|
||||
field: CustomFieldType.product1,
|
||||
value: product.customValue1,
|
||||
),
|
||||
CustomField(
|
||||
controller: _custom2Controller,
|
||||
field: CustomFieldType.product2,
|
||||
value: product.customValue2,
|
||||
),
|
||||
DecoratedFormField(
|
||||
label: localization.price,
|
||||
controller: _priceController,
|
||||
label: localization.quantity,
|
||||
controller: _quantityController,
|
||||
keyboardType:
|
||||
TextInputType.numberWithOptions(decimal: true),
|
||||
),
|
||||
if (company.enableProductQuantity)
|
||||
DecoratedFormField(
|
||||
label: localization.quantity,
|
||||
controller: _quantityController,
|
||||
keyboardType:
|
||||
TextInputType.numberWithOptions(decimal: true),
|
||||
),
|
||||
if (company.enableProductCost)
|
||||
DecoratedFormField(
|
||||
label: localization.cost,
|
||||
controller: _costController,
|
||||
keyboardType:
|
||||
TextInputType.numberWithOptions(decimal: true),
|
||||
),
|
||||
if (company.settings.enableFirstItemTaxRate)
|
||||
TaxRateDropdown(
|
||||
onSelected: (taxRate) =>
|
||||
viewModel.onChanged(product.rebuild((b) => b
|
||||
..taxRate1 = taxRate.rate
|
||||
..taxName1 = taxRate.name)),
|
||||
labelText: localization.tax,
|
||||
initialTaxName: product.taxName1,
|
||||
initialTaxRate: product.taxRate1,
|
||||
),
|
||||
if (company.settings.enableSecondItemTaxRate)
|
||||
TaxRateDropdown(
|
||||
onSelected: (taxRate) =>
|
||||
viewModel.onChanged(product.rebuild((b) => b
|
||||
..taxRate2 = taxRate.rate
|
||||
..taxName2 = taxRate.name)),
|
||||
labelText: localization.tax,
|
||||
initialTaxName: product.taxName2,
|
||||
initialTaxRate: product.taxRate2,
|
||||
),
|
||||
if (company.settings.enableThirdItemTaxRate)
|
||||
TaxRateDropdown(
|
||||
onSelected: (taxRate) =>
|
||||
viewModel.onChanged(product.rebuild((b) => b
|
||||
..taxRate3 = taxRate.rate
|
||||
..taxName3 = taxRate.name)),
|
||||
labelText: localization.tax,
|
||||
initialTaxName: product.taxName3,
|
||||
initialTaxRate: product.taxRate3,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
if (company.enableProductCost)
|
||||
DecoratedFormField(
|
||||
label: localization.cost,
|
||||
controller: _costController,
|
||||
keyboardType:
|
||||
TextInputType.numberWithOptions(decimal: true),
|
||||
),
|
||||
if (company.settings.enableFirstItemTaxRate)
|
||||
TaxRateDropdown(
|
||||
onSelected: (taxRate) =>
|
||||
viewModel.onChanged(product.rebuild((b) => b
|
||||
..taxRate1 = taxRate.rate
|
||||
..taxName1 = taxRate.name)),
|
||||
labelText: localization.tax,
|
||||
initialTaxName: product.taxName1,
|
||||
initialTaxRate: product.taxRate1,
|
||||
),
|
||||
if (company.settings.enableSecondItemTaxRate)
|
||||
TaxRateDropdown(
|
||||
onSelected: (taxRate) =>
|
||||
viewModel.onChanged(product.rebuild((b) => b
|
||||
..taxRate2 = taxRate.rate
|
||||
..taxName2 = taxRate.name)),
|
||||
labelText: localization.tax,
|
||||
initialTaxName: product.taxName2,
|
||||
initialTaxRate: product.taxRate2,
|
||||
),
|
||||
if (company.settings.enableThirdItemTaxRate)
|
||||
TaxRateDropdown(
|
||||
onSelected: (taxRate) =>
|
||||
viewModel.onChanged(product.rebuild((b) => b
|
||||
..taxRate3 = taxRate.rate
|
||||
..taxName3 = taxRate.name)),
|
||||
labelText: localization.tax,
|
||||
initialTaxName: product.taxName3,
|
||||
initialTaxRate: product.taxRate3,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import 'package:invoiceninja_flutter/redux/product/product_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/product/edit/product_edit.dart';
|
||||
import 'package:invoiceninja_flutter/ui/product/product_screen.dart';
|
||||
import 'package:invoiceninja_flutter/ui/product/view/product_view_vm.dart';
|
||||
import 'package:invoiceninja_flutter/utils/platforms.dart';
|
||||
import 'package:redux/redux.dart';
|
||||
|
|
@ -45,7 +44,6 @@ class ProductEditVM {
|
|||
@required this.onChanged,
|
||||
@required this.onSavePressed,
|
||||
@required this.onCancelPressed,
|
||||
@required this.onBackPressed,
|
||||
@required this.onEntityAction,
|
||||
@required this.isSaving,
|
||||
@required this.isDirty,
|
||||
|
|
@ -65,11 +63,6 @@ class ProductEditVM {
|
|||
onChanged: (ProductEntity product) {
|
||||
store.dispatch(UpdateProduct(product));
|
||||
},
|
||||
onBackPressed: () {
|
||||
if (state.uiState.currentRoute.contains(ProductScreen.route)) {
|
||||
store.dispatch(UpdateCurrentRoute(ProductScreen.route));
|
||||
}
|
||||
},
|
||||
onCancelPressed: (BuildContext context) {
|
||||
createEntity(context: context, entity: ProductEntity(), force: true);
|
||||
store.dispatch(UpdateCurrentRoute(state.uiState.previousRoute));
|
||||
|
|
@ -122,7 +115,6 @@ class ProductEditVM {
|
|||
final Function(BuildContext) onSavePressed;
|
||||
final Function(BuildContext) onCancelPressed;
|
||||
final Function(BuildContext, EntityAction) onEntityAction;
|
||||
final Function onBackPressed;
|
||||
final bool isSaving;
|
||||
final bool isDirty;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/client_portal_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||
import 'package:invoiceninja_flutter/utils/icons.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
|
@ -115,7 +115,7 @@ class _ClientPortalState extends State<ClientPortal>
|
|||
final company = viewModel.company;
|
||||
final settings = viewModel.settings;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.clientPortal,
|
||||
onSavePressed: (context) => _onSavePressed(context),
|
||||
appBarBottom: TabBar(
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/resources/cached_image.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/company_details_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||
import 'package:invoiceninja_flutter/utils/dialogs.dart';
|
||||
import 'package:invoiceninja_flutter/utils/formatting.dart';
|
||||
|
|
@ -183,7 +183,7 @@ class _CompanyDetailsState extends State<CompanyDetails>
|
|||
final company = viewModel.company;
|
||||
final settings = viewModel.settings;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.companyDetails,
|
||||
onSavePressed: viewModel.onSavePressed,
|
||||
appBarBottom: TabBar(
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/credit_cards_and_banks_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
||||
class CreditCardsAndBanks extends StatefulWidget {
|
||||
|
|
@ -69,7 +69,7 @@ class _CreditCardsAndBanksState extends State<CreditCardsAndBanks>
|
|||
final localization = AppLocalization.of(context);
|
||||
//final viewModel = widget.viewModel;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
body: SizedBox(),
|
||||
onSavePressed: null,
|
||||
title: localization.creditCardsAndBanks,
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/custom_fields_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ class _CustomFieldsState extends State<CustomFields>
|
|||
final viewModel = widget.viewModel;
|
||||
final state = viewModel.state;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.customFields,
|
||||
onSavePressed: viewModel.onSavePressed,
|
||||
appBarBottom: TabBar(
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/data_visualizations_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
||||
class DataVisualizations extends StatefulWidget {
|
||||
|
|
@ -59,7 +59,7 @@ class _DataVisualizationsState extends State<DataVisualizations> {
|
|||
final localization = AppLocalization.of(context);
|
||||
//final viewModel = widget.viewModel;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
body: SizedBox(),
|
||||
onSavePressed: null,
|
||||
title: localization.dataVisualizations,
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/forms/save_cancel_buttons.dart';
|
||||
import 'package:invoiceninja_flutter/utils/platforms.dart';
|
||||
|
||||
class SettingsScaffold extends StatelessWidget {
|
||||
const SettingsScaffold({
|
||||
class EditScaffold extends StatelessWidget {
|
||||
const EditScaffold({
|
||||
Key key,
|
||||
@required this.title,
|
||||
@required this.onSavePressed,
|
||||
|
|
@ -8,7 +8,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/email_settings_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
||||
class EmailSettings extends StatefulWidget {
|
||||
|
|
@ -89,7 +89,7 @@ class _EmailSettingsState extends State<EmailSettings>
|
|||
final state = viewModel.state;
|
||||
final settings = viewModel.settings;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.emailSettings,
|
||||
onSavePressed: viewModel.onSavePressed,
|
||||
appBarBottom: TabBar(
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/forms/date_picker.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/generated_numbers_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||
import 'package:invoiceninja_flutter/utils/formatting.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
|
@ -94,7 +94,7 @@ class _GeneratedNumbersState extends State<GeneratedNumbers>
|
|||
final settings = viewModel.settings;
|
||||
final state = viewModel.state;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.generatedNumbers,
|
||||
onSavePressed: viewModel.onSavePressed,
|
||||
appBarBottom: TabBar(
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/import_export_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
||||
class ImportExport extends StatefulWidget {
|
||||
|
|
@ -59,7 +59,7 @@ class _ImportExportState extends State<ImportExport> {
|
|||
final localization = AppLocalization.of(context);
|
||||
//final viewModel = widget.viewModel;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.importExport,
|
||||
onSavePressed: null,
|
||||
body: SizedBox(),
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/color_picker.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/invoice_design_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/fonts.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
||||
|
|
@ -58,7 +58,7 @@ class _InvoiceDesignState extends State<InvoiceDesign>
|
|||
final company = viewModel.company;
|
||||
final designs = company.getInvoiceDesigns();
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.invoiceDesign,
|
||||
onSavePressed: viewModel.onSavePressed,
|
||||
appBarBottom: TabBar(
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/localization_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/formatting.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
||||
|
|
@ -81,7 +81,7 @@ class _LocalizationSettingsState extends State<LocalizationSettings> {
|
|||
final settings = viewModel.settings;
|
||||
final company = viewModel.company;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.localization,
|
||||
onSavePressed: viewModel.onSavePressed,
|
||||
body: AppForm(
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/notifications_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
||||
class NotificationSettings extends StatefulWidget {
|
||||
|
|
@ -59,7 +59,7 @@ class _NotificationSettingsState extends State<NotificationSettings> {
|
|||
final localization = AppLocalization.of(context);
|
||||
//final viewModel = widget.viewModel;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.notifications,
|
||||
onSavePressed: null,
|
||||
body: SizedBox(),
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/online_payments_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
||||
class OnlinePayments extends StatefulWidget {
|
||||
|
|
@ -67,7 +67,7 @@ class _OnlinePaymentsState extends State<OnlinePayments>
|
|||
final localization = AppLocalization.of(context);
|
||||
final viewModel = widget.viewModel;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.onlinePayments,
|
||||
onSavePressed: viewModel.onSavePressed,
|
||||
body: SizedBox(),
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/product_settings_vm.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
||||
class ProductSettings extends StatefulWidget {
|
||||
|
|
@ -41,7 +41,7 @@ class _ProductSettingsState extends State<ProductSettings> {
|
|||
final viewModel = widget.viewModel;
|
||||
final company = viewModel.company;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.productSettings,
|
||||
onSavePressed: viewModel.onSavePressed,
|
||||
body: AppForm(
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/invoice/tax_rate_dropdown.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/tax_settings_vm.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
||||
|
|
@ -47,7 +47,7 @@ class _TaxSettingsState extends State<TaxSettings> {
|
|||
final settings = viewModel.settings;
|
||||
final state = viewModel.state;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.taxSettings,
|
||||
onSavePressed: viewModel.onSavePressed,
|
||||
body: AppForm(
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/templates_and_reminders_vm.dart';
|
||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||
import 'package:invoiceninja_flutter/utils/formatting.dart';
|
||||
|
|
@ -193,7 +193,7 @@ class _TemplatesAndRemindersState extends State<TemplatesAndReminders>
|
|||
final state = viewModel.state;
|
||||
final settings = viewModel.settings;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.templatesAndReminders,
|
||||
onSavePressed: viewModel.onSavePressed,
|
||||
appBarBottom: TabBar(
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/user_details_vm.dart';
|
||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
|
@ -92,7 +92,7 @@ class _UserDetailsState extends State<UserDetails> {
|
|||
final localization = AppLocalization.of(context);
|
||||
final viewModel = widget.viewModel;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.userDetails,
|
||||
onSavePressed: viewModel.onSavePressed,
|
||||
body: AppForm(
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/bool_dropdown_button.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/workflow_vm.dart';
|
||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||
|
||||
|
|
@ -49,7 +49,7 @@ class _WorkflowSettingsState extends State<WorkflowSettings>
|
|||
final state = viewModel.state;
|
||||
final settings = viewModel.settings;
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: localization.workflowSettings,
|
||||
onSavePressed: viewModel.onSavePressed,
|
||||
appBarBottom: TabBar(
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/app_form.dart';
|
||||
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/settings/edit_scaffold.dart';
|
||||
import 'package:invoiceninja_flutter/ui/tax_rate/edit/tax_rate_edit_vm.dart';
|
||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||
import 'package:invoiceninja_flutter/utils/formatting.dart';
|
||||
|
|
@ -79,7 +79,7 @@ class _TaxRateEditState extends State<TaxRateEdit> {
|
|||
final viewModel = widget.viewModel;
|
||||
final localization = AppLocalization.of(context);
|
||||
|
||||
return SettingsScaffold(
|
||||
return EditScaffold(
|
||||
title: viewModel.taxRate.isNew
|
||||
? localization.newTaxRate
|
||||
: localization.editTaxRate,
|
||||
|
|
|
|||
Loading…
Reference in New Issue