feat: add floating action button component (close #191)
All checks were successful
continuous-integration/drone/pr Build is passing

This commit is contained in:
Malo Léon 2023-05-03 19:06:52 +02:00
parent 0592cf9a3c
commit d3184eb3e1
4 changed files with 199 additions and 0 deletions

View File

@ -0,0 +1,107 @@
// 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 <https://www.gnu.org/licenses/>.
import 'package:flutter/material.dart';
import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart';
import 'package:wyatt_ui_components/wyatt_ui_components.dart';
part 'floating_action_button_component.g.dart';
@ComponentProxyExtension()
abstract class FloatingActionButtonComponent extends Component
with CopyWithMixin<$FloatingActionButtonComponentCWProxy> {
const FloatingActionButtonComponent({
this.child,
this.tooltip,
this.foregroundColor,
this.backgroundColor,
this.focusColor,
this.hoverColor,
this.splashColor,
this.heroTag,
this.onPressed,
this.mouseCursor,
this.elevation,
this.focusElevation,
this.hoverElevation,
this.highlightElevation,
this.disabledElevation,
this.mini,
this.shape,
this.clipBehavior,
this.isExtended,
this.focusNode,
this.autofocus,
this.materialTapTargetSize,
this.enableFeedback,
this.extendedIconLabelSpacing,
this.extendedPadding,
this.extendedTextStyle,
super.key,
});
final Widget? child;
final String? tooltip;
final Color? foregroundColor;
final Color? backgroundColor;
final Color? focusColor;
final Color? hoverColor;
final Color? splashColor;
final Object? heroTag;
final VoidCallback? onPressed;
final MouseCursor? mouseCursor;
final double? elevation;
final double? focusElevation;
final double? hoverElevation;
final double? highlightElevation;
final double? disabledElevation;
final bool? mini;
final ShapeBorder? shape;
final Clip? clipBehavior;
final bool? isExtended;
final FocusNode? focusNode;
final bool? autofocus;
final MaterialTapTargetSize? materialTapTargetSize;
final bool? enableFeedback;
final double? extendedIconLabelSpacing;
final EdgeInsetsGeometry? extendedPadding;
final TextStyle? extendedTextStyle;
}

View File

@ -0,0 +1,69 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'floating_action_button_component.dart';
// **************************************************************************
// ComponentProxyGenerator
// **************************************************************************
abstract class $FloatingActionButtonComponentCWProxy {
FloatingActionButtonComponent child(Widget? child);
FloatingActionButtonComponent tooltip(String? tooltip);
FloatingActionButtonComponent foregroundColor(Color? foregroundColor);
FloatingActionButtonComponent backgroundColor(Color? backgroundColor);
FloatingActionButtonComponent focusColor(Color? focusColor);
FloatingActionButtonComponent hoverColor(Color? hoverColor);
FloatingActionButtonComponent splashColor(Color? splashColor);
FloatingActionButtonComponent heroTag(Object? heroTag);
FloatingActionButtonComponent onPressed(void Function()? onPressed);
FloatingActionButtonComponent mouseCursor(MouseCursor? mouseCursor);
FloatingActionButtonComponent elevation(double? elevation);
FloatingActionButtonComponent focusElevation(double? focusElevation);
FloatingActionButtonComponent hoverElevation(double? hoverElevation);
FloatingActionButtonComponent highlightElevation(double? highlightElevation);
FloatingActionButtonComponent disabledElevation(double? disabledElevation);
FloatingActionButtonComponent mini(bool? mini);
FloatingActionButtonComponent shape(ShapeBorder? shape);
FloatingActionButtonComponent clipBehavior(Clip? clipBehavior);
FloatingActionButtonComponent isExtended(bool? isExtended);
FloatingActionButtonComponent focusNode(FocusNode? focusNode);
FloatingActionButtonComponent autofocus(bool? autofocus);
FloatingActionButtonComponent materialTapTargetSize(
MaterialTapTargetSize? materialTapTargetSize);
FloatingActionButtonComponent enableFeedback(bool? enableFeedback);
FloatingActionButtonComponent extendedIconLabelSpacing(
double? extendedIconLabelSpacing);
FloatingActionButtonComponent extendedPadding(
EdgeInsetsGeometry? extendedPadding);
FloatingActionButtonComponent extendedTextStyle(TextStyle? extendedTextStyle);
FloatingActionButtonComponent key(Key? key);
FloatingActionButtonComponent call({
Widget? child,
String? tooltip,
Color? foregroundColor,
Color? backgroundColor,
Color? focusColor,
Color? hoverColor,
Color? splashColor,
Object? heroTag,
void Function()? onPressed,
MouseCursor? mouseCursor,
double? elevation,
double? focusElevation,
double? hoverElevation,
double? highlightElevation,
double? disabledElevation,
bool? mini,
ShapeBorder? shape,
Clip? clipBehavior,
bool? isExtended,
FocusNode? focusNode,
bool? autofocus,
MaterialTapTargetSize? materialTapTargetSize,
bool? enableFeedback,
double? extendedIconLabelSpacing,
EdgeInsetsGeometry? extendedPadding,
TextStyle? extendedTextStyle,
Key? key,
});
}

View File

@ -17,6 +17,7 @@
import 'package:copy_with_extension/copy_with_extension.dart';
import 'package:flutter/material.dart';
import 'package:wyatt_ui_components/src/domain/entities/entities.dart';
import 'package:wyatt_ui_components/src/domain/entities/floating_buttons/floating_action_button_component.dart';
part 'component_theme_data.g.dart';
/// {@template component_theme_data}
@ -41,6 +42,7 @@ class ComponentThemeData {
PortfolioCardComponent? portfolioCard,
QuoteCardComponent? quoteCard,
SkillCardComponent? skillCard,
FloatingActionButtonComponent? floatingActionButton,
}) =>
ComponentThemeData.raw(
topAppBar: topAppBar,
@ -58,6 +60,7 @@ class ComponentThemeData {
portfolioCard: portfolioCard,
quoteCard: quoteCard,
skillCard: skillCard,
floatingActionButton: floatingActionButton,
);
/// {@macro component_theme_data}
@ -78,6 +81,7 @@ class ComponentThemeData {
portfolioCard: other.portfolioCard,
quoteCard: other.quoteCard,
skillCard: other.skillCard,
floatingActionButton: other.floatingActionButton,
);
/// Create a [ComponentThemeData] given a set of exact values. Most values
@ -102,6 +106,7 @@ class ComponentThemeData {
this.portfolioCard,
this.quoteCard,
this.skillCard,
this.floatingActionButton,
});
R _get<T extends Component, R>(T? component, R? returned) {
@ -173,4 +178,8 @@ class ComponentThemeData {
final SymbolButtonComponent? symbolButton;
$SymbolButtonComponentCWProxy get symbolButtonComponent =>
_get(symbolButton, symbolButton?.copyWith);
final FloatingActionButtonComponent? floatingActionButton;
$FloatingActionButtonComponentCWProxy get floatingActionButtonComponent =>
_get(floatingActionButton, floatingActionButton?.copyWith);
}

View File

@ -41,6 +41,9 @@ abstract class _$ComponentThemeDataCWProxy {
ComponentThemeData skillCard(SkillCardComponent? skillCard);
ComponentThemeData floatingActionButton(
FloatingActionButtonComponent? floatingActionButton);
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `ComponentThemeData(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
///
/// Usage
@ -63,6 +66,7 @@ abstract class _$ComponentThemeDataCWProxy {
PortfolioCardComponent? portfolioCard,
QuoteCardComponent? quoteCard,
SkillCardComponent? skillCard,
FloatingActionButtonComponent? floatingActionButton,
});
}
@ -136,6 +140,11 @@ class _$ComponentThemeDataCWProxyImpl implements _$ComponentThemeDataCWProxy {
ComponentThemeData skillCard(SkillCardComponent? skillCard) =>
this(skillCard: skillCard);
@override
ComponentThemeData floatingActionButton(
FloatingActionButtonComponent? floatingActionButton) =>
this(floatingActionButton: floatingActionButton);
@override
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `ComponentThemeData(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
@ -160,6 +169,7 @@ class _$ComponentThemeDataCWProxyImpl implements _$ComponentThemeDataCWProxy {
Object? portfolioCard = const $CopyWithPlaceholder(),
Object? quoteCard = const $CopyWithPlaceholder(),
Object? skillCard = const $CopyWithPlaceholder(),
Object? floatingActionButton = const $CopyWithPlaceholder(),
}) {
return ComponentThemeData(
topAppBar: topAppBar == const $CopyWithPlaceholder()
@ -222,6 +232,10 @@ class _$ComponentThemeDataCWProxyImpl implements _$ComponentThemeDataCWProxy {
? _value.skillCard
// ignore: cast_nullable_to_non_nullable
: skillCard as SkillCardComponent?,
floatingActionButton: floatingActionButton == const $CopyWithPlaceholder()
? _value.floatingActionButton
// ignore: cast_nullable_to_non_nullable
: floatingActionButton as FloatingActionButtonComponent?,
);
}
}