Custom colors
This commit is contained in:
parent
d708223870
commit
988eccdb8c
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue