diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart similarity index 100% rename from packages/wyatt_ui_kit/lib/src/core/helpers/theme_helper.dart rename to packages/wyatt_ui_components/lib/src/core/utils/theme_helper.dart diff --git a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart index 4626fb50..0995251d 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart @@ -15,6 +15,7 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/src/core/utils/theme_helper.dart'; import 'package:wyatt_ui_components/src/domain/entities/theme_style.dart'; /// {@template theme_resolver} @@ -38,52 +39,35 @@ abstract class ThemeResolver, T, E> { S? Function(BuildContext context, {E? extra}) get customStyleFn; /// Compute default value from Flutter Theme or with hardcoded values. - S computeDefaultValue(BuildContext context, {E? extra}); - - S? computeExtensionValueFn( - BuildContext context, - T themeExtension, { + S computeDefaultValue( + BuildContext context, { E? extra, }); - /// Compute values from the extension if found - S? _computeExtensionValue( - BuildContext context, { + /// Compute extension value from custom component extension. + S? computeExtensionValueFn( + BuildContext context, + T? themeExtension, { E? extra, - }) { - final themeExtension = Theme.of(context).extension(); - if (themeExtension != null) { - return computeExtensionValueFn( - context, - themeExtension, - extra: extra, - ); - } - return null; - } - - /// Compute custom value - S? _computeCustomValue( - BuildContext context, { - E? extra, - }) { - final customStyle = customStyleFn( - context, - extra: extra, - ); - if (customStyle != null) { - return customStyle; - } - return null; - } + }); /// Choose most suitable style for a given context. S negotiate(BuildContext context, {E? extra}) { - S style = computeDefaultValue(context, extra: extra); - style = - style.mergeWith(_computeExtensionValue(context, extra: extra)) ?? style; - style = - style.mergeWith(_computeCustomValue(context, extra: extra)) ?? style; - return style; + final style = computeDefaultValue(context, extra: extra); + return ThemeHelper.getThemeElement( + [ + style, + computeExtensionValueFn( + context, + Theme.of(context).extension(), + extra: extra, + ), + // _computeExtensionValue(context, extra: extra), + customStyleFn(context, extra: extra) + ], + transform: (value) => value, + combine: (value, element) => value?.mergeWith(element), + ) ?? + style; } } diff --git a/packages/wyatt_ui_components/lib/src/core/utils/utils.dart b/packages/wyatt_ui_components/lib/src/core/utils/utils.dart index 17821996..ec38db81 100644 --- a/packages/wyatt_ui_components/lib/src/core/utils/utils.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/utils.dart @@ -16,4 +16,5 @@ export 'multi_color.dart'; export 'text_wrapper.dart'; +export 'theme_helper.dart'; export 'theme_resolver.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart index 505e9e37..feb496b7 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button_theme_resolver.dart @@ -80,33 +80,33 @@ class FileSelectionButtonThemeResolver extends ThemeResolver< @override FileSelectionButtonStyle? computeExtensionValueFn( BuildContext context, - FileSelectionButtonThemeExtension themeExtension, { + FileSelectionButtonThemeExtension? themeExtension, { ButtonState? extra, }) { FileSelectionButtonStyle? style; switch (extra?.state) { case ControlState.disabled: - style = themeExtension.disabledStyle; + style = themeExtension?.disabledStyle; break; case ControlState.focused: - style = themeExtension.focusedStyle; + style = themeExtension?.focusedStyle; break; case ControlState.hovered: - style = themeExtension.hoveredStyle; + style = themeExtension?.hoveredStyle; break; case ControlState.tapped: - style = themeExtension.tappedStyle; + style = themeExtension?.tappedStyle; break; case ControlState.normal: case null: - style = themeExtension.normalStyle; + style = themeExtension?.normalStyle; break; } if (extra?.isSelected ?? false) { - style = themeExtension.selectedStyle; + style = themeExtension?.selectedStyle; } if (extra?.isInvalid ?? false) { - style = themeExtension.invalidStyle; + style = themeExtension?.invalidStyle; } return style; } diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart index dfbe1349..abb6b8c3 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_theme_resolver.dart @@ -76,21 +76,21 @@ class FlatButtonThemeResolver extends ThemeResolver LoaderStyle( - colors: themeExtension.colors, - stroke: themeExtension.stroke, + colors: themeExtension?.colors, + stroke: themeExtension?.stroke, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart index 4661a264..74202562 100644 --- a/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/rich_text_builder/rich_text_builder_theme_resolver.dart @@ -43,11 +43,11 @@ class RichTextBuilderThemeResolver extends ThemeResolver RichTextBuilderStyle( - defaultStyle: themeExtension.defaultStyle, - styles: themeExtension.styles, + defaultStyle: themeExtension?.defaultStyle, + styles: themeExtension?.styles, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart index 5a3fbd0c..0791ac25 100644 --- a/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/text_inputs/text_input_theme_resolver.dart @@ -118,19 +118,19 @@ class TextInputThemeResolver extends ThemeResolver. export './linear_gradient_helper.dart'; -export './theme_helper.dart';