diff --git a/lib/data/models/company_model.dart b/lib/data/models/company_model.dart index e00988bbb..d979833f0 100644 --- a/lib/data/models/company_model.dart +++ b/lib/data/models/company_model.dart @@ -1026,7 +1026,6 @@ abstract class SettingsEntity @BuiltValueField(wireName: 'email_template_reminder4') String get emailBodyReminder4; - // TODO remove this field @nullable @BuiltValueField(wireName: 'custom_payment_terms') diff --git a/lib/data/models/invoice_model.dart b/lib/data/models/invoice_model.dart index 89bdb599a..89a9898d5 100644 --- a/lib/data/models/invoice_model.dart +++ b/lib/data/models/invoice_model.dart @@ -314,7 +314,8 @@ abstract class InvoiceEntity extends Object } if (response == 0) { - return (invoiceA.invoiceNumber ?? '').compareTo(invoiceB.invoiceNumber ?? ''); + return (invoiceA.invoiceNumber ?? '') + .compareTo(invoiceB.invoiceNumber ?? ''); } else { return response; } diff --git a/lib/data/repositories/invoice_repository.dart b/lib/data/repositories/invoice_repository.dart index aa0798d1e..16a9456d5 100644 --- a/lib/data/repositories/invoice_repository.dart +++ b/lib/data/repositories/invoice_repository.dart @@ -60,12 +60,12 @@ class InvoiceRepository { data: json.encode([ids])); break; default: - // Might have other actions in the future + // Might have other actions in the future break; } final InvoiceListResponse invoiceResponse = - serializers.deserializeWith(InvoiceListResponse.serializer, response); + serializers.deserializeWith(InvoiceListResponse.serializer, response); return invoiceResponse.data.toList(); } diff --git a/lib/data/repositories/payment_repository.dart b/lib/data/repositories/payment_repository.dart index 49a8c227a..2ed28ab3b 100644 --- a/lib/data/repositories/payment_repository.dart +++ b/lib/data/repositories/payment_repository.dart @@ -47,12 +47,12 @@ class PaymentRepository { data: json.encode([ids])); break; default: - // Might have other actions in the future + // Might have other actions in the future break; } final PaymentListResponse paymentResponse = - serializers.deserializeWith(PaymentListResponse.serializer, response); + serializers.deserializeWith(PaymentListResponse.serializer, response); return paymentResponse.data.toList(); } diff --git a/lib/data/repositories/product_repository.dart b/lib/data/repositories/product_repository.dart index 769354941..00eb3a5b4 100644 --- a/lib/data/repositories/product_repository.dart +++ b/lib/data/repositories/product_repository.dart @@ -47,12 +47,12 @@ class ProductRepository { data: json.encode([ids])); break; default: - // Might have other actions in the future + // Might have other actions in the future break; } final ProductListResponse productResponse = - serializers.deserializeWith(ProductListResponse.serializer, response); + serializers.deserializeWith(ProductListResponse.serializer, response); return productResponse.data.toList(); } diff --git a/lib/data/repositories/quote_repository.dart b/lib/data/repositories/quote_repository.dart index cf9df5675..fcc4110a8 100644 --- a/lib/data/repositories/quote_repository.dart +++ b/lib/data/repositories/quote_repository.dart @@ -60,12 +60,12 @@ class QuoteRepository { data: json.encode([ids])); break; default: - // Might have other actions in the future + // Might have other actions in the future break; } final InvoiceListResponse invoiceResponse = - serializers.deserializeWith(InvoiceListResponse.serializer, response); + serializers.deserializeWith(InvoiceListResponse.serializer, response); return invoiceResponse.data.toList(); } diff --git a/lib/redux/payment/payment_selectors.dart b/lib/redux/payment/payment_selectors.dart index c0bea3c6e..91e38ea2e 100644 --- a/lib/redux/payment/payment_selectors.dart +++ b/lib/redux/payment/payment_selectors.dart @@ -159,7 +159,7 @@ String paymentStatsForUser( int countArchived = 0; paymentMap.forEach((paymentId, payment) { if (invoiceMap.containsKey(payment.invoiceId)) - // TODO enable this code + // TODO enable this code //&& invoiceMap[payment.invoiceId].userId == userId) { if (payment.isActive) { diff --git a/lib/redux/quote/quote_actions.dart b/lib/redux/quote/quote_actions.dart index 23821d3f4..b0f507cb6 100644 --- a/lib/redux/quote/quote_actions.dart +++ b/lib/redux/quote/quote_actions.dart @@ -217,7 +217,7 @@ class ArchiveQuoteRequest implements StartSaving { ArchiveQuoteRequest(this.completer, this.quoteIds); final Completer completer; - + final List quoteIds; } @@ -237,7 +237,7 @@ class DeleteQuoteRequest implements StartSaving { DeleteQuoteRequest(this.completer, this.quoteIds); final Completer completer; - + final List quoteIds; } diff --git a/lib/redux/quote/quote_selectors.dart b/lib/redux/quote/quote_selectors.dart index e0c54291f..2ae2a680a 100644 --- a/lib/redux/quote/quote_selectors.dart +++ b/lib/redux/quote/quote_selectors.dart @@ -99,9 +99,9 @@ String quoteStatsForClient( } var memoizedQuoteStatsForUser = memo4((String userId, - BuiltMap quoteMap, - String activeLabel, - String archivedLabel) => + BuiltMap quoteMap, + String activeLabel, + String archivedLabel) => quoteStatsForUser(userId, quoteMap, activeLabel, archivedLabel)); String quoteStatsForUser( diff --git a/lib/ui/auth/login_view.dart b/lib/ui/auth/login_view.dart index b9b59052d..e6497086a 100644 --- a/lib/ui/auth/login_view.dart +++ b/lib/ui/auth/login_view.dart @@ -9,6 +9,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart'; import 'package:invoiceninja_flutter/ui/app/link_text.dart'; import 'package:invoiceninja_flutter/ui/app/loading_indicator.dart'; import 'package:invoiceninja_flutter/ui/auth/login_vm.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/ui/app/form_card.dart'; @@ -30,6 +31,7 @@ class LoginView extends StatefulWidget { class _LoginState extends State { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); final _firstNameController = TextEditingController(); final _lastNameController = TextEditingController(); diff --git a/lib/ui/client/edit/client_edit.dart b/lib/ui/client/edit/client_edit.dart index 318d8cf6b..de1168e11 100644 --- a/lib/ui/client/edit/client_edit.dart +++ b/lib/ui/client/edit/client_edit.dart @@ -7,6 +7,7 @@ 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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/ui/app/buttons/action_icon_button.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; @@ -27,6 +28,7 @@ class _ClientEditState extends State with SingleTickerProviderStateMixin { TabController _controller; static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); @override void initState() { diff --git a/lib/ui/client/view/client_view_details.dart b/lib/ui/client/view/client_view_details.dart index 9bc7558d5..e60cc268a 100644 --- a/lib/ui/client/view/client_view_details.dart +++ b/lib/ui/client/view/client_view_details.dart @@ -170,4 +170,3 @@ class _ClientViewDetailsState extends State { ); } } - diff --git a/lib/ui/company_gateway/edit/company_gateway_edit.dart b/lib/ui/company_gateway/edit/company_gateway_edit.dart index fbe1b8121..72f51e2d2 100644 --- a/lib/ui/company_gateway/edit/company_gateway_edit.dart +++ b/lib/ui/company_gateway/edit/company_gateway_edit.dart @@ -12,6 +12,7 @@ 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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/strings.dart'; @@ -31,6 +32,7 @@ class CompanyGatewayEdit extends StatefulWidget { class _CompanyGatewayEditState extends State with SingleTickerProviderStateMixin { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); final FocusScopeNode _focusNode = FocusScopeNode(); TabController _controller; diff --git a/lib/ui/document/edit/document_edit.dart b/lib/ui/document/edit/document_edit.dart index eb36996af..761d25535 100644 --- a/lib/ui/document/edit/document_edit.dart +++ b/lib/ui/document/edit/document_edit.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/ui/app/form_card.dart'; import 'package:invoiceninja_flutter/ui/document/edit/document_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/app/buttons/action_icon_button.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; @@ -20,6 +21,7 @@ class DocumentEdit extends StatefulWidget { class _DocumentEditState extends State { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); // STARTER: controllers - do not remove comment diff --git a/lib/ui/expense/edit/expense_edit.dart b/lib/ui/expense/edit/expense_edit.dart index 7bdcd9c0f..327907fb6 100644 --- a/lib/ui/expense/edit/expense_edit.dart +++ b/lib/ui/expense/edit/expense_edit.dart @@ -4,6 +4,7 @@ import 'package:invoiceninja_flutter/ui/expense/edit/expense_edit_details.dart'; import 'package:invoiceninja_flutter/ui/expense/edit/expense_edit_notes.dart'; import 'package:invoiceninja_flutter/ui/expense/edit/expense_edit_settings.dart'; import 'package:invoiceninja_flutter/ui/expense/edit/expense_edit_vm.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/ui/app/buttons/action_icon_button.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; @@ -24,6 +25,7 @@ class _ExpenseEditState extends State with SingleTickerProviderStateMixin { TabController _controller; static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); @override void initState() { diff --git a/lib/ui/group/edit/group_edit.dart b/lib/ui/group/edit/group_edit.dart index b73d5cf91..796d4b9b5 100644 --- a/lib/ui/group/edit/group_edit.dart +++ b/lib/ui/group/edit/group_edit.dart @@ -6,6 +6,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/group/edit/group_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/app/buttons/action_icon_button.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; @@ -23,6 +24,7 @@ class GroupEdit extends StatefulWidget { class _GroupEditState extends State { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); final _nameController = TextEditingController(); final _custom1Controller = TextEditingController(); diff --git a/lib/ui/invoice/invoice_list.dart b/lib/ui/invoice/invoice_list.dart index efa8b95b7..346132672 100644 --- a/lib/ui/invoice/invoice_list.dart +++ b/lib/ui/invoice/invoice_list.dart @@ -51,8 +51,7 @@ class InvoiceList extends StatelessWidget { children: [ if (filteredEntity != null) ListFilterMessage( - title: - '$filteredMessage: ${filteredEntity.listDisplayName}', + title: '$filteredMessage: ${filteredEntity.listDisplayName}', onPressed: viewModel.onViewEntityFilterPressed, onClearPressed: viewModel.onClearEntityFilterPressed, ), diff --git a/lib/ui/payment/edit/payment_edit.dart b/lib/ui/payment/edit/payment_edit.dart index 36006edcf..3551b3e1f 100644 --- a/lib/ui/payment/edit/payment_edit.dart +++ b/lib/ui/payment/edit/payment_edit.dart @@ -10,6 +10,7 @@ import 'package:invoiceninja_flutter/ui/app/form_card.dart'; import 'package:invoiceninja_flutter/ui/app/forms/date_picker.dart'; import 'package:invoiceninja_flutter/ui/payment/edit/payment_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/app/buttons/action_icon_button.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart'; @@ -29,6 +30,7 @@ class PaymentEdit extends StatefulWidget { class _PaymentEditState extends State { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); final _amountController = TextEditingController(); final _transactionReferenceController = TextEditingController(); diff --git a/lib/ui/payment/payment_list.dart b/lib/ui/payment/payment_list.dart index 7f0e2d2b7..db579edf8 100644 --- a/lib/ui/payment/payment_list.dart +++ b/lib/ui/payment/payment_list.dart @@ -52,8 +52,7 @@ class PaymentList extends StatelessWidget { children: [ if (filteredEntity != null) ListFilterMessage( - title: - '$filteredMessage: ${filteredEntity.listDisplayName}', + title: '$filteredMessage: ${filteredEntity.listDisplayName}', onPressed: viewModel.onViewEntityFilterPressed, onClearPressed: viewModel.onClearEntityFilterPressed, ), diff --git a/lib/ui/product/edit/product_edit.dart b/lib/ui/product/edit/product_edit.dart index 45eb9a6d7..c3240837a 100644 --- a/lib/ui/product/edit/product_edit.dart +++ b/lib/ui/product/edit/product_edit.dart @@ -3,6 +3,7 @@ import 'package:invoiceninja_flutter/data/models/models.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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -26,6 +27,7 @@ class ProductEdit extends StatefulWidget { class _ProductEditState extends State { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); bool autoValidate = false; diff --git a/lib/ui/project/edit/project_edit.dart b/lib/ui/project/edit/project_edit.dart index d600e9692..523e4f34b 100644 --- a/lib/ui/project/edit/project_edit.dart +++ b/lib/ui/project/edit/project_edit.dart @@ -9,6 +9,7 @@ import 'package:invoiceninja_flutter/ui/app/forms/custom_field.dart'; import 'package:invoiceninja_flutter/ui/app/forms/date_picker.dart'; import 'package:invoiceninja_flutter/ui/project/edit/project_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/app/buttons/action_icon_button.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; @@ -27,6 +28,7 @@ class ProjectEdit extends StatefulWidget { class _ProjectEditState extends State { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); bool autoValidate = false; diff --git a/lib/ui/settings/buy_now_buttons.dart b/lib/ui/settings/buy_now_buttons.dart index 0d1215966..320dc6b39 100644 --- a/lib/ui/settings/buy_now_buttons.dart +++ b/lib/ui/settings/buy_now_buttons.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/ui/app/form_card.dart'; import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart'; import 'package:invoiceninja_flutter/ui/settings/buy_now_buttons_vm.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; @@ -20,6 +21,7 @@ class BuyNowButtons extends StatefulWidget { class _BuyNowButtonsState extends State { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); bool autoValidate = false; diff --git a/lib/ui/settings/client_portal.dart b/lib/ui/settings/client_portal.dart index 1e8441373..9e6fbb1fe 100644 --- a/lib/ui/settings/client_portal.dart +++ b/lib/ui/settings/client_portal.dart @@ -9,6 +9,7 @@ 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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/icons.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; @@ -28,6 +29,7 @@ class ClientPortal extends StatefulWidget { class _ClientPortalState extends State with SingleTickerProviderStateMixin { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); final FocusScopeNode _focusNode = FocusScopeNode(); TabController _controller; diff --git a/lib/ui/settings/company_details.dart b/lib/ui/settings/company_details.dart index 37d3b2897..001387007 100644 --- a/lib/ui/settings/company_details.dart +++ b/lib/ui/settings/company_details.dart @@ -12,6 +12,7 @@ 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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; @@ -30,6 +31,7 @@ class CompanyDetails extends StatefulWidget { class _CompanyDetailsState extends State with SingleTickerProviderStateMixin { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); final FocusScopeNode _focusNode = FocusScopeNode(); TabController _controller; diff --git a/lib/ui/settings/credit_cards_and_banks.dart b/lib/ui/settings/credit_cards_and_banks.dart index cb45b3a7d..192c0ac97 100644 --- a/lib/ui/settings/credit_cards_and_banks.dart +++ b/lib/ui/settings/credit_cards_and_banks.dart @@ -2,6 +2,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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class CreditCardsAndBanks extends StatefulWidget { @@ -19,6 +20,7 @@ class CreditCardsAndBanks extends StatefulWidget { class _CreditCardsAndBanksState extends State with SingleTickerProviderStateMixin { //static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); TabController _controller; diff --git a/lib/ui/settings/custom_fields.dart b/lib/ui/settings/custom_fields.dart index c9c5addfe..8bf381876 100644 --- a/lib/ui/settings/custom_fields.dart +++ b/lib/ui/settings/custom_fields.dart @@ -6,6 +6,7 @@ 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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class CustomFields extends StatefulWidget { @@ -23,6 +24,7 @@ class CustomFields extends StatefulWidget { class _CustomFieldsState extends State with SingleTickerProviderStateMixin { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); FocusScopeNode _focusNode; TabController _controller; diff --git a/lib/ui/settings/data_visualizations.dart b/lib/ui/settings/data_visualizations.dart index 8e755c89e..f1e2e8241 100644 --- a/lib/ui/settings/data_visualizations.dart +++ b/lib/ui/settings/data_visualizations.dart @@ -2,6 +2,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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class DataVisualizations extends StatefulWidget { @@ -18,6 +19,7 @@ class DataVisualizations extends StatefulWidget { class _DataVisualizationsState extends State { //static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); bool autoValidate = false; diff --git a/lib/ui/settings/device_settings_list.dart b/lib/ui/settings/device_settings_list.dart index 9f1949b72..7f4c55c51 100644 --- a/lib/ui/settings/device_settings_list.dart +++ b/lib/ui/settings/device_settings_list.dart @@ -4,6 +4,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:invoiceninja_flutter/data/models/entities.dart'; import 'package:invoiceninja_flutter/ui/app/form_card.dart'; import 'package:invoiceninja_flutter/ui/settings/device_settings_list_vm.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; @@ -21,6 +22,7 @@ class DeviceSettings extends StatefulWidget { class _DeviceSettingsState extends State { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); @override Widget build(BuildContext context) { diff --git a/lib/ui/settings/email_settings.dart b/lib/ui/settings/email_settings.dart index 7247c6f22..cf1aaa814 100644 --- a/lib/ui/settings/email_settings.dart +++ b/lib/ui/settings/email_settings.dart @@ -8,6 +8,7 @@ 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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class EmailSettings extends StatefulWidget { @@ -25,6 +26,7 @@ class EmailSettings extends StatefulWidget { class _EmailSettingsState extends State with SingleTickerProviderStateMixin { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); TabController _tabController; FocusScopeNode _focusNode; diff --git a/lib/ui/settings/generated_numbers.dart b/lib/ui/settings/generated_numbers.dart index a96311f9f..8b87b0321 100644 --- a/lib/ui/settings/generated_numbers.dart +++ b/lib/ui/settings/generated_numbers.dart @@ -7,6 +7,7 @@ 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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; @@ -26,6 +27,7 @@ class GeneratedNumbers extends StatefulWidget { class _GeneratedNumbersState extends State with SingleTickerProviderStateMixin { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); FocusScopeNode _focusNode; TabController _controller; diff --git a/lib/ui/settings/import_export.dart b/lib/ui/settings/import_export.dart index bd32d7119..13ac827f5 100644 --- a/lib/ui/settings/import_export.dart +++ b/lib/ui/settings/import_export.dart @@ -2,6 +2,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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class ImportExport extends StatefulWidget { @@ -18,6 +19,7 @@ class ImportExport extends StatefulWidget { class _ImportExportState extends State { //static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); bool autoValidate = false; diff --git a/lib/ui/settings/invoice_design.dart b/lib/ui/settings/invoice_design.dart index e6ccd1f44..6939a59e4 100644 --- a/lib/ui/settings/invoice_design.dart +++ b/lib/ui/settings/invoice_design.dart @@ -12,6 +12,7 @@ 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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/fonts.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; @@ -30,6 +31,7 @@ class InvoiceDesign extends StatefulWidget { class _InvoiceDesignState extends State with SingleTickerProviderStateMixin { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); TabController _controller; FocusScopeNode _focusNode; diff --git a/lib/ui/settings/localization_settings.dart b/lib/ui/settings/localization_settings.dart index 79f387295..7a2b1f346 100644 --- a/lib/ui/settings/localization_settings.dart +++ b/lib/ui/settings/localization_settings.dart @@ -10,6 +10,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/settings/localization_vm.dart'; import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; @@ -27,6 +28,7 @@ class LocalizationSettings extends StatefulWidget { class _LocalizationSettingsState extends State { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); bool autoValidate = false; diff --git a/lib/ui/settings/notifications.dart b/lib/ui/settings/notifications.dart index 90761bfe5..d0a85d2cb 100644 --- a/lib/ui/settings/notifications.dart +++ b/lib/ui/settings/notifications.dart @@ -2,6 +2,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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class NotificationSettings extends StatefulWidget { @@ -18,6 +19,7 @@ class NotificationSettings extends StatefulWidget { class _NotificationSettingsState extends State { //static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); bool autoValidate = false; diff --git a/lib/ui/settings/online_payments.dart b/lib/ui/settings/online_payments.dart index d5968d006..05f00c676 100644 --- a/lib/ui/settings/online_payments.dart +++ b/lib/ui/settings/online_payments.dart @@ -2,6 +2,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/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class OnlinePayments extends StatefulWidget { @@ -18,8 +19,6 @@ class OnlinePayments extends StatefulWidget { class _OnlinePaymentsState extends State with SingleTickerProviderStateMixin { - //static final GlobalKey _formKey = GlobalKey(); - TabController _controller; bool autoValidate = false; diff --git a/lib/ui/settings/tax_rates.dart b/lib/ui/settings/tax_rates.dart index 8869ed664..2217296a8 100644 --- a/lib/ui/settings/tax_rates.dart +++ b/lib/ui/settings/tax_rates.dart @@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/ui/settings/settings_scaffold.dart'; import 'package:invoiceninja_flutter/ui/settings/tax_rates_vm.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class TaxRates extends StatefulWidget { @@ -19,6 +20,7 @@ class TaxRates extends StatefulWidget { class _TaxRatesState extends State with SingleTickerProviderStateMixin { //static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); TabController _controller; diff --git a/lib/ui/settings/templates_and_reminders.dart b/lib/ui/settings/templates_and_reminders.dart index 737f5822a..a83e8db19 100644 --- a/lib/ui/settings/templates_and_reminders.dart +++ b/lib/ui/settings/templates_and_reminders.dart @@ -37,7 +37,6 @@ class _TemplatesAndRemindersState extends State FocusScopeNode _focusNode; TabController _controller; - final _subjectController = TextEditingController(); final _bodyController = TextEditingController(); diff --git a/lib/ui/settings/user_details.dart b/lib/ui/settings/user_details.dart index 503d1d5d3..357c8d016 100644 --- a/lib/ui/settings/user_details.dart +++ b/lib/ui/settings/user_details.dart @@ -5,6 +5,7 @@ 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/user_details_vm.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class UserDetails extends StatefulWidget { @@ -21,6 +22,7 @@ class UserDetails extends StatefulWidget { class _UserDetailsState extends State { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); bool autoValidate = false; diff --git a/lib/ui/settings/workflow_settings.dart b/lib/ui/settings/workflow_settings.dart index 18b9ac468..b46357ab1 100644 --- a/lib/ui/settings/workflow_settings.dart +++ b/lib/ui/settings/workflow_settings.dart @@ -6,6 +6,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/settings/settings_scaffold.dart'; import 'package:invoiceninja_flutter/ui/settings/workflow_vm.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class WorkflowSettings extends StatefulWidget { @@ -23,6 +24,7 @@ class WorkflowSettings extends StatefulWidget { class _WorkflowSettingsState extends State with SingleTickerProviderStateMixin { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); FocusScopeNode _focusNode; TabController _controller; diff --git a/lib/ui/task/edit/task_edit.dart b/lib/ui/task/edit/task_edit.dart index 043f0244a..eadbf1ef2 100644 --- a/lib/ui/task/edit/task_edit.dart +++ b/lib/ui/task/edit/task_edit.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/ui/task/edit/task_edit_details_vm.dart'; import 'package:invoiceninja_flutter/ui/task/edit/task_edit_times_vm.dart'; import 'package:invoiceninja_flutter/ui/task/edit/task_edit_vm.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/ui/app/buttons/action_icon_button.dart'; @@ -27,6 +28,7 @@ class _TaskEditState extends State TabController _controller; static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); static const kDetailsScreen = 0; static const kTimesScreen = 1; diff --git a/lib/ui/task/task_list.dart b/lib/ui/task/task_list.dart index 69d83d290..68c610965 100644 --- a/lib/ui/task/task_list.dart +++ b/lib/ui/task/task_list.dart @@ -47,8 +47,7 @@ class TaskList extends StatelessWidget { children: [ if (filteredEntity != null) ListFilterMessage( - title: - '$filteredMessage: ${filteredEntity.listDisplayName}', + title: '$filteredMessage: ${filteredEntity.listDisplayName}', onPressed: viewModel.onViewEntityFilterPressed, onClearPressed: viewModel.onClearEntityFilterPressed, ), diff --git a/lib/ui/tax_rate/edit/tax_rate_edit.dart b/lib/ui/tax_rate/edit/tax_rate_edit.dart index 12d429cc3..7dc693054 100644 --- a/lib/ui/tax_rate/edit/tax_rate_edit.dart +++ b/lib/ui/tax_rate/edit/tax_rate_edit.dart @@ -5,6 +5,7 @@ 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/tax_rate/edit/tax_rate_edit_vm.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; @@ -22,6 +23,7 @@ class TaxRateEdit extends StatefulWidget { class _TaxRateEditState extends State { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); bool autoValidate = false; diff --git a/lib/ui/user/edit/user_edit.dart b/lib/ui/user/edit/user_edit.dart index 320cf629d..0b5f67c40 100644 --- a/lib/ui/user/edit/user_edit.dart +++ b/lib/ui/user/edit/user_edit.dart @@ -5,6 +5,7 @@ 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/user/edit/user_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/app/buttons/action_icon_button.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; @@ -22,6 +23,7 @@ class UserEdit extends StatefulWidget { class _UserEditState extends State { static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); bool autoValidate = false; diff --git a/lib/ui/user/view/user_view.dart b/lib/ui/user/view/user_view.dart index 9c21831a3..c8b4bca98 100644 --- a/lib/ui/user/view/user_view.dart +++ b/lib/ui/user/view/user_view.dart @@ -103,36 +103,36 @@ class UserView extends StatelessWidget { localization.active, localization.archived), ), - EntityListTile( - bottomPadding: 1, - icon: getEntityIcon(EntityType.payment), - title: localization.payments, - onTap: () => viewModel.onEntityPressed(context, EntityType.payment), - onLongPress: () => - viewModel.onEntityPressed(context, EntityType.payment, true), - subtitle: memoizedPaymentStatsForUser( - user.id, - state.paymentState.map, - state.invoiceState.map, - localization.active, - localization.archived), - ), - company.isModuleEnabled(EntityType.quote) - ? EntityListTile( - bottomPadding: 1, - icon: getEntityIcon(EntityType.quote), - title: localization.quotes, - onTap: () => - viewModel.onEntityPressed(context, EntityType.quote), - onLongPress: () => - viewModel.onEntityPressed(context, EntityType.quote, true), - subtitle: memoizedQuoteStatsForUser( - user.id, - state.quoteState.map, - localization.active, - localization.archived), - ) - : Container(), + EntityListTile( + bottomPadding: 1, + icon: getEntityIcon(EntityType.payment), + title: localization.payments, + onTap: () => viewModel.onEntityPressed(context, EntityType.payment), + onLongPress: () => + viewModel.onEntityPressed(context, EntityType.payment, true), + subtitle: memoizedPaymentStatsForUser( + user.id, + state.paymentState.map, + state.invoiceState.map, + localization.active, + localization.archived), + ), + company.isModuleEnabled(EntityType.quote) + ? EntityListTile( + bottomPadding: 1, + icon: getEntityIcon(EntityType.quote), + title: localization.quotes, + onTap: () => + viewModel.onEntityPressed(context, EntityType.quote), + onLongPress: () => viewModel.onEntityPressed( + context, EntityType.quote, true), + subtitle: memoizedQuoteStatsForUser( + user.id, + state.quoteState.map, + localization.active, + localization.archived), + ) + : Container(), /* company.isModuleEnabled(EntityType.project) ? EntityListTile( diff --git a/lib/ui/vendor/edit/vendor_edit.dart b/lib/ui/vendor/edit/vendor_edit.dart index d9dae80ba..0681809e2 100644 --- a/lib/ui/vendor/edit/vendor_edit.dart +++ b/lib/ui/vendor/edit/vendor_edit.dart @@ -5,6 +5,7 @@ import 'package:invoiceninja_flutter/ui/vendor/edit/vendor_edit_contacts_vm.dart import 'package:invoiceninja_flutter/ui/vendor/edit/vendor_edit_details.dart'; import 'package:invoiceninja_flutter/ui/vendor/edit/vendor_edit_notes.dart'; import 'package:invoiceninja_flutter/ui/vendor/edit/vendor_edit_vm.dart'; +import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/ui/app/buttons/action_icon_button.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; @@ -25,6 +26,7 @@ class _VendorEditState extends State with SingleTickerProviderStateMixin { TabController _controller; static final GlobalKey _formKey = GlobalKey(); + final _debouncer = Debouncer(); @override void initState() { diff --git a/lib/utils/i18n.dart b/lib/utils/i18n.dart index 667ea7085..d8289aa2b 100644 --- a/lib/utils/i18n.dart +++ b/lib/utils/i18n.dart @@ -15432,15 +15432,14 @@ mixin LocalizationsProvider on LocaleCodeAware { String get afterDueDate => _localizedValues[localeCode]['after_due_date']; - String get afterInvoiceDate => _localizedValues[localeCode]['after_invoice_date']; + String get afterInvoiceDate => + _localizedValues[localeCode]['after_invoice_date']; String get schedule => _localizedValues[localeCode]['schedule']; - String get lateFeeAmount => _localizedValues[localeCode]['late_fee_amount']; String get lateFeePercent => _localizedValues[localeCode]['late_fee_percent']; - String lookup(String key) { final lookupKey = toSnakeCase(key); return _localizedValues[localeCode][lookupKey] ?? diff --git a/samples/form_keys.dart b/samples/form_keys.dart index 6727a3ba8..f9150d2ec 100644 --- a/samples/form_keys.dart +++ b/samples/form_keys.dart @@ -24,6 +24,7 @@ class MyApp extends StatefulWidget { class _MyAppState extends State with SingleTickerProviderStateMixin { static final GlobalKey _formKey = GlobalKey(); + static final GlobalKey _clientKey = GlobalKey(); static final GlobalKey _contactsKey = diff --git a/stubs/ui/stub/edit/stub_edit b/stubs/ui/stub/edit/stub_edit index 121f3e930..723f51358 100644 --- a/stubs/ui/stub/edit/stub_edit +++ b/stubs/ui/stub/edit/stub_edit @@ -20,6 +20,7 @@ class StubEdit extends StatefulWidget { class _StubEditState extends State { static final GlobalKey _formKey = GlobalKey(); +final _debouncer = Debouncer(); // STARTER: controllers - do not remove comment