diff --git a/lib/redux/app/app_middleware.dart b/lib/redux/app/app_middleware.dart index f65e2e89b..6d2bfbc8f 100644 --- a/lib/redux/app/app_middleware.dart +++ b/lib/redux/app/app_middleware.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:math'; import 'package:invoiceninja_flutter/.env.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -423,7 +424,9 @@ Middleware _createAccountLoaded() { } try { - for (int i = 0; i < response.userCompanies.length; i++) { + for (int i = 0; + i < min(response.userCompanies.length, kMaxNumberOfCompanies); + i++) { final UserCompanyEntity userCompany = response.userCompanies[i]; if (i == 0) { diff --git a/lib/ui/app/forms/decorated_form_field.dart b/lib/ui/app/forms/decorated_form_field.dart index b926e9a37..50da15e23 100644 --- a/lib/ui/app/forms/decorated_form_field.dart +++ b/lib/ui/app/forms/decorated_form_field.dart @@ -9,7 +9,7 @@ import 'package:material_design_icons_flutter/material_design_icons_flutter.dart class DecoratedFormField extends StatelessWidget { const DecoratedFormField({ - this.formKey, + Key key, this.controller, this.label, this.onSavePressed, @@ -36,9 +36,8 @@ class DecoratedFormField extends StatelessWidget { this.isPercent = false, this.showClear = true, this.inputFormatters, - }); + }) : super(key: key); - final Key formKey; final TextEditingController controller; final String label; final String hint; @@ -119,7 +118,7 @@ class DecoratedFormField extends StatelessWidget { } return TextFormField( - key: formKey ?? ValueKey(label), + key: ValueKey(label), // Enables tests to find fields focusNode: focusNode, controller: controller, autofocus: autofocus, diff --git a/lib/ui/app/forms/growable_form_field.dart b/lib/ui/app/forms/growable_form_field.dart index fdc5339bb..16c9995b4 100644 --- a/lib/ui/app/forms/growable_form_field.dart +++ b/lib/ui/app/forms/growable_form_field.dart @@ -8,7 +8,7 @@ class GrowableFormField extends StatefulWidget { this.initialValue, this.onChanged, this.keyboardType, - }); + }) : super(key: key); final String initialValue; final ValueChanged onChanged; @@ -45,7 +45,6 @@ class _GrowableFormFieldState extends State { @override Widget build(BuildContext context) { return DecoratedFormField( - formKey: widget.key, focusNode: _focusNode, initialValue: widget.initialValue, onChanged: widget.onChanged, diff --git a/lib/ui/app/forms/password_field.dart b/lib/ui/app/forms/password_field.dart index 1937aaf62..55c1c8556 100644 --- a/lib/ui/app/forms/password_field.dart +++ b/lib/ui/app/forms/password_field.dart @@ -35,7 +35,7 @@ class _PasswordFormFieldState extends State { final localization = AppLocalization.of(context); return DecoratedFormField( - formKey: ValueKey(widget.labelText ?? localization.password), + key: ValueKey(widget.labelText ?? localization.password), controller: widget.controller, onSavePressed: widget.onSavePressed, autocorrect: false, diff --git a/lib/ui/client/edit/client_edit_details.dart b/lib/ui/client/edit/client_edit_details.dart index b3ecd7711..77984bf15 100644 --- a/lib/ui/client/edit/client_edit_details.dart +++ b/lib/ui/client/edit/client_edit_details.dart @@ -131,7 +131,7 @@ class ClientEditDetailsState extends State { FormCard( children: [ DecoratedFormField( - formKey: ValueKey(localization.name), + key: ValueKey(localization.name), autofocus: true, controller: _nameController, validator: (String val) => !viewModel.client.hasNameSet diff --git a/lib/ui/expense/edit/expense_edit_settings.dart b/lib/ui/expense/edit/expense_edit_settings.dart index bac518602..9c06b5b4e 100644 --- a/lib/ui/expense/edit/expense_edit_settings.dart +++ b/lib/ui/expense/edit/expense_edit_settings.dart @@ -215,7 +215,7 @@ class ExpenseEditSettingsState extends State { _setCurrency(currency), ), DecoratedFormField( - formKey: ValueKey('__${expense.invoiceCurrencyId}__'), + key: ValueKey('__${expense.invoiceCurrencyId}__'), controller: _exchangeRateController, keyboardType: TextInputType.numberWithOptions(decimal: true), diff --git a/lib/ui/invoice/edit/invoice_edit_desktop.dart b/lib/ui/invoice/edit/invoice_edit_desktop.dart index bd4615171..d3d465b2e 100644 --- a/lib/ui/invoice/edit/invoice_edit_desktop.dart +++ b/lib/ui/invoice/edit/invoice_edit_desktop.dart @@ -633,7 +633,7 @@ class InvoiceEditDesktopState extends State children: [ Expanded( child: DecoratedFormField( - formKey: ValueKey( + key: ValueKey( '__exchange_rate_${invoice.clientId}__'), label: localization.exchangeRate, initialValue: formatNumber( diff --git a/lib/ui/invoice/edit/invoice_edit_details.dart b/lib/ui/invoice/edit/invoice_edit_details.dart index 5e1bb76b0..08efe4303 100644 --- a/lib/ui/invoice/edit/invoice_edit_details.dart +++ b/lib/ui/invoice/edit/invoice_edit_details.dart @@ -389,7 +389,7 @@ class InvoiceEditDetailsState extends State { .onChanged(invoice.rebuild((b) => b..designId = value?.id)), ), DecoratedFormField( - formKey: ValueKey('__exchange_rate_${invoice.clientId}__'), + key: ValueKey('__exchange_rate_${invoice.clientId}__'), label: localization.exchangeRate, initialValue: formatNumber(invoice.exchangeRate, context, formatNumberType: FormatNumberType.inputAmount), diff --git a/lib/ui/invoice/edit/invoice_edit_items_desktop.dart b/lib/ui/invoice/edit/invoice_edit_items_desktop.dart index 45c27b883..2ee743281 100644 --- a/lib/ui/invoice/edit/invoice_edit_items_desktop.dart +++ b/lib/ui/invoice/edit/invoice_edit_items_desktop.dart @@ -37,7 +37,7 @@ class InvoiceEditItemsDesktop extends StatefulWidget { class _InvoiceEditItemsDesktopState extends State { final _debouncer = Debouncer(); int _updatedAt; - + void _updateTable() { setState(() { _updatedAt = DateTime.now().millisecondsSinceEpoch; @@ -517,7 +517,7 @@ class _InvoiceEditItemsDesktopState extends State { Padding( padding: const EdgeInsets.only(right: kTableColumnGap), child: DecoratedFormField( - formKey: ValueKey('__line_item_${index}_cost__'), + key: ValueKey('__line_item_${index}_cost__'), textAlign: TextAlign.right, initialValue: formatNumber( lineItems[index].cost, context, @@ -536,7 +536,7 @@ class _InvoiceEditItemsDesktopState extends State { Padding( padding: const EdgeInsets.only(right: kTableColumnGap), child: DecoratedFormField( - formKey: ValueKey('__line_item_${index}_quantity__'), + key: ValueKey('__line_item_${index}_quantity__'), textAlign: TextAlign.right, initialValue: formatNumber( lineItems[index].quantity, context, @@ -555,7 +555,7 @@ class _InvoiceEditItemsDesktopState extends State { Padding( padding: const EdgeInsets.only(right: kTableColumnGap), child: DecoratedFormField( - formKey: ValueKey('__line_item_${index}_discount__'), + key: ValueKey('__line_item_${index}_discount__'), textAlign: TextAlign.right, initialValue: formatNumber( lineItems[index].discount, context, diff --git a/lib/ui/settings/import_export.dart b/lib/ui/settings/import_export.dart index 77353fd77..a195f8504 100644 --- a/lib/ui/settings/import_export.dart +++ b/lib/ui/settings/import_export.dart @@ -206,7 +206,7 @@ class _FileImportState extends State<_FileImport> { final field = DecoratedFormField( enabled: false, - formKey: ValueKey(uploadPart.key + + key: ValueKey(uploadPart.key + (multipartFile != null ? multipartFile.filename : '')), label: localization.lookup(uploadPart.value), initialValue: !_multipartFiles.containsKey(uploadPart.key) diff --git a/lib/ui/task/edit/task_edit_desktop.dart b/lib/ui/task/edit/task_edit_desktop.dart index 04f012b3d..36c398546 100644 --- a/lib/ui/task/edit/task_edit_desktop.dart +++ b/lib/ui/task/edit/task_edit_desktop.dart @@ -220,7 +220,7 @@ class _TaskEditDesktopState extends State { isMoney: false, ), DecoratedFormField( - formKey: ValueKey('__rate__'), + key: ValueKey('__rate__'), controller: _rateController, label: rateLabel, keyboardType: TextInputType.numberWithOptions( diff --git a/lib/ui/task/edit/task_edit_details.dart b/lib/ui/task/edit/task_edit_details.dart index 2529ed2c1..b8cd731e6 100644 --- a/lib/ui/task/edit/task_edit_details.dart +++ b/lib/ui/task/edit/task_edit_details.dart @@ -171,7 +171,7 @@ class _TaskEditDetailsState extends State { autocorrect: false, ), DecoratedFormField( - formKey: ValueKey('__rate__'), + key: ValueKey('__rate__'), controller: _rateController, label: rateLabel, keyboardType: diff --git a/lib/ui/vendor/edit/vendor_edit_details.dart b/lib/ui/vendor/edit/vendor_edit_details.dart index 3324b2e4e..5267ae99f 100644 --- a/lib/ui/vendor/edit/vendor_edit_details.dart +++ b/lib/ui/vendor/edit/vendor_edit_details.dart @@ -128,7 +128,7 @@ class VendorEditDetailsState extends State { FormCard( children: [ DecoratedFormField( - formKey: ValueKey(localization.name), + key: ValueKey(localization.name), autofocus: true, controller: _nameController, validator: (String val) => val == null || val.isEmpty diff --git a/pubspec.foss.yaml b/pubspec.foss.yaml index e859761c6..69aaef403 100644 --- a/pubspec.foss.yaml +++ b/pubspec.foss.yaml @@ -70,8 +70,8 @@ dependency_overrides: intl: ^0.17.0-nullsafety.2 dev_dependencies: - #flutter_driver: # TODO Re-enable - # sdk: flutter + flutter_driver: + sdk: flutter test: ^1.6.3 #flutter_test: # sdk: flutter diff --git a/test_driver/all_it_test.dart b/test_driver/all_it_test.dart index 2c40258c8..d2940afab 100644 --- a/test_driver/all_it_test.dart +++ b/test_driver/all_it_test.dart @@ -1,6 +1,6 @@ +import 'login_it_test.dart' as login; import 'clients_it_test.dart' as clients; import 'invoices_it_test.dart' as invoices; -import 'login_it_test.dart' as login; import 'products_it_test.dart' as products; import 'quotes_it_test.dart' as quotes; import 'vendors_it_test.dart' as vendors; @@ -8,8 +8,8 @@ import 'vendors_it_test.dart' as vendors; void main() { login.main(); //products.runTestSuite(batchMode: true); - clients.runTestSuite(batchMode: true); + //clients.runTestSuite(batchMode: true); //invoices.runTestSuite(batchMode: true); //quotes.runTestSuite(batchMode: true); - vendors.runTestSuite(batchMode: true); -} \ No newline at end of file + //vendors.runTestSuite(batchMode: true); +} diff --git a/test_driver/login_it_test.dart b/test_driver/login_it_test.dart index 957e86e98..91ebe4f17 100644 --- a/test_driver/login_it_test.dart +++ b/test_driver/login_it_test.dart @@ -25,7 +25,6 @@ void main() { // 'Resuming isolate: ${isolateRef.numberAsString}:${isolateRef.name}'); // isolateRef.resume(); //}); - }); tearDownAll(() async {