Custom colors

This commit is contained in:
Hillel Coren 2021-07-26 23:21:23 +03:00
parent d708223870
commit 988eccdb8c
2 changed files with 63 additions and 37 deletions

View File

@ -1,10 +1,14 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart'; import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/invoice_model.dart'; import 'package:invoiceninja_flutter/data/models/invoice_model.dart';
import 'package:invoiceninja_flutter/main_app.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/product/product_selectors.dart'; import 'package:invoiceninja_flutter/redux/product/product_selectors.dart';
import 'package:invoiceninja_flutter/redux/ui/pref_state.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart'; import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/forms/custom_field.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/forms/decorated_form_field.dart';
@ -13,6 +17,7 @@ import 'package:invoiceninja_flutter/ui/app/icon_text.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/tax_rate_dropdown.dart'; import 'package:invoiceninja_flutter/ui/app/invoice/tax_rate_dropdown.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_items_vm.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_items_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/colors.dart';
import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
@ -140,6 +145,9 @@ class _InvoiceEditItemsDesktopState extends State<InvoiceEditItemsDesktop> {
lastIndex++; lastIndex++;
} }
final tableHeaderColor =
state.prefState.customColors[PrefState.THEME_TABLE_HEADER_COLOR] ?? '';
return FormCard( return FormCard(
padding: const EdgeInsets.symmetric(horizontal: kMobileDialogPadding), padding: const EdgeInsets.symmetric(horizontal: kMobileDialogPadding),
child: Table( child: Table(
@ -152,42 +160,50 @@ class _InvoiceEditItemsDesktopState extends State<InvoiceEditItemsDesktop> {
defaultVerticalAlignment: TableCellVerticalAlignment.bottom, defaultVerticalAlignment: TableCellVerticalAlignment.bottom,
key: ValueKey('__datatable_${_updatedAt}__'), key: ValueKey('__datatable_${_updatedAt}__'),
children: [ children: [
TableRow(children: [ TableRow(
TableHeader(localization.item), children: [
TableHeader(localization.description), TableHeader(localization.item),
if (company.hasCustomField(customField1)) TableHeader(localization.description),
TableHeader(company.getCustomFieldLabel(customField1)), if (company.hasCustomField(customField1))
if (company.hasCustomField(customField2)) TableHeader(company.getCustomFieldLabel(customField1)),
TableHeader(company.getCustomFieldLabel(customField2)), if (company.hasCustomField(customField2))
if (company.hasCustomField(customField3)) TableHeader(company.getCustomFieldLabel(customField2)),
TableHeader(company.getCustomFieldLabel(customField3)), if (company.hasCustomField(customField3))
if (company.hasCustomField(customField4)) TableHeader(company.getCustomFieldLabel(customField3)),
TableHeader(company.getCustomFieldLabel(customField4)), if (company.hasCustomField(customField4))
if (hasTax1) TableHeader(company.getCustomFieldLabel(customField4)),
TableHeader(localization.tax + if (hasTax1)
(company.settings.enableInclusiveTaxes TableHeader(localization.tax +
? ' - ${localization.inclusive}' (company.settings.enableInclusiveTaxes
: '')), ? ' - ${localization.inclusive}'
if (hasTax2) : '')),
TableHeader(localization.tax + if (hasTax2)
(company.settings.enableInclusiveTaxes TableHeader(localization.tax +
? ' - ${localization.inclusive}' (company.settings.enableInclusiveTaxes
: '')), ? ' - ${localization.inclusive}'
if (hasTax3) : '')),
TableHeader(localization.tax + if (hasTax3)
(company.settings.enableInclusiveTaxes TableHeader(localization.tax +
? ' - ${localization.inclusive}' (company.settings.enableInclusiveTaxes
: '')), ? ' - ${localization.inclusive}'
TableHeader( : '')),
widget.isTasks ? localization.rate : localization.unitCost),
if (company.enableProductQuantity || widget.isTasks)
TableHeader( TableHeader(
widget.isTasks ? localization.hours : localization.quantity), widget.isTasks ? localization.rate : localization.unitCost),
if (company.enableProductDiscount) if (company.enableProductQuantity || widget.isTasks)
TableHeader(localization.discount), TableHeader(widget.isTasks
TableHeader(localization.lineTotal), ? localization.hours
TableHeader(''), : localization.quantity),
]), if (company.enableProductDiscount)
TableHeader(localization.discount),
TableHeader(localization.lineTotal),
TableHeader(''),
],
decoration: tableHeaderColor.isNotEmpty
? BoxDecoration(
color: convertHexStringToColor(tableHeaderColor),
)
: null,
),
for (var index = 0; index < lineItems.length; index++) for (var index = 0; index < lineItems.length; index++)
if ((lineItems[index].typeId == InvoiceItemEntity.TYPE_TASK && if ((lineItems[index].typeId == InvoiceItemEntity.TYPE_TASK &&
widget.isTasks) || widget.isTasks) ||
@ -730,9 +746,18 @@ class TableHeader extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final store = StoreProvider.of<AppState>(context);
final state = store.state;
final tableHeaderColor =
state.prefState.customColors[PrefState.THEME_TABLE_HEADER_COLOR] ?? '';
return Padding( return Padding(
padding: padding: EdgeInsets.only(
EdgeInsets.only(bottom: 8, right: isNumeric ? kTableColumnGap : 0), top: tableHeaderColor.isEmpty ? 0 : 8,
bottom: tableHeaderColor.isEmpty ? 8 : 16,
right: isNumeric ? kTableColumnGap : 0,
),
child: Text( child: Text(
label, label,
textAlign: isNumeric ? TextAlign.right : TextAlign.left, textAlign: isNumeric ? TextAlign.right : TextAlign.left,

View File

@ -323,6 +323,7 @@ class _DeviceSettingsState extends State<DeviceSettings>
PrefState.THEME_SIDEBAR_INACTIVE_BACKGROUND_COLOR, PrefState.THEME_SIDEBAR_INACTIVE_BACKGROUND_COLOR,
PrefState.THEME_SIDEBAR_INACTIVE_FONT_COLOR, PrefState.THEME_SIDEBAR_INACTIVE_FONT_COLOR,
PrefState.THEME_ALTERNATE_ROW_COLOR, PrefState.THEME_ALTERNATE_ROW_COLOR,
PrefState.THEME_TABLE_HEADER_COLOR,
] ]
.map( .map(
(selector) => FormColorPicker( (selector) => FormColorPicker(