This commit is contained in:
Hillel Coren 2019-12-15 16:19:07 +02:00
parent 0807099c79
commit 34f15aaedc
27 changed files with 196 additions and 275 deletions

View File

@ -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;

View File

@ -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);
},

View File

@ -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),

View File

@ -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,
),
],
),
),
),
);

View File

@ -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;

View File

@ -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,

View File

@ -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,
),
],
),
],
),
),
);

View File

@ -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;
}

View File

@ -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(

View File

@ -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(

View File

@ -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,

View File

@ -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(

View File

@ -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,

View File

@ -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,

View File

@ -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(

View File

@ -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(

View File

@ -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(),

View File

@ -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(

View File

@ -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(

View File

@ -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(),

View File

@ -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(),

View File

@ -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(

View File

@ -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(

View File

@ -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(

View File

@ -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(

View File

@ -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(

View File

@ -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,