diff --git a/lib/ui/app/entity_dropdown.dart b/lib/ui/app/entity_dropdown.dart index 7e364dc6d..e4971f27d 100644 --- a/lib/ui/app/entity_dropdown.dart +++ b/lib/ui/app/entity_dropdown.dart @@ -11,19 +11,20 @@ import 'package:flutter_redux/flutter_redux.dart'; // Project imports: import 'package:invoiceninja_flutter/.env.dart'; +import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/ui/app/app_border.dart'; import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart'; import 'package:invoiceninja_flutter/ui/app/responsive_padding.dart'; import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart'; +import 'package:invoiceninja_flutter/utils/colors.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; class EntityDropdown extends StatefulWidget { const EntityDropdown({ - @required Key key, @required this.entityType, @required this.labelText, @required this.onSelected, @@ -38,7 +39,7 @@ class EntityDropdown extends StatefulWidget { this.onFieldSubmitted, this.overrideSuggestedAmount, this.overrideSuggestedLabel, - }) : super(key: key); + }); final EntityType entityType; final List entityList; @@ -81,6 +82,15 @@ class _EntityDropdownState extends State { } } + @override + void didUpdateWidget(oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.entityId != oldWidget.entityId) { + _textController.text = _entityMap[widget.entityId]?.listDisplayName ?? ''; + } + } + @override void didChangeDependencies() { final state = StoreProvider.of(context).state; @@ -262,6 +272,8 @@ class _EntityDropdownState extends State { optionsViewBuilder: (BuildContext context, AutocompleteOnSelected onSelected, Iterable options) { + final highlightedIndex = AutocompleteHighlightedOption.of(context); + return Theme( data: theme, child: Align( @@ -277,7 +289,12 @@ class _EntityDropdownState extends State { itemCount: options.length, itemBuilder: (BuildContext context, int index) { return Container( - color: Theme.of(context).cardColor, + color: highlightedIndex == index + ? convertHexStringToColor( + state.prefState.enableDarkMode + ? kDefaultDarkSelectedColor + : kDefaultLightSelectedColor) + : Theme.of(context).cardColor, child: _EntityListTile( onTap: (entity) => onSelected(entity), entity: options.elementAt(index), diff --git a/lib/ui/app/forms/client_picker.dart b/lib/ui/app/forms/client_picker.dart index ffcd8b9be..305d7d2f6 100644 --- a/lib/ui/app/forms/client_picker.dart +++ b/lib/ui/app/forms/client_picker.dart @@ -37,7 +37,6 @@ class ClientPicker extends StatelessWidget { final state = store.state; return EntityDropdown( - key: ValueKey('__client_${clientId}__'), entityType: EntityType.client, labelText: localization.client, entityId: clientId, diff --git a/lib/ui/app/forms/dynamic_selector.dart b/lib/ui/app/forms/dynamic_selector.dart index cba5b5baa..9fb8edacb 100644 --- a/lib/ui/app/forms/dynamic_selector.dart +++ b/lib/ui/app/forms/dynamic_selector.dart @@ -65,7 +65,6 @@ class DynamicSelector extends StatelessWidget { ); } else { return EntityDropdown( - key: ValueKey('__entity_id_${entityId}__'), labelText: labelText ?? localization.lookup('$entityType'), entityType: entityType, onSelected: (entity) => onChanged(entity?.id), diff --git a/lib/ui/client/edit/client_edit_billing_address.dart b/lib/ui/client/edit/client_edit_billing_address.dart index b744e05d6..874c1bcbd 100644 --- a/lib/ui/client/edit/client_edit_billing_address.dart +++ b/lib/ui/client/edit/client_edit_billing_address.dart @@ -138,7 +138,6 @@ class ClientEditBillingAddressState extends State { onSavePressed: viewModel.onSavePressed, ), EntityDropdown( - key: ValueKey('__country_${client.countryId}__'), entityType: EntityType.country, entityList: memoizedCountryList(viewModel.staticState.countryMap), labelText: localization.country, diff --git a/lib/ui/client/edit/client_edit_notes.dart b/lib/ui/client/edit/client_edit_notes.dart index d74b9e088..16e830c01 100644 --- a/lib/ui/client/edit/client_edit_notes.dart +++ b/lib/ui/client/edit/client_edit_notes.dart @@ -120,7 +120,6 @@ class ClientEditNotesState extends State { showBlank: true, ), EntityDropdown( - key: ValueKey('__industry_${client.industryId}__'), entityType: EntityType.industry, entityList: memoizedIndustryList(viewModel.staticState.industryMap), labelText: localization.industry, diff --git a/lib/ui/client/edit/client_edit_settings.dart b/lib/ui/client/edit/client_edit_settings.dart index f599dbd5b..ce7a2f594 100644 --- a/lib/ui/client/edit/client_edit_settings.dart +++ b/lib/ui/client/edit/client_edit_settings.dart @@ -95,7 +95,6 @@ class ClientEditSettingsState extends State { : null, children: [ EntityDropdown( - key: ValueKey('__currency_${client.currencyId}__'), entityType: EntityType.currency, entityList: memoizedCurrencyList(viewModel.staticState.currencyMap), labelText: localization.currency, @@ -104,7 +103,6 @@ class ClientEditSettingsState extends State { .rebuild((b) => b..settings.currencyId = currency?.id ?? '')), ), EntityDropdown( - key: ValueKey('__language_${client.languageId}__'), entityType: EntityType.language, entityList: memoizedLanguageList(viewModel.staticState.languageMap), labelText: localization.language, diff --git a/lib/ui/client/edit/client_edit_shipping_address.dart b/lib/ui/client/edit/client_edit_shipping_address.dart index 4f1430c7c..0f3efd26e 100644 --- a/lib/ui/client/edit/client_edit_shipping_address.dart +++ b/lib/ui/client/edit/client_edit_shipping_address.dart @@ -134,7 +134,6 @@ class ClientEditShippingAddressState extends State { onSavePressed: viewModel.onSavePressed, ), EntityDropdown( - key: ValueKey('__country_${client.shippingCountryId}__'), entityType: EntityType.country, entityList: memoizedCountryList(viewModel.staticState.countryMap), labelText: localization.country, diff --git a/lib/ui/company_gateway/edit/company_gateway_edit.dart b/lib/ui/company_gateway/edit/company_gateway_edit.dart index 88aaac44b..9c790a27b 100644 --- a/lib/ui/company_gateway/edit/company_gateway_edit.dart +++ b/lib/ui/company_gateway/edit/company_gateway_edit.dart @@ -146,7 +146,6 @@ class _CompanyGatewayEditState extends State children: [ if (companyGateway.isNew) EntityDropdown( - key: ValueKey('__gateway_${companyGateway.gatewayId}__'), entityType: EntityType.gateway, entityList: memoizedGatewayList(state.staticState.gatewayMap), diff --git a/lib/ui/expense/edit/expense_edit_details.dart b/lib/ui/expense/edit/expense_edit_details.dart index e01dfccec..2ca032aa5 100644 --- a/lib/ui/expense/edit/expense_edit_details.dart +++ b/lib/ui/expense/edit/expense_edit_details.dart @@ -147,7 +147,6 @@ class ExpenseEditDetailsState extends State { autocorrect: false, ), EntityDropdown( - key: ValueKey('__vendor_${expense.vendorId}__'), //autofocus: true, entityType: EntityType.vendor, labelText: localization.vendor, @@ -164,7 +163,6 @@ class ExpenseEditDetailsState extends State { ), if (!expense.isInvoiced) ...[ EntityDropdown( - key: ValueKey('__client_${expense.clientId}__'), entityType: EntityType.client, labelText: localization.client, entityId: expense.clientId, @@ -284,7 +282,6 @@ class ExpenseEditDetailsState extends State { ), if (expense.usesInclusiveTaxes) amountField, EntityDropdown( - key: ValueKey('__currency_${expense.currencyId}__'), entityType: EntityType.currency, entityList: memoizedCurrencyList(staticState.currencyMap), labelText: localization.currency, diff --git a/lib/ui/expense/edit/expense_edit_settings.dart b/lib/ui/expense/edit/expense_edit_settings.dart index b8f3dfaea..070a537f0 100644 --- a/lib/ui/expense/edit/expense_edit_settings.dart +++ b/lib/ui/expense/edit/expense_edit_settings.dart @@ -189,8 +189,6 @@ class ExpenseEditSettingsState extends State { children: [ SizedBox(height: 8), EntityDropdown( - key: ValueKey( - '__payment_type_${expense.paymentTypeId}__'), entityType: EntityType.paymentType, entityList: memoizedPaymentTypeList(staticState.paymentTypeMap), @@ -242,8 +240,6 @@ class ExpenseEditSettingsState extends State { children: [ SizedBox(height: 8), EntityDropdown( - key: ValueKey( - '__invoice_currency_${expense.invoiceCurrencyId}__'), entityType: EntityType.currency, entityList: memoizedCurrencyList(staticState.currencyMap), diff --git a/lib/ui/invoice/edit/invoice_edit_desktop.dart b/lib/ui/invoice/edit/invoice_edit_desktop.dart index 0270bd33a..5804abb5b 100644 --- a/lib/ui/invoice/edit/invoice_edit_desktop.dart +++ b/lib/ui/invoice/edit/invoice_edit_desktop.dart @@ -251,7 +251,7 @@ class InvoiceEditDesktopState extends State children: [ if (invoice.isNew) ClientPicker( - //autofocus: true, + autofocus: true, clientId: invoice.clientId, clientState: state.clientState, onSelected: (client) { diff --git a/lib/ui/payment/edit/payment_edit.dart b/lib/ui/payment/edit/payment_edit.dart index f01aee533..17cce5d71 100644 --- a/lib/ui/payment/edit/payment_edit.dart +++ b/lib/ui/payment/edit/payment_edit.dart @@ -201,7 +201,6 @@ class _PaymentEditState extends State { children: [ if (payment.isNew) ...[ EntityDropdown( - key: ValueKey('__client_${payment.clientId}__'), entityType: EntityType.client, labelText: AppLocalization.of(context).client, entityId: payment.clientId, @@ -269,7 +268,6 @@ class _PaymentEditState extends State { ), if (payment.isApplying != true) EntityDropdown( - key: ValueKey('__type_${payment.typeId}__'), entityType: EntityType.paymentType, entityList: memoizedPaymentTypeList( viewModel.staticState.paymentTypeMap), @@ -369,8 +367,6 @@ class _PaymentEditState extends State { ), if (_showConvertCurrency) ...[ EntityDropdown( - key: ValueKey( - '__currency_${payment.exchangeCurrencyId}_${_showConvertCurrency}__'), entityType: EntityType.currency, entityList: memoizedCurrencyList(viewModel.staticState.currencyMap), @@ -644,7 +640,6 @@ class _PaymentableEditorState extends State { if (widget.entityType == EntityType.invoice) Expanded( child: EntityDropdown( - key: ValueKey('__invoice_${paymentable.invoiceId}__'), allowClearing: false, entityType: EntityType.invoice, labelText: AppLocalization.of(context).invoice, @@ -675,7 +670,6 @@ class _PaymentableEditorState extends State { if (widget.entityType == EntityType.credit) Expanded( child: EntityDropdown( - key: ValueKey('__credit_${paymentable.creditId}__'), allowClearing: false, entityType: EntityType.credit, labelText: AppLocalization.of(context).credit, diff --git a/lib/ui/payment/refund/payment_refund.dart b/lib/ui/payment/refund/payment_refund.dart index 8a250df57..b5d6eb603 100644 --- a/lib/ui/payment/refund/payment_refund.dart +++ b/lib/ui/payment/refund/payment_refund.dart @@ -319,7 +319,6 @@ class _PaymentableEditorState extends State { children: [ Expanded( child: EntityDropdown( - key: ValueKey('__invoice_${paymentable.invoiceId}__'), allowClearing: false, entityType: EntityType.invoice, labelText: AppLocalization.of(context).invoice, diff --git a/lib/ui/project/edit/project_edit.dart b/lib/ui/project/edit/project_edit.dart index c6dd5cc2d..74cdec0fd 100644 --- a/lib/ui/project/edit/project_edit.dart +++ b/lib/ui/project/edit/project_edit.dart @@ -164,7 +164,6 @@ class _ProjectEditState extends State { ), project.isNew ? EntityDropdown( - key: ValueKey('__client_${project.clientId}__'), entityType: EntityType.client, labelText: localization.client, entityId: project.clientId, diff --git a/lib/ui/settings/company_details.dart b/lib/ui/settings/company_details.dart index cf6ee1692..26236a3d5 100644 --- a/lib/ui/settings/company_details.dart +++ b/lib/ui/settings/company_details.dart @@ -330,7 +330,6 @@ class _CompanyDetailsState extends State showBlank: true, ), EntityDropdown( - key: ValueKey('__industry_${company.industryId}__'), entityType: EntityType.industry, entityList: memoizedIndustryList(state.staticState.industryMap), @@ -383,7 +382,6 @@ class _CompanyDetailsState extends State autofillHints: [AutofillHints.postalCode], ), EntityDropdown( - key: ValueKey('__country_${settings.countryId}__'), entityType: EntityType.country, entityList: memoizedCountryList(state.staticState.countryMap), @@ -475,8 +473,6 @@ class _CompanyDetailsState extends State )) .toList()), EntityDropdown( - key: ValueKey( - '__default_payment_type_${settings.defaultPaymentTypeId}__'), entityType: EntityType.paymentType, entityList: memoizedPaymentTypeList( state.staticState.paymentTypeMap), diff --git a/lib/ui/settings/invoice_design.dart b/lib/ui/settings/invoice_design.dart index 31fc0af20..6b607a8f4 100644 --- a/lib/ui/settings/invoice_design.dart +++ b/lib/ui/settings/invoice_design.dart @@ -277,7 +277,6 @@ class _InvoiceDesignState extends State LearnMoreUrl( url: 'https://fonts.google.com', child: EntityDropdown( - key: ValueKey('__primary_font_${settings.primaryFont}__'), entityType: EntityType.font, labelText: localization.primaryFont, entityId: settings.primaryFont, @@ -287,8 +286,6 @@ class _InvoiceDesignState extends State ), ), EntityDropdown( - key: ValueKey( - '__secondary_fond_${settings.secondaryFont}__'), entityType: EntityType.font, labelText: localization.secondaryFont, entityId: settings.secondaryFont, diff --git a/lib/ui/settings/localization_settings.dart b/lib/ui/settings/localization_settings.dart index f0185db3a..0b7ce8948 100644 --- a/lib/ui/settings/localization_settings.dart +++ b/lib/ui/settings/localization_settings.dart @@ -142,7 +142,6 @@ class _LocalizationSettingsState extends State FormCard( children: [ EntityDropdown( - key: ValueKey('__currency_${settings.currencyId}__'), entityType: EntityType.currency, entityList: memoizedCurrencyList(state.staticState.currencyMap), @@ -171,7 +170,6 @@ class _LocalizationSettingsState extends State url: kTransifexURL, label: localization.helpTranslate, child: EntityDropdown( - key: ValueKey('__language_${settings.languageId}__'), entityType: EntityType.language, entityList: memoizedLanguageList(state.staticState.languageMap), @@ -183,7 +181,6 @@ class _LocalizationSettingsState extends State ), ), EntityDropdown( - key: ValueKey('__timezone_${settings.timezoneId}__'), entityType: EntityType.timezone, entityList: memoizedTimezoneList(state.staticState.timezoneMap), @@ -194,7 +191,6 @@ class _LocalizationSettingsState extends State .rebuild((b) => b..timezoneId = timezone?.id)), ), EntityDropdown( - key: ValueKey('__date_format_${settings.dateFormatId}__'), entityType: EntityType.dateFormat, entityList: memoizedDateFormatList(state.staticState.dateFormatMap), diff --git a/lib/ui/settings/settings_wizard.dart b/lib/ui/settings/settings_wizard.dart index ff1d8d165..1ff49370f 100644 --- a/lib/ui/settings/settings_wizard.dart +++ b/lib/ui/settings/settings_wizard.dart @@ -248,7 +248,6 @@ class _SettingsWizardState extends State { ); final currency = EntityDropdown( - key: ValueKey('__currency_${_currencyId}__'), entityType: EntityType.currency, entityList: memoizedCurrencyList(state.staticState.currencyMap), labelText: localization.currency, @@ -260,7 +259,6 @@ class _SettingsWizardState extends State { ); final language = EntityDropdown( - key: ValueKey('__language_${_languageId}__'), entityType: EntityType.language, entityList: memoizedLanguageList(state.staticState.languageMap), labelText: localization.language, diff --git a/lib/ui/subscription/edit/subscription_edit.dart b/lib/ui/subscription/edit/subscription_edit.dart index 65f2e41bc..d8c173e24 100644 --- a/lib/ui/subscription/edit/subscription_edit.dart +++ b/lib/ui/subscription/edit/subscription_edit.dart @@ -252,7 +252,6 @@ class _SubscriptionEditState extends State isLast: true, children: [ EntityDropdown( - key: ValueKey('__products_${subscription.productIds}__'), entityType: EntityType.product, entityList: dropdownProductsSelector(state.productState.map, state.productState.list, state.userState.map), @@ -291,8 +290,6 @@ class _SubscriptionEditState extends State height: 16, ), EntityDropdown( - key: ValueKey( - '__recuring_products_${subscription.recurringProductIds}__'), entityType: EntityType.product, entityList: dropdownProductsSelector(state.productState.map, state.productState.list, state.userState.map), diff --git a/lib/ui/task/edit/task_edit_desktop.dart b/lib/ui/task/edit/task_edit_desktop.dart index fea3eb18d..fed627746 100644 --- a/lib/ui/task/edit/task_edit_desktop.dart +++ b/lib/ui/task/edit/task_edit_desktop.dart @@ -164,7 +164,6 @@ class _TaskEditDesktopState extends State { children: [ if (!task.isInvoiced) ...[ EntityDropdown( - key: ValueKey('__client_${task.clientId}__'), entityType: EntityType.client, labelText: localization.client, entityId: task.clientId, diff --git a/lib/ui/task/edit/task_edit_details.dart b/lib/ui/task/edit/task_edit_details.dart index 775adcce6..9041f5b30 100644 --- a/lib/ui/task/edit/task_edit_details.dart +++ b/lib/ui/task/edit/task_edit_details.dart @@ -130,7 +130,6 @@ class _TaskEditDetailsState extends State { children: [ if (!task.isInvoiced) ...[ EntityDropdown( - key: ValueKey('__client_${task.clientId}__'), entityType: EntityType.client, labelText: localization.client, entityId: task.clientId, diff --git a/lib/ui/vendor/edit/vendor_edit_address.dart b/lib/ui/vendor/edit/vendor_edit_address.dart index d69ae521f..77f32fc63 100644 --- a/lib/ui/vendor/edit/vendor_edit_address.dart +++ b/lib/ui/vendor/edit/vendor_edit_address.dart @@ -128,7 +128,6 @@ class VendorEditAddressState extends State { onSavePressed: viewModel.onSavePressed, ), EntityDropdown( - key: ValueKey('__country_${vendor.countryId}__'), entityType: EntityType.country, entityList: memoizedCountryList(viewModel.state.staticState.countryMap), diff --git a/lib/ui/vendor/edit/vendor_edit_notes.dart b/lib/ui/vendor/edit/vendor_edit_notes.dart index 4fec2d378..2df7686b6 100644 --- a/lib/ui/vendor/edit/vendor_edit_notes.dart +++ b/lib/ui/vendor/edit/vendor_edit_notes.dart @@ -94,7 +94,6 @@ class VendorEditNotesState extends State { : null, children: [ EntityDropdown( - key: ValueKey('__currency_${vendor.currencyId}__'), entityType: EntityType.currency, entityList: memoizedCurrencyList(staticState.currencyMap), labelText: localization.currency,