diff --git a/lib/ui/app/forms/design_picker.dart b/lib/ui/app/forms/design_picker.dart index c840942cb..8f7a71f2b 100644 --- a/lib/ui/app/forms/design_picker.dart +++ b/lib/ui/app/forms/design_picker.dart @@ -30,7 +30,7 @@ class DesignPicker extends StatelessWidget { return AppDropdownButton( value: initialValue, - onChanged: (dynamic value) => onSelected(designState.map[value]), + onChanged: (dynamic value) => onSelected(designState.map[value]!), items: designState.list .where((designId) { final design = designState.map[designId]; diff --git a/lib/ui/app/invoice/tax_rate_dropdown.dart b/lib/ui/app/invoice/tax_rate_dropdown.dart index 0249cb260..0c4e7376c 100644 --- a/lib/ui/app/invoice/tax_rate_dropdown.dart +++ b/lib/ui/app/invoice/tax_rate_dropdown.dart @@ -19,7 +19,7 @@ class TaxRateDropdown extends StatefulWidget { }) : super(key: key); final String? labelText; - final Function(TaxRateEntity?) onSelected; + final Function(TaxRateEntity) onSelected; final String? initialTaxName; final double? initialTaxRate; diff --git a/lib/ui/invoice/edit/invoice_edit_contacts.dart b/lib/ui/invoice/edit/invoice_edit_contacts.dart index 32531b2aa..0be1525fe 100644 --- a/lib/ui/invoice/edit/invoice_edit_contacts.dart +++ b/lib/ui/invoice/edit/invoice_edit_contacts.dart @@ -62,7 +62,7 @@ class InvoiceEditContacts extends StatelessWidget { invoice: invoice, invitation: invitation, onTap: () => invitation == null - ? viewModel.onAddVendorContact(contact) + ? viewModel.onAddVendorContact(contact!) : viewModel.onRemoveContact(invitation), ); }).toList(), @@ -97,7 +97,7 @@ class InvoiceEditContacts extends StatelessWidget { invoice: invoice, invitation: invitation, onTap: () => invitation == null - ? viewModel.onAddClientContact(contact) + ? viewModel.onAddClientContact(contact!) : viewModel.onRemoveContact(invitation), ); }).toList(), diff --git a/lib/ui/invoice/edit/invoice_edit_contacts_vm.dart b/lib/ui/invoice/edit/invoice_edit_contacts_vm.dart index 20ff1220c..ee439bf8f 100644 --- a/lib/ui/invoice/edit/invoice_edit_contacts_vm.dart +++ b/lib/ui/invoice/edit/invoice_edit_contacts_vm.dart @@ -53,8 +53,8 @@ class EntityEditContactsVM { final InvoiceEntity? invoice; final ClientEntity? client; final VendorEntity? vendor; - final Function(ClientContactEntity?) onAddClientContact; - final Function(VendorContactEntity?) onAddVendorContact; + final Function(ClientContactEntity) onAddClientContact; + final Function(VendorContactEntity) onAddVendorContact; final Function(InvitationEntity) onRemoveContact; } diff --git a/lib/ui/invoice/edit/invoice_edit_desktop.dart b/lib/ui/invoice/edit/invoice_edit_desktop.dart index 12d741e33..79088d60f 100644 --- a/lib/ui/invoice/edit/invoice_edit_desktop.dart +++ b/lib/ui/invoice/edit/invoice_edit_desktop.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; // Package imports: import 'package:flutter_redux/flutter_redux.dart'; +import 'package:invoiceninja_flutter/data/models/client_model.dart'; import 'package:invoiceninja_flutter/data/models/vendor_model.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart'; @@ -304,8 +305,8 @@ class InvoiceEditDesktopState extends State clientId: invoice.clientId, clientState: state.clientState, onSelected: (client) { - viewModel.onClientChanged!( - context, invoice, client as ClientEntity?); + viewModel.onClientChanged!(context, invoice, + client as ClientEntity?); }, onAddPressed: (completer) => viewModel .onAddClientPressed!(context, completer), @@ -370,8 +371,8 @@ class InvoiceEditDesktopState extends State items: kFrequencies.entries .map((entry) => DropdownMenuItem( value: entry.key, - child: Text( - localization.lookup(entry.value)!), + child: Text(localization + .lookup(entry.value)!), )) .toList()), DatePicker( @@ -389,8 +390,8 @@ class InvoiceEditDesktopState extends State labelText: localization.remainingCycles, value: invoice.remainingCycles, blankValue: null, - onChanged: (dynamic value) => viewModel.onChanged!( - invoice.rebuild( + onChanged: (dynamic value) => + viewModel.onChanged!(invoice.rebuild( (b) => b..remainingCycles = value)), items: [ DropdownMenuItem( @@ -570,7 +571,8 @@ class InvoiceEditDesktopState extends State .map((type) => Text(localization.lookup(type)!)) .toList(), - onChanged: (dynamic value) => viewModel.onChanged!( + onChanged: (dynamic value) => viewModel + .onChanged!( invoice.rebuild((b) => b..autoBill = value)), items: [ SettingsEntity.AUTO_BILL_ALWAYS, @@ -800,8 +802,8 @@ class InvoiceEditDesktopState extends State UserPicker( userId: invoice.assignedUserId, onChanged: (userId) => viewModel - .onChanged!(invoice.rebuild((b) => - b..assignedUserId = userId)), + .onChanged!(invoice.rebuild((b) => b + ..assignedUserId = userId)), ), if (company .isModuleEnabled(EntityType.project)) @@ -836,8 +838,8 @@ class InvoiceEditDesktopState extends State clientId: invoice.clientId, clientState: state.clientState, onSelected: (client) { - viewModel.onChanged!(invoice.rebuild( - (b) => b + viewModel.onChanged!( + invoice.rebuild((b) => b ..clientId = client?.id ?? '')); }, @@ -876,8 +878,7 @@ class InvoiceEditDesktopState extends State FormatNumberType.inputMoney), onChanged: (value) => viewModel .onChanged!(invoice.rebuild((b) => b - ..exchangeRate = - parseDouble(value))), + ..exchangeRate = parseDouble(value))), keyboardType: TextInputType.numberWithOptions( decimal: true), @@ -905,8 +906,8 @@ class InvoiceEditDesktopState extends State value: invoice .usesInclusiveTaxes, onChanged: (value) { - viewModel.onChanged!(invoice - .rebuild((b) => b + viewModel.onChanged!( + invoice.rebuild((b) => b ..usesInclusiveTaxes = value)); }, @@ -932,8 +933,8 @@ class InvoiceEditDesktopState extends State value: invoice.autoBillEnabled, onChanged: (value) { - viewModel.onChanged!(invoice - .rebuild((b) => b + viewModel.onChanged!( + invoice.rebuild((b) => b ..autoBillEnabled = value)); }, @@ -955,8 +956,8 @@ class InvoiceEditDesktopState extends State originalInvoice.documents.toList(), onUploadDocument: (path, isPrivate) => widget.entityViewModel - .onUploadDocuments!( - context, path, isPrivate), + .onUploadDocuments!( + context, path, isPrivate), onRenamedDocument: () => store.dispatch( LoadInvoice(invoiceId: invoice.id)), ) @@ -1030,8 +1031,8 @@ class InvoiceEditDesktopState extends State invoice.taxName1.isNotEmpty) TaxRateDropdown( onSelected: (taxRate) { - viewModel - .onChanged!(invoice.applyTax(taxRate)); + viewModel.onChanged!( + invoice.applyTax(taxRate!)); }, labelText: localization.tax + (company.settings.enableInclusiveTaxes! @@ -1045,7 +1046,7 @@ class InvoiceEditDesktopState extends State TaxRateDropdown( onSelected: (taxRate) { viewModel.onChanged!(invoice - .applyTax(taxRate, isSecond: true)); + .applyTax(taxRate!, isSecond: true)); }, labelText: localization.tax + (company.settings.enableInclusiveTaxes! @@ -1059,9 +1060,7 @@ class InvoiceEditDesktopState extends State TaxRateDropdown( onSelected: (taxRate) { final updatedInvoice = invoice - .applyTax(taxRate, isThird: true); - print( - '## UPDATED\nRate 3: ${updatedInvoice.taxName3} => ${updatedInvoice.taxRate3}'); + .applyTax(taxRate!, isThird: true); viewModel.onChanged!(invoice .applyTax(taxRate, isThird: true)); }, diff --git a/lib/ui/invoice/edit/invoice_edit_details.dart b/lib/ui/invoice/edit/invoice_edit_details.dart index 9cfb72206..fa735d048 100644 --- a/lib/ui/invoice/edit/invoice_edit_details.dart +++ b/lib/ui/invoice/edit/invoice_edit_details.dart @@ -424,7 +424,7 @@ class InvoiceEditDetailsState extends State { invoice.taxName1.isNotEmpty) TaxRateDropdown( onSelected: (taxRate) => - viewModel.onChanged!(invoice.applyTax(taxRate)), + viewModel.onChanged!(invoice.applyTax(taxRate!)), labelText: localization.tax + (company.settings.enableInclusiveTaxes! ? ' - ${localization.inclusive}' diff --git a/lib/ui/settings/import_export.dart b/lib/ui/settings/import_export.dart index 9266f1e18..41e4de804 100644 --- a/lib/ui/settings/import_export.dart +++ b/lib/ui/settings/import_export.dart @@ -189,7 +189,7 @@ class _ImportExportState extends State { ) else _FileMapper( - key: ValueKey(_response.hash), + key: ValueKey(_response!.hash), importType: _importFormat, formKey: _formKey, response: _response, @@ -220,8 +220,8 @@ class _ImportExportState extends State { ] .map((importType) => DropdownMenuItem( value: importType, - child: - Text(localization.lookup('$importType')!))) + child: Text( + localization.lookup('$importType')!))) .toList()), ), ), @@ -253,7 +253,8 @@ class _ImportExportState extends State { items: DATE_FIELDS[_exportType]! .map((dateField) => DropdownMenuItem( value: dateField, - child: Text(localization.lookup('$dateField')!))) + child: + Text(localization.lookup('$dateField')!))) .toList(), ), if (_exportDate.isNotEmpty) @@ -777,7 +778,7 @@ class __FileMapperState extends State<_FileMapper> { setState(() => _isLoading = true); final importRequest = ImportRequest( - hash: widget.response.hash, + hash: widget.response!.hash, skipHeader: _useFirstRowAsHeaders, columnMap: BuiltMap(convertedMapping), importType: widget.importType.name, @@ -862,7 +863,8 @@ class _FieldMapper extends StatelessWidget { isExpanded: true, value: available.contains(mappedTo) ? mappedTo : null, validator: (value) => (value ?? '').isNotEmpty && - mapping!.values.where((element) => element == value).length > 1 + mapping!.values.where((element) => element == value).length > + 1 ? localization!.duplicateColumnMapping : null, onChanged: onMappedToChanged as void Function(String?)?, diff --git a/lib/ui/settings/invoice_design.dart b/lib/ui/settings/invoice_design.dart index eee4b230d..9299d7192 100644 --- a/lib/ui/settings/invoice_design.dart +++ b/lib/ui/settings/invoice_design.dart @@ -1,9 +1,11 @@ // Flutter imports: +import 'dart:async'; import 'dart:convert'; // Package imports: import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; +import 'package:http/http.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/purchase_order_model.dart'; import 'package:invoiceninja_flutter/data/models/quote_model.dart'; @@ -144,7 +146,9 @@ class _InvoiceDesignState extends State ..companyLogoSize = logoSize.isEmpty ? '' : logoSize + - (viewModel.settings.companyLogoSize!.contains('px') ? 'px' : '%')); + (viewModel.settings.companyLogoSize!.contains('px') + ? 'px' + : '%')); if (settings != viewModel.settings) { _debouncer.run(() { viewModel.onSettingsChanged(settings); diff --git a/lib/ui/subscription/edit/subscription_edit.dart b/lib/ui/subscription/edit/subscription_edit.dart index 72a1199bb..6b9890cf5 100644 --- a/lib/ui/subscription/edit/subscription_edit.dart +++ b/lib/ui/subscription/edit/subscription_edit.dart @@ -296,7 +296,7 @@ class _SubscriptionEditState extends State onSelected: (value) { final parts = subscription.recurringProductIds.split(','); viewModel.onChanged(subscription.rebuild((b) => b - ..recurringProductIds = [...parts, value.id] + ..recurringProductIds = [...parts, value!.id] .where((part) => part.isNotEmpty) .join(',')));