diff --git a/packages/wyatt_ui_components/lib/src/core/core.dart b/packages/wyatt_ui_components/lib/src/core/core.dart index d850e320..a18f1e81 100644 --- a/packages/wyatt_ui_components/lib/src/core/core.dart +++ b/packages/wyatt_ui_components/lib/src/core/core.dart @@ -18,5 +18,4 @@ export 'enums/control_state.dart'; export 'extensions/build_context_extensions.dart'; export 'extensions/string_extension.dart'; export 'mixins/copy_with_mixin.dart'; -export 'utils/multi_color.dart'; -export 'utils/text_wrapper.dart'; +export 'utils/utils.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_resolver.dart b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart similarity index 94% rename from packages/wyatt_ui_kit/lib/src/core/helpers/theme_resolver.dart rename to packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart index f54aeaa3..08c04a3b 100644 --- a/packages/wyatt_ui_kit/lib/src/core/helpers/theme_resolver.dart +++ b/packages/wyatt_ui_components/lib/src/core/utils/theme_resolver.dart @@ -15,7 +15,6 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; -import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart'; /// {@template theme_resolver} /// In charge of theme negotiation and merge. @@ -72,7 +71,7 @@ abstract class ThemeResolver { return previousPhaseValue; } - T? findExtension(BuildContext context) => context.themeExtension(); + T? findExtension(BuildContext context) => Theme.of(context).extension(); /// Choose most suitable style for a given context. S negotiate(BuildContext context, {E? extra}) { diff --git a/packages/wyatt_ui_components/lib/src/core/utils/utils.dart b/packages/wyatt_ui_components/lib/src/core/utils/utils.dart new file mode 100644 index 00000000..17821996 --- /dev/null +++ b/packages/wyatt_ui_components/lib/src/core/utils/utils.dart @@ -0,0 +1,19 @@ +// Copyright (C) 2023 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +export 'multi_color.dart'; +export 'text_wrapper.dart'; +export 'theme_resolver.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart index 32b93910..a5c285d5 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/button_component.dart @@ -26,6 +26,7 @@ abstract class ButtonComponent extends Component { this.selectedStyle, this.invalidStyle, this.onPressed, + this.themeResolver, super.key, }); @@ -52,4 +53,7 @@ abstract class ButtonComponent extends Component { /// Callback on button press final void Function(ControlState state)? onPressed; + + /// Theme Resolver for this component + final ThemeResolver? themeResolver; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart index 4d08b13e..b0e5866b 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/file_selection_button_component.dart @@ -36,6 +36,7 @@ abstract class FileSelectionButtonComponent extends ButtonComponent super.selectedStyle, super.invalidStyle, super.onPressed, + super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart index 97ef3ff4..83420a59 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/flat_button_component.dart @@ -34,6 +34,7 @@ abstract class FlatButtonComponent extends ButtonComponent super.focusedStyle, super.tappedStyle, super.onPressed, + super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart index 89b42dbe..b9a3c746 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/simple_icon_button_component.dart @@ -31,6 +31,7 @@ abstract class SimpleIconButtonComponent extends ButtonComponent super.focusedStyle, super.tappedStyle, super.onPressed, + super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart index a811af66..a09255d0 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/buttons/symbol_button_component.dart @@ -34,6 +34,7 @@ abstract class SymbolButtonComponent extends ButtonComponent super.tappedStyle, super.selectedStyle, super.onPressed, + super.themeResolver, super.key, }); diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart index d7520b4e..aeebaa43 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.dart @@ -40,7 +40,7 @@ class FileSelectionButton extends FileSelectionButtonComponent super.invalidStyle, super.onPressed, super.mainAxisSize, - this.themeResolver, + super.themeResolver, super.key, }); @@ -76,8 +76,10 @@ class FileSelectionButton extends FileSelectionButtonComponent @override FileSelectionButtonStyle? get invalidStyle => super.invalidStyle as FileSelectionButtonStyle?; - - final FileSelectionButtonThemeResolver? themeResolver; + + @override + FileSelectionButtonThemeResolver? get themeResolver => + super.themeResolver as FileSelectionButtonThemeResolver?; @override Widget build(BuildContext context) => exportBloc( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart index d4fdf1d7..45b7eca4 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/file_selection_button/file_selection_button.g.dart @@ -45,6 +45,10 @@ class $FileSelectionButtonCWProxyImpl FileSelectionButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override + FileSelectionButton themeResolver( + ThemeResolver? themeResolver) => + this(themeResolver: themeResolver); + @override FileSelectionButton key(Key? key) => this(key: key); @override FileSelectionButton call({ @@ -60,6 +64,7 @@ class $FileSelectionButtonCWProxyImpl ButtonStyle? selectedStyle, ButtonStyle? invalidStyle, void Function(ControlState)? onPressed, + ThemeResolver? themeResolver, Key? key, }) => FileSelectionButton( 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 8d326abf..85cccdcf 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 @@ -17,7 +17,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/theme_resolver.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class FileSelectionButtonThemeResolver extends ThemeResolver< diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart index e5cf5093..123b91c2 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.dart @@ -38,7 +38,7 @@ class FlatButton extends FlatButtonComponent super.tappedStyle, super.onPressed, super.mainAxisSize, - this.themeResolver, + super.themeResolver, super.key, }); @@ -62,7 +62,9 @@ class FlatButton extends FlatButtonComponent @override FlatButtonStyle? get tappedStyle => super.tappedStyle as FlatButtonStyle?; - final FlatButtonThemeResolver? themeResolver; + @override + FlatButtonThemeResolver? get themeResolver => + super.themeResolver as FlatButtonThemeResolver?; @override Widget build(BuildContext context) => exportBloc( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart index cf5fdf0f..2fb990d5 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button.g.dart @@ -37,6 +37,10 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { FlatButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override + FlatButton themeResolver( + ThemeResolver? themeResolver) => + this(themeResolver: themeResolver); + @override FlatButton key(Key? key) => this(key: key); @override FlatButton call({ @@ -50,6 +54,7 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy { ButtonStyle? focusedStyle, ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, + ThemeResolver? themeResolver, Key? key, }) => FlatButton( 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 3e125b21..c48c6b8e 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 @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/theme_resolver.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class FlatButtonThemeResolver extends ThemeResolver + @override FlatButtonStyle computeDefaultValue( BuildContext context, { ControlState? extra, diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart index 6913ab37..0322265a 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.dart @@ -35,7 +35,7 @@ class SimpleIconButton extends SimpleIconButtonComponent super.focusedStyle, super.tappedStyle, super.onPressed, - this.themeResolver, + super.themeResolver, super.key, }); @@ -64,7 +64,9 @@ class SimpleIconButton extends SimpleIconButtonComponent SimpleIconButtonStyle? get tappedStyle => super.tappedStyle as SimpleIconButtonStyle?; - final SimpleIconButtonThemeResolver? themeResolver; + @override + SimpleIconButtonThemeResolver? get themeResolver => + super.themeResolver as SimpleIconButtonThemeResolver?; @override Widget build(BuildContext context) => exportBloc( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart index 31464a10..79bfba6a 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button.g.dart @@ -31,6 +31,10 @@ class $SimpleIconButtonCWProxyImpl SimpleIconButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override + SimpleIconButton themeResolver( + ThemeResolver? themeResolver) => + this(themeResolver: themeResolver); + @override SimpleIconButton key(Key? key) => this(key: key); @override SimpleIconButton call({ @@ -41,6 +45,7 @@ class $SimpleIconButtonCWProxyImpl ButtonStyle? focusedStyle, ButtonStyle? tappedStyle, void Function(ControlState)? onPressed, + ThemeResolver? themeResolver, Key? key, }) => SimpleIconButton( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart index a6dc37ba..5062d231 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/simple_icon_button/simple_icon_button_theme_resolver.dart @@ -16,7 +16,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/theme_resolver.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class SimpleIconButtonThemeResolver extends ThemeResolver super.selectedStyle as SymbolButtonStyle?; - final SymbolButtonThemeResolver? themeResolver; + @override + SymbolButtonThemeResolver? get themeResolver => + super.themeResolver as SymbolButtonThemeResolver?; @override Widget build(BuildContext context) => exportBloc( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart index 2f0fd363..c7e06ab2 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button.g.dart @@ -38,6 +38,10 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { SymbolButton onPressed(void Function(ControlState)? onPressed) => this(onPressed: onPressed); @override + SymbolButton themeResolver( + ThemeResolver? themeResolver) => + this(themeResolver: themeResolver); + @override SymbolButton key(Key? key) => this(key: key); @override SymbolButton call({ @@ -51,6 +55,7 @@ class $SymbolButtonCWProxyImpl implements $SymbolButtonComponentCWProxy { ButtonStyle? tappedStyle, ButtonStyle? selectedStyle, void Function(ControlState)? onPressed, + ThemeResolver? themeResolver, Key? key, }) => SymbolButton( diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart index ed446330..c0f21f63 100644 --- a/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart +++ b/packages/wyatt_ui_kit/lib/src/components/buttons/symbol_button/symbol_button_theme_resolver.dart @@ -17,7 +17,6 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/src/components/buttons/cubit/button_cubit.dart'; -import 'package:wyatt_ui_kit/src/core/helpers/theme_resolver.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; class SymbolButtonThemeResolver extends ThemeResolver - SymbolButtonStyle( - label: context.textTheme.labelLarge, - dimension: context.buttonTheme.height, - radius: (context.buttonTheme.shape is RoundedRectangleBorder) - ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius - : null, - padding: context.buttonTheme.padding, - foregroundColors: MultiColor.single(context.colorScheme.onPrimary), - backgroundColors: MultiColor.single(context.colorScheme.primary), - ); + }) { + MultiColor backgroundColor = MultiColor.single(context.colorScheme.primary); + MultiColor foregroundColor = + MultiColor.single(context.colorScheme.onPrimary); + + switch (extra?.state) { + case ControlState.disabled: + backgroundColor = + MultiColor.single(context.colorScheme.onSurface.withOpacity(0.12)); + foregroundColor = + MultiColor.single(context.colorScheme.onSurface.withOpacity(0.38)); + break; + case ControlState.hovered: + backgroundColor = + MultiColor.single(context.colorScheme.primary.withOpacity(0.92)); + break; + case ControlState.tapped: + backgroundColor = + MultiColor.single(context.colorScheme.primary.withOpacity(0.92)); + break; + case null: + case ControlState.normal: + case ControlState.focused: + break; + } + + return SymbolButtonStyle( + label: context.textTheme.labelLarge, + dimension: context.buttonTheme.height, + radius: (context.buttonTheme.shape is RoundedRectangleBorder) + ? (context.buttonTheme.shape as RoundedRectangleBorder).borderRadius + : null, + padding: context.buttonTheme.padding, + foregroundColors: foregroundColor, + backgroundColors: backgroundColor, + ); + } @override final SymbolButtonStyle? Function(