diff --git a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart
index 2bcd564c..3b049711 100644
--- a/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart
+++ b/packages/wyatt_ui_kit/example/lib/buttons/buttons.dart
@@ -14,14 +14,17 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-import 'package:flutter/material.dart' hide OutlinedButton;
+import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
import 'package:wyatt_ui_kit/wyatt_ui_kit.dart';
const _color1 = Color(0xFF3C97FB);
const _color2 = Color(0xFF446DF4);
+const _color3 = Color.fromARGB(255, 26, 132, 247);
+const _color4 = Color.fromARGB(255, 19, 68, 228);
const _colors = [_color1, _color2];
+const _colorsDarken = [_color2, _color3];
const _disabled = Color(0xFF6B7280);
const _background = Color(0xFF16191D);
const _disabledBackground = Color(0xFF16191D + 0x66FFFFFF);
@@ -38,19 +41,31 @@ class Buttons extends StatelessWidget {
style: Theme.of(context).textTheme.titleLarge,
),
const Gap(20),
- const OutlinedButton(
- label: TextWrapper('Voir notre savoir faire', gradient: _colors),
- style: OutlinedButtonStyle(
+ const FlatButton(
+ label: TextWrapper('Voir notre savoir faire'),
+ normalStyle: FlatButtonStyle(
+ foregroundColors: MultiColor(_colors),
+ backgroundColors: MultiColor.single(Colors.transparent),
borderColors: MultiColor(_colors),
stroke: 3,
),
+ hoveredStyle: FlatButtonStyle(
+ foregroundColors: MultiColor.single(Colors.white),
+ backgroundColors: MultiColor(_colors),
+ borderColors: MultiColor(_colors),
+ stroke: 3,
+ ),
+ tappedStyle: FlatButtonStyle(
+ foregroundColors: MultiColor.single(Colors.white),
+ backgroundColors: MultiColor(_colorsDarken),
+ borderColors: MultiColor(_colorsDarken),
+ stroke: 3,
+ ),
prefix: Icon(
Icons.arrow_forward_rounded,
- color: _color1,
),
suffix: Icon(
Icons.arrow_forward_rounded,
- color: _color2,
),
),
const Gap(20),
@@ -60,7 +75,7 @@ class Buttons extends StatelessWidget {
style:
context.textTheme.titleLarge?.copyWith(color: Colors.white),
),
- style: const FlatButtonStyle(
+ normalStyle: const FlatButtonStyle(
backgroundColors: MultiColor(_colors),
),
prefix: const Icon(
@@ -82,13 +97,13 @@ class Buttons extends StatelessWidget {
Column(
children: [
const Gap(20),
- OutlinedButton(
+ FlatButton(
label: TextWrapper(
'Démarrer mon projet',
style: context.textTheme.titleLarge
?.copyWith(color: _disabled),
),
- style: const OutlinedButtonStyle(
+ normalStyle: const FlatButtonStyle(
borderColors: MultiColor(_disabledColors),
backgroundColors:
MultiColor.single(_disabledBackground),
@@ -102,7 +117,7 @@ class Buttons extends StatelessWidget {
style: context.textTheme.titleLarge
?.copyWith(color: Colors.white),
),
- style: const FlatButtonStyle(
+ normalStyle: const FlatButtonStyle(
backgroundColors: MultiColor(_colors),
),
),
@@ -113,13 +128,13 @@ class Buttons extends StatelessWidget {
Column(
children: [
const Gap(20),
- OutlinedButton(
+ FlatButton(
label: TextWrapper(
'Aller voir nos réalisations',
style: context.textTheme.titleLarge
?.copyWith(color: Colors.white),
),
- style: const OutlinedButtonStyle(
+ normalStyle: const FlatButtonStyle(
borderColors: MultiColor(_colors),
backgroundColors:
MultiColor.single(_disabledBackground),
@@ -137,7 +152,7 @@ class Buttons extends StatelessWidget {
style: context.textTheme.titleLarge
?.copyWith(color: Colors.white),
),
- style: const FlatButtonStyle(
+ normalStyle: const FlatButtonStyle(
backgroundColors: MultiColor(_colors),
),
suffix: const Icon(
@@ -152,6 +167,30 @@ class Buttons extends StatelessWidget {
),
),
),
+ const Gap(20),
+ FlatButton(
+ onPressed: () => print('pressed'),
+ label: TextWrapper(
+ 'Démarrer mon projet',
+ style:
+ context.textTheme.titleLarge?.copyWith(color: Colors.white),
+ ),
+ disabledStyle: const FlatButtonStyle(
+ backgroundColors: MultiColor.single(Colors.blue),
+ ),
+ normalStyle: const FlatButtonStyle(
+ backgroundColors: MultiColor(_colors),
+ ),
+ hoveredStyle: const FlatButtonStyle(
+ backgroundColors: MultiColor.single(Colors.green),
+ ),
+ focusedStyle: const FlatButtonStyle(
+ backgroundColors: MultiColor.single(Colors.yellow),
+ ),
+ tappedStyle: const FlatButtonStyle(
+ backgroundColors: MultiColor.single(Colors.red),
+ ),
+ ),
],
);
}
diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart
index fe86edbe..654c0f72 100644
--- a/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart
+++ b/packages/wyatt_ui_kit/lib/src/components/buttons/buttons.dart
@@ -15,4 +15,3 @@
// along with this program. If not, see .
export './flat_button/flat_button.dart';
-export './outlined_button/outlined_button.dart';
diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart
new file mode 100644
index 00000000..1af53d3c
--- /dev/null
+++ b/packages/wyatt_ui_kit/lib/src/components/buttons/cubit/button_cubit.dart
@@ -0,0 +1,65 @@
+import 'dart:async';
+
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
+
+class ButtonCubit extends Cubit {
+ ButtonCubit() : super(ControlState.normal);
+
+ FutureOr onMouseEnter() async {
+ if (state == ControlState.disabled) {
+ return;
+ }
+ emit(ControlState.hovered);
+ }
+
+ FutureOr onMouseLeave() async {
+ if (state == ControlState.disabled) {
+ return;
+ }
+ emit(ControlState.normal);
+ }
+
+ FutureOr onFocus() async {
+ if (state == ControlState.disabled) {
+ return;
+ }
+ emit(ControlState.focused);
+ }
+
+ FutureOr onUnfocus() async {
+ if (state == ControlState.disabled) {
+ return;
+ }
+ emit(ControlState.normal);
+ }
+
+ FutureOr onClickDown() async {
+ if (state == ControlState.disabled) {
+ return;
+ }
+ emit(ControlState.tapped);
+ }
+
+ FutureOr onClickUpIn() async {
+ if (state == ControlState.disabled) {
+ return;
+ }
+ emit(ControlState.hovered);
+ }
+
+ FutureOr onClickUpOut() async {
+ if (state == ControlState.disabled) {
+ return;
+ }
+ emit(ControlState.normal);
+ }
+
+ FutureOr disable() async {
+ emit(ControlState.disabled);
+ }
+
+ FutureOr enable() async {
+ emit(ControlState.normal);
+ }
+}
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 9b110970..3779e590 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
@@ -15,12 +15,9 @@
// along with this program. If not, see .
import 'package:flutter/material.dart' hide ButtonStyle;
-import 'package:gap/gap.dart';
import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart';
import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
-import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart';
-import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart';
-import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart';
+import 'package:wyatt_ui_kit/src/components/buttons/flat_button/flat_button_screen.dart';
part 'flat_button.g.dart';
@@ -30,61 +27,42 @@ class FlatButton extends FlatButtonComponent with $FlatButtonCWMixin {
super.prefix,
super.suffix,
super.label,
- super.state,
- super.style,
+ super.disabledStyle,
+ super.normalStyle,
+ super.hoveredStyle,
+ super.focusedStyle,
+ super.tappedStyle,
+ super.onPressed,
super.key,
});
@override
- FlatButtonStyle? get style => super.style as FlatButtonStyle?;
+ FlatButtonStyle? get disabledStyle => super.disabledStyle as FlatButtonStyle?;
@override
- Widget build(BuildContext context) => Material(
- color: const Color(0x00000000),
- child: Ink(
- decoration: BoxDecoration(
- color: (style != null)
- ? style!.backgroundColors?.color
- : Theme.of(context).buttonTheme.colorScheme?.onPrimary,
- gradient: (style?.backgroundColors?.isGradient ?? false)
- ? LinearGradient(
- colors: style!.backgroundColors!.colors,
- )
- : null,
- boxShadow: [
- if (style?.shadow != null) ...[style!.shadow!]
- ],
- borderRadius: BorderRadius.all(
- Radius.circular(style?.radius ?? 0),
- ),
- ),
- child: ConstrainedBox(
- constraints: const BoxConstraints(
- minWidth: 88,
- minHeight: 36,
- ), // min sizes for Material buttons
- child: Padding(
- padding: EdgeInsets.all(style?.padding ?? 0),
- child: Row(
- mainAxisSize: mainAxisSize ?? MainAxisSize.min,
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- prefix ?? const SizedBox.shrink(),
- Gap(style?.padding ?? 10),
- if (label != null) ...[
- Text(
- label!.text,
- style: label!.style ?? context.textTheme.titleLarge,
- ).toGradient(
- LinearGradientHelper.fromNullableColors(label!.gradient),
- )
- ],
- Gap(style?.padding ?? 10),
- suffix ?? const SizedBox.shrink(),
- ],
- ),
- ),
- ),
- ),
+ FlatButtonStyle? get normalStyle => super.normalStyle as FlatButtonStyle?;
+
+ @override
+ FlatButtonStyle? get hoveredStyle => super.hoveredStyle as FlatButtonStyle?;
+
+ @override
+ FlatButtonStyle? get focusedStyle => super.focusedStyle as FlatButtonStyle?;
+
+ @override
+ FlatButtonStyle? get tappedStyle => super.tappedStyle as FlatButtonStyle?;
+
+ @override
+ Widget build(BuildContext context) => FlatButtonScreen(
+ prefix: prefix,
+ suffix: suffix,
+ label: label,
+ disabledStyle: disabledStyle,
+ normalStyle: normalStyle,
+ hoveredStyle: hoveredStyle,
+ focusedStyle: focusedStyle,
+ tappedStyle: tappedStyle,
+ onPressed: onPressed,
+ mainAxisSize: mainAxisSize,
+ key: key,
);
}
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 d8a75583..e797d659 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
@@ -16,9 +16,23 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy {
@override
FlatButton label(TextWrapper? label) => this(label: label);
@override
- FlatButton state(ControlState? state) => this(state: state);
+ FlatButton disabledStyle(ButtonStyle? disabledStyle) =>
+ this(disabledStyle: disabledStyle);
@override
- FlatButton style(ButtonStyle? style) => this(style: style);
+ FlatButton normalStyle(ButtonStyle? normalStyle) =>
+ this(normalStyle: normalStyle);
+ @override
+ FlatButton hoveredStyle(ButtonStyle? hoveredStyle) =>
+ this(hoveredStyle: hoveredStyle);
+ @override
+ FlatButton focusedStyle(ButtonStyle? focusedStyle) =>
+ this(focusedStyle: focusedStyle);
+ @override
+ FlatButton tappedStyle(ButtonStyle? tappedStyle) =>
+ this(tappedStyle: tappedStyle);
+ @override
+ FlatButton onPressed(void Function()? onPressed) =>
+ this(onPressed: onPressed);
@override
FlatButton mainAxisSize(MainAxisSize? mainAxisSize) =>
this(mainAxisSize: mainAxisSize);
@@ -29,8 +43,12 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy {
Widget? prefix,
Widget? suffix,
TextWrapper? label,
- ControlState? state,
- ButtonStyle? style,
+ ButtonStyle? disabledStyle,
+ ButtonStyle? normalStyle,
+ ButtonStyle? hoveredStyle,
+ ButtonStyle? focusedStyle,
+ ButtonStyle? tappedStyle,
+ void Function()? onPressed,
MainAxisSize? mainAxisSize,
Key? key,
}) =>
@@ -38,8 +56,12 @@ class $FlatButtonCWProxyImpl implements $FlatButtonComponentCWProxy {
prefix: prefix ?? _value.prefix,
suffix: suffix ?? _value.suffix,
label: label ?? _value.label,
- state: state ?? _value.state,
- style: style ?? _value.style,
+ disabledStyle: disabledStyle ?? _value.disabledStyle,
+ normalStyle: normalStyle ?? _value.normalStyle,
+ hoveredStyle: hoveredStyle ?? _value.hoveredStyle,
+ focusedStyle: focusedStyle ?? _value.focusedStyle,
+ tappedStyle: tappedStyle ?? _value.tappedStyle,
+ onPressed: onPressed ?? _value.onPressed,
key: key ?? _value.key,
);
}
diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart
new file mode 100644
index 00000000..51a8be42
--- /dev/null
+++ b/packages/wyatt_ui_kit/lib/src/components/buttons/flat_button/flat_button_screen.dart
@@ -0,0 +1,234 @@
+// 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 .
+
+import 'package:flutter/material.dart' hide ButtonStyle;
+import 'package:flutter/services.dart';
+import 'package:gap/gap.dart';
+import 'package:wyatt_bloc_helper/wyatt_bloc_helper.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/components/gradients/gradient_box_border.dart';
+import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart';
+import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart';
+import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart';
+
+class FlatButtonScreen extends CubitScreen {
+ const FlatButtonScreen({
+ this.prefix,
+ this.suffix,
+ this.label,
+ this.disabledStyle,
+ this.normalStyle,
+ this.hoveredStyle,
+ this.focusedStyle,
+ this.tappedStyle,
+ this.onPressed,
+ this.mainAxisSize,
+ super.key,
+ });
+
+ final Widget? prefix;
+ final Widget? suffix;
+ final TextWrapper? label;
+
+ final FlatButtonStyle? disabledStyle;
+ final FlatButtonStyle? normalStyle;
+ final FlatButtonStyle? hoveredStyle;
+ final FlatButtonStyle? focusedStyle;
+ final FlatButtonStyle? tappedStyle;
+
+ final VoidCallback? onPressed;
+
+ final MainAxisSize? mainAxisSize;
+
+ @override
+ ButtonCubit create(BuildContext context) => ButtonCubit();
+
+ @override
+ Widget onBuild(BuildContext context, ControlState state) {
+ // Set a default style
+ FlatButtonStyle? style = normalStyle ?? const FlatButtonStyle();
+
+ switch (state) {
+ case ControlState.disabled:
+ style = disabledStyle ?? style;
+ break;
+ case ControlState.hovered:
+ style = hoveredStyle ?? style;
+ break;
+ case ControlState.tapped:
+ style = tappedStyle ?? style;
+ break;
+ case ControlState.focused:
+ style = focusedStyle ?? style;
+ break;
+ case ControlState.normal:
+ case ControlState.selected:
+ case ControlState.invalid:
+ break;
+ }
+
+ return Focus(
+ onFocusChange: (hasFocus) =>
+ hasFocus ? bloc(context).onFocus() : bloc(context).onUnfocus(),
+ onKeyEvent: (focusNode, event) {
+ if (event.logicalKey == LogicalKeyboardKey.enter && state.isFocused()) {
+ onPressed?.call();
+ bloc(context).onClickUpOut();
+ return KeyEventResult.handled;
+ }
+ return KeyEventResult.ignored;
+ },
+ child: MouseRegion(
+ cursor: SystemMouseCursors.click,
+ onEnter: (event) {
+ bloc(context).onMouseEnter();
+ },
+ onExit: (event) {
+ bloc(context).onMouseLeave();
+ },
+ child: GestureDetector(
+ onTapDown: (details) {
+ bloc(context).onClickDown();
+ },
+ onTapUp: (details) {
+ onPressed?.call();
+ bloc(context).onClickUpIn();
+ },
+ onTapCancel: () {
+ onPressed?.call();
+ bloc(context).onClickUpOut();
+ },
+ child: Material(
+ color: const Color(0x00000000),
+ child: Ink(
+ decoration: BoxDecoration(
+ color: style.backgroundColors?.color ??
+ context.colorScheme.primary,
+ // If no border color => no default value
+ border: (style.borderColors != null)
+ ? (style.borderColors?.isGradient ?? false)
+ ? GradientBoxBorder(
+ gradient: LinearGradient(
+ colors: style.borderColors!.colors,
+ ),
+ width: style.stroke ?? 2,
+ )
+ : Border.all(
+ color: style.borderColors!.color,
+ width: style.stroke ?? 2,
+ )
+ : null,
+ // if no gradient colors => no default value
+ gradient: (style.backgroundColors?.isGradient ?? false)
+ ? LinearGradient(
+ colors: style.backgroundColors!.colors,
+ )
+ : null,
+ boxShadow: [
+ if (style.shadow != null) ...[style.shadow!]
+ ],
+ borderRadius: BorderRadius.all(
+ Radius.circular(style.radius ?? 0),
+ ),
+ ),
+ child: ConstrainedBox(
+ constraints: const BoxConstraints(
+ minWidth: 88,
+ minHeight: 36,
+ ), // min sizes for Material buttons
+ child: Padding(
+ padding: EdgeInsets.all(style.padding ?? 0),
+ child: Row(
+ mainAxisSize: mainAxisSize ?? MainAxisSize.min,
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Builder(
+ builder: (context) {
+ final color = style?.foregroundColors?.color;
+ if (color != null) {
+ return ColorFiltered(
+ colorFilter:
+ ColorFilter.mode(color, BlendMode.srcIn),
+ child: prefix ?? const SizedBox.shrink(),
+ );
+ } else {
+ return prefix ?? const SizedBox.shrink();
+ }
+ },
+ ),
+ Gap(style.padding ?? 10),
+ // Choose color
+ // label.style.color ??
+ // buttonStyle.foregroundColor.color ??
+ // context.textTheme.titleLarge.color
+ //
+ // Choose gradient
+ // label.gradient ??
+ // buttonStyle.foregroundColor.colors ??
+ // null
+ if (label != null) ...[
+ Builder(
+ builder: (context) {
+ final color = label?.style?.color ??
+ style?.foregroundColors?.color ??
+ context.textTheme.titleLarge?.color;
+ final buttonStyleGradient =
+ (style?.foregroundColors?.isGradient ?? false)
+ ? style?.foregroundColors?.colors
+ : null;
+ final gradient =
+ label?.gradient ?? buttonStyleGradient;
+
+ return Text(
+ label!.text,
+ style:
+ (label!.style ?? context.textTheme.titleLarge)
+ ?.copyWith(color: color),
+ ).toGradient(
+ LinearGradientHelper.fromNullableColors(
+ gradient,
+ ),
+ );
+ },
+ ),
+ ],
+ Gap(style.padding ?? 10),
+ Builder(
+ builder: (context) {
+ final color = style?.foregroundColors?.color;
+ if (color != null) {
+ return ColorFiltered(
+ colorFilter:
+ ColorFilter.mode(color, BlendMode.srcIn),
+ child: suffix ?? const SizedBox.shrink(),
+ );
+ } else {
+ return suffix ?? const SizedBox.shrink();
+ }
+ },
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart
deleted file mode 100644
index 5bf9da67..00000000
--- a/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.dart
+++ /dev/null
@@ -1,95 +0,0 @@
-// 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 .
-
-import 'package:flutter/material.dart' hide ButtonStyle;
-import 'package:gap/gap.dart';
-import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart';
-import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
-import 'package:wyatt_ui_kit/src/components/gradients/gradient_box_border.dart';
-import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart';
-import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart';
-import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart';
-
-part 'outlined_button.g.dart';
-
-@ComponentCopyWithExtension()
-class OutlinedButton extends OutlinedButtonComponent
- with $OutlinedButtonCWMixin {
- const OutlinedButton({
- super.prefix,
- super.suffix,
- super.label,
- super.state,
- super.style,
- super.key,
- });
-
- @override
- OutlinedButtonStyle? get style => super.style as OutlinedButtonStyle?;
-
- @override
- Widget build(BuildContext context) => Material(
- color: const Color(0x00000000),
- child: Ink(
- decoration: BoxDecoration(
- color: (style != null)
- ? style!.backgroundColors?.color
- : Theme.of(context).buttonTheme.colorScheme?.onPrimary,
- border: (style?.borderColors?.isGradient ?? false)
- ? GradientBoxBorder(
- gradient: LinearGradient(
- colors: style!.borderColors!.colors,
- ),
- width: style?.stroke ?? 2,
- )
- : null,
- boxShadow: [
- if (style?.shadow != null) ...[style!.shadow!]
- ],
- borderRadius: BorderRadius.all(
- Radius.circular(style?.radius ?? 0),
- ),
- ),
- child: ConstrainedBox(
- constraints: const BoxConstraints(
- minWidth: 88,
- minHeight: 36,
- ), // min sizes for Material buttons
- child: Padding(
- padding: EdgeInsets.all(style?.padding ?? 0),
- child: Row(
- mainAxisSize: mainAxisSize ?? MainAxisSize.min,
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- prefix ?? const SizedBox.shrink(),
- Gap(style?.padding ?? 10),
- if (label != null) ...[
- Text(
- label!.text,
- style: label!.style ?? context.textTheme.titleLarge,
- ).toGradient(
- LinearGradientHelper.fromNullableColors(label!.gradient),
- )
- ],
- Gap(style?.padding ?? 10),
- suffix ?? const SizedBox.shrink(),
- ],
- ),
- ),
- ),
- ),
- );
-}
diff --git a/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.g.dart b/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.g.dart
deleted file mode 100644
index 6529baa6..00000000
--- a/packages/wyatt_ui_kit/lib/src/components/buttons/outlined_button/outlined_button.g.dart
+++ /dev/null
@@ -1,50 +0,0 @@
-// GENERATED CODE - DO NOT MODIFY BY HAND
-
-part of 'outlined_button.dart';
-
-// **************************************************************************
-// ComponentCopyWithGenerator
-// **************************************************************************
-
-class $OutlinedButtonCWProxyImpl implements $OutlinedButtonComponentCWProxy {
- const $OutlinedButtonCWProxyImpl(this._value);
- final OutlinedButton _value;
- @override
- OutlinedButton prefix(Widget? prefix) => this(prefix: prefix);
- @override
- OutlinedButton suffix(Widget? suffix) => this(suffix: suffix);
- @override
- OutlinedButton label(TextWrapper? label) => this(label: label);
- @override
- OutlinedButton state(ControlState? state) => this(state: state);
- @override
- OutlinedButton style(ButtonStyle? style) => this(style: style);
- @override
- OutlinedButton mainAxisSize(MainAxisSize? mainAxisSize) =>
- this(mainAxisSize: mainAxisSize);
- @override
- OutlinedButton key(Key? key) => this(key: key);
- @override
- OutlinedButton call({
- Widget? prefix,
- Widget? suffix,
- TextWrapper? label,
- ControlState? state,
- ButtonStyle? style,
- MainAxisSize? mainAxisSize,
- Key? key,
- }) =>
- OutlinedButton(
- prefix: prefix ?? _value.prefix,
- suffix: suffix ?? _value.suffix,
- label: label ?? _value.label,
- state: state ?? _value.state,
- style: style ?? _value.style,
- key: key ?? _value.key,
- );
-}
-
-mixin $OutlinedButtonCWMixin on Component {
- $OutlinedButtonComponentCWProxy get copyWith =>
- $OutlinedButtonCWProxyImpl(this as OutlinedButton);
-}
diff --git a/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart b/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart
index 2cf2e32c..22efeb80 100644
--- a/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart
+++ b/packages/wyatt_ui_kit/lib/src/core/extensions/theme_extensions.dart
@@ -18,4 +18,6 @@ import 'package:flutter/material.dart';
extension ThemeExtension on BuildContext {
TextTheme get textTheme => Theme.of(this).textTheme;
+ ColorScheme get colorScheme => Theme.of(this).colorScheme;
+ ButtonThemeData get buttonTheme => Theme.of(this).buttonTheme;
}
diff --git a/packages/wyatt_ui_kit/models/button_state_diagram.puml b/packages/wyatt_ui_kit/models/button_state_diagram.puml
new file mode 100644
index 00000000..adf43bdf
--- /dev/null
+++ b/packages/wyatt_ui_kit/models/button_state_diagram.puml
@@ -0,0 +1,13 @@
+@startuml button_state_diagram
+[*] --> normal
+[*] --> disabled
+normal --> hovered : on mouse enter
+hovered --> normal : on mouse leave
+hovered --> tapped : on mouse click down
+tapped --> hovered : on mouse click up in (the cursor is in button)
+tapped --> normal : on mouse click up out (the cursor is out of button)
+normal --> focused : on focus
+focused --> normal : on unfocus
+focused --> tapped : on space bar press down
+tapped --> focused : on space bar press up
+@enduml
\ No newline at end of file
diff --git a/packages/wyatt_ui_kit/pubspec.yaml b/packages/wyatt_ui_kit/pubspec.yaml
index 58388d01..f600885d 100644
--- a/packages/wyatt_ui_kit/pubspec.yaml
+++ b/packages/wyatt_ui_kit/pubspec.yaml
@@ -9,9 +9,12 @@ environment:
sdk: ">=2.19.0 <3.0.0"
dependencies:
+ equatable: ^2.0.5
flutter: { sdk: flutter }
- gap: ^2.0.1
flutter_animate: ^3.0.0
+ flutter_bloc: ^8.1.2
+ gap: ^2.0.1
+ meta: ^1.8.0
wyatt_bloc_helper:
git:
url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git