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';