From 4a3fde3a1ec3e71ec4d12320ce92622dd2498451 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 22 Feb 2023 17:43:42 +0100 Subject: [PATCH] feat(ui_kit): implement top nav bar --- .../lib/src/domain/entities/bars/bars.dart | 2 +- .../bars/top_navigation_bar_component.dart | 5 +- .../bars/top_navigation_bar_component.g.dart | 46 +++++- .../assets/images/studio_long_logo.png | Bin 0 -> 27095 bytes .../wyatt_ui_kit/example/lib/bars/bars.dart | 22 +++ .../example/lib/theme/themes.dart | 2 +- ..._app_bar_theme.dart => top_bar_theme.dart} | 34 +++-- .../app_bars.dart => bars/bars.dart} | 3 +- .../{app_bars => bars}/top_app_bar.dart | 23 ++- .../{app_bars => bars}/top_app_bar.g.dart | 4 +- .../components/bars/top_navigation_bar.dart | 135 ++++++++++++++++++ .../top_navigation_bar.g.dart | 28 +++- .../bars/widgets/navigation_item.dart | 73 ++++++++++ .../lib/src/components/components.dart | 2 +- .../top_navigation_bar.dart | 35 ----- .../wyatt_ui_kit/lib/src/domain/domain.dart | 2 +- ...sion.dart => top_bar_theme_extension.dart} | 12 +- 17 files changed, 348 insertions(+), 80 deletions(-) create mode 100644 packages/wyatt_ui_kit/example/assets/images/studio_long_logo.png rename packages/wyatt_ui_kit/example/lib/theme/{top_app_bar_theme.dart => top_bar_theme.dart} (64%) rename packages/wyatt_ui_kit/lib/src/components/{app_bars/app_bars.dart => bars/bars.dart} (91%) rename packages/wyatt_ui_kit/lib/src/components/{app_bars => bars}/top_app_bar.dart (88%) rename packages/wyatt_ui_kit/lib/src/components/{app_bars => bars}/top_app_bar.g.dart (100%) create mode 100644 packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart rename packages/wyatt_ui_kit/lib/src/components/{top_navigation_bars => bars}/top_navigation_bar.g.dart (74%) create mode 100644 packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart delete mode 100644 packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.dart rename packages/wyatt_ui_kit/lib/src/domain/{top_app_bar_extension.dart => top_bar_theme_extension.dart} (81%) diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart index 16fbd451..5bd04fd5 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/bars.dart @@ -14,6 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'top_app_bar_component.dart'; export './bottom_navigation_bar_component.dart'; export './top_navigation_bar_component.dart'; +export 'top_app_bar_component.dart'; diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart index a5cc6977..3f9304ec 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.dart @@ -15,9 +15,10 @@ // along with this program. If not, see . import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/src/core/mixins/copy_with_mixin.dart'; import 'package:wyatt_ui_components/src/domain/entities/bars/top_bar_component.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; part 'top_navigation_bar_component.g.dart'; @@ -25,6 +26,7 @@ part 'top_navigation_bar_component.g.dart'; abstract class TopNavigationBarComponent extends TopBarComponent with CopyWithMixin<$TopNavigationBarComponentCWProxy> { const TopNavigationBarComponent({ + this.navigationItems, this.onTap, this.currentIndex = 0, super.shape, @@ -48,6 +50,7 @@ abstract class TopNavigationBarComponent extends TopBarComponent super.key, }); + final List? navigationItems; final int currentIndex; final void Function(BuildContext, int)? onTap; } diff --git a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.g.dart b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.g.dart index 591c9a6e..7d51e749 100644 --- a/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.g.dart +++ b/packages/wyatt_ui_components/lib/src/domain/entities/bars/top_navigation_bar_component.g.dart @@ -7,16 +7,54 @@ part of 'top_navigation_bar_component.dart'; // ************************************************************************** abstract class $TopNavigationBarComponentCWProxy { - TopNavigationBarComponent leading(Widget? leading); - TopNavigationBarComponent actions(List? actions); + TopNavigationBarComponent navigationItems(List? navigationItems); TopNavigationBarComponent onTap(void Function(BuildContext, int)? onTap); TopNavigationBarComponent currentIndex(int? currentIndex); + TopNavigationBarComponent shape(ShapeBorder? shape); + TopNavigationBarComponent systemOverlayStyle( + SystemUiOverlayStyle? systemOverlayStyle); + TopNavigationBarComponent automaticallyImplyLeading( + bool? automaticallyImplyLeading); + TopNavigationBarComponent flexibleSpace(Widget? flexibleSpace); + TopNavigationBarComponent bottom(PreferredSizeWidget? bottom); + TopNavigationBarComponent elevation(double? elevation); + TopNavigationBarComponent scrolledUnderElevation( + double? scrolledUnderElevation); + TopNavigationBarComponent shadowColor(Color? shadowColor); + TopNavigationBarComponent surfaceTintColor(Color? surfaceTintColor); + TopNavigationBarComponent backgroundColor(MultiColor? backgroundColor); + TopNavigationBarComponent iconTheme(IconThemeData? iconTheme); + TopNavigationBarComponent primary(bool? primary); + TopNavigationBarComponent excludeHeaderSemantics( + bool? excludeHeaderSemantics); + TopNavigationBarComponent toolbarHeight(double? toolbarHeight); + TopNavigationBarComponent leadingWidth(double? leadingWidth); + TopNavigationBarComponent leading(Widget? leading); + TopNavigationBarComponent actions(List? actions); + TopNavigationBarComponent expandedWidget(List? expandedWidget); TopNavigationBarComponent key(Key? key); TopNavigationBarComponent call({ - Widget? leading, - List? actions, + List? navigationItems, void Function(BuildContext, int)? onTap, int? currentIndex, + ShapeBorder? shape, + SystemUiOverlayStyle? systemOverlayStyle, + bool? automaticallyImplyLeading, + Widget? flexibleSpace, + PreferredSizeWidget? bottom, + double? elevation, + double? scrolledUnderElevation, + Color? shadowColor, + Color? surfaceTintColor, + MultiColor? backgroundColor, + IconThemeData? iconTheme, + bool? primary, + bool? excludeHeaderSemantics, + double? toolbarHeight, + double? leadingWidth, + Widget? leading, + List? actions, + List? expandedWidget, Key? key, }); } diff --git a/packages/wyatt_ui_kit/example/assets/images/studio_long_logo.png b/packages/wyatt_ui_kit/example/assets/images/studio_long_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8534fdf9379bfe866b37d652724937e803a7e67e GIT binary patch literal 27095 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

_pFM4 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 HNyz^IcN|2; literal 0 HcmV?d00001 diff --git a/packages/wyatt_ui_kit/example/lib/bars/bars.dart b/packages/wyatt_ui_kit/example/lib/bars/bars.dart index 2290e006..c2254916 100644 --- a/packages/wyatt_ui_kit/example/lib/bars/bars.dart +++ b/packages/wyatt_ui_kit/example/lib/bars/bars.dart @@ -61,6 +61,28 @@ class Bars extends DemoPage { ) ], ), + const Gap(20), + TopNavigationBar( + leading: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: Image.asset('assets/images/studio_long_logo.png'), + ), + actions: [ + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 20, vertical: 25), + child: FlatButton( + label: 'Estimer mon projet'.wrap(), + ), + ), + ], + navigationItems: [ + 'ACCEUIL'.wrap(), + 'VOTRE PROGRAMME'.wrap(), + 'LE STUDIO'.wrap(), + 'SAVOIR FAIRE'.wrap() + ].whereType().toList(), + ), ], ); diff --git a/packages/wyatt_ui_kit/example/lib/theme/themes.dart b/packages/wyatt_ui_kit/example/lib/theme/themes.dart index e36014d6..08c00bd2 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/themes.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/themes.dart @@ -25,7 +25,7 @@ import 'package:wyatt_ui_kit_example/theme/rich_text_builder_theme.dart'; import 'package:wyatt_ui_kit_example/theme/simple_icon_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/symbol_button_theme.dart'; import 'package:wyatt_ui_kit_example/theme/text_input_theme.dart'; -import 'package:wyatt_ui_kit_example/theme/top_app_bar_theme.dart'; +import 'package:wyatt_ui_kit_example/theme/top_bar_theme.dart'; /// Easely switch between Material and Studio themes. abstract class Themes { diff --git a/packages/wyatt_ui_kit/example/lib/theme/top_app_bar_theme.dart b/packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart similarity index 64% rename from packages/wyatt_ui_kit/example/lib/theme/top_app_bar_theme.dart rename to packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart index 8be94e42..218f223e 100644 --- a/packages/wyatt_ui_kit/example/lib/theme/top_app_bar_theme.dart +++ b/packages/wyatt_ui_kit/example/lib/theme/top_bar_theme.dart @@ -3,24 +3,31 @@ import 'package:google_fonts/google_fonts.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; -class TopAppBarTheme extends TopAppBarThemeExtension { +class TopAppBarTheme extends TopBarThemeExtension { const TopAppBarTheme({ super.iconTheme, super.backgroundColors, - super.expandedDividerStyle, + super.secondaryColor, super.titleStyle, + super.subTitleStyle, }); factory TopAppBarTheme.light() => TopAppBarTheme( backgroundColors: const MultiColor.single( Color.fromRGBO(246, 246, 246, 1), ), - expandedDividerStyle: Colors.black.withOpacity(0.1), + secondaryColor: const Color.fromRGBO(36, 38, 42, 1), titleStyle: GoogleFonts.montserrat( fontWeight: FontWeight.bold, + color: const Color.fromRGBO(36, 38, 42, 1), fontSize: 18, ), - iconTheme: const IconThemeData(color: Colors.black), + subTitleStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w400, + color: const Color.fromRGBO(36, 38, 42, 1), + fontSize: 18, + ), + iconTheme: const IconThemeData(color: Color.fromRGBO(36, 38, 42, 1)), ); factory TopAppBarTheme.dark() => TopAppBarTheme( @@ -29,31 +36,35 @@ class TopAppBarTheme extends TopAppBarThemeExtension { Color.fromRGBO(39, 47, 61, 1), Color.fromRGBO(44, 50, 56, 1), ]), - expandedDividerStyle: Colors.white.withOpacity(0.1), + secondaryColor: Colors.white, titleStyle: GoogleFonts.montserrat( fontWeight: FontWeight.bold, fontSize: 18, ), + subTitleStyle: GoogleFonts.montserrat( + fontWeight: FontWeight.w400, + fontSize: 18, + ), iconTheme: const IconThemeData(color: Colors.white), ); @override - ThemeExtension copyWith({ + ThemeExtension copyWith({ IconThemeData? iconTheme, MultiColor? backgroundColors, - Color? expandedDividerStyle, + Color? secondaryColor, TextStyle? titleStyle, }) => TopAppBarTheme( iconTheme: iconTheme ?? this.iconTheme, backgroundColors: backgroundColors ?? this.backgroundColors, - expandedDividerStyle: expandedDividerStyle ?? this.expandedDividerStyle, + secondaryColor: secondaryColor ?? this.secondaryColor, titleStyle: titleStyle ?? this.titleStyle, ); @override - ThemeExtension lerp( - covariant ThemeExtension? other, + ThemeExtension lerp( + covariant ThemeExtension? other, double t, ) { if (other is! TopAppBarTheme) { @@ -63,8 +74,7 @@ class TopAppBarTheme extends TopAppBarThemeExtension { iconTheme: IconThemeData.lerp(iconTheme, other.iconTheme, t), backgroundColors: MultiColor.lerp(backgroundColors, other.backgroundColors, t), - expandedDividerStyle: - Color.lerp(expandedDividerStyle, other.expandedDividerStyle, t), + secondaryColor: Color.lerp(secondaryColor, other.secondaryColor, t), titleStyle: TextStyle.lerp(titleStyle, other.titleStyle, t), ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/app_bars/app_bars.dart b/packages/wyatt_ui_kit/lib/src/components/bars/bars.dart similarity index 91% rename from packages/wyatt_ui_kit/lib/src/components/app_bars/app_bars.dart rename to packages/wyatt_ui_kit/lib/src/components/bars/bars.dart index a7a986ee..f3f8f557 100644 --- a/packages/wyatt_ui_kit/lib/src/components/app_bars/app_bars.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/bars.dart @@ -14,4 +14,5 @@ // You should have received a copy of the GNU General Public License // along with super program. If not, see . -export 'top_app_bar.dart'; +export './top_app_bar.dart'; +export './top_navigation_bar.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart b/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart similarity index 88% rename from packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart rename to packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart index 4e15d145..f915cff7 100644 --- a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.dart @@ -24,6 +24,8 @@ part 'top_app_bar.g.dart'; @ComponentCopyWithExtension() class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { const TopAppBar({ + super.title, + super.centerTitle, super.systemOverlayStyle, super.automaticallyImplyLeading, super.flexibleSpace, @@ -38,10 +40,8 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { super.excludeHeaderSemantics, super.toolbarHeight, super.leadingWidth, - super.title, super.leading, super.actions, - super.centerTitle, super.shape, super.expandedWidget, super.key, @@ -53,9 +53,7 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { gradient: ThemeHelper.getThemeElement( [ backgroundColor, - context - .themeExtension() - ?.backgroundColors, + context.themeExtension()?.backgroundColors, ], valueValidator: (value) => value?.isGradient, transform: (value) => @@ -65,9 +63,7 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { color: ThemeHelper.getThemeElement( [ backgroundColor, - context - .themeExtension() - ?.backgroundColors, + context.themeExtension()?.backgroundColors, ], valueValidator: (value) => value?.isColor, transform: (value) => value?.color, @@ -91,7 +87,7 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { ThemeHelper.getThemeElement( [ iconTheme, - context.themeExtension()?.iconTheme, + context.themeExtension()?.iconTheme, ], valueValidator: (value) => value != null, transform: (value) => value, @@ -105,9 +101,7 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { style: ThemeHelper.getThemeElement( [ title?.style, - context - .themeExtension() - ?.titleStyle + context.themeExtension()?.titleStyle ], valueValidator: (value) => value != null, transform: (value) => value, @@ -123,8 +117,9 @@ class TopAppBar extends TopAppBarComponent with $TopAppBarCWMixin { color: ThemeHelper.getThemeElement( [ context - .themeExtension() - ?.expandedDividerStyle, + .themeExtension() + ?.secondaryColor + ?.withOpacity(0.1), ], valueValidator: (value) => value != null, transform: (value) => value, diff --git a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart b/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.g.dart similarity index 100% rename from packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart rename to packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.g.dart index fe0baa7a..366e5bbf 100644 --- a/packages/wyatt_ui_kit/lib/src/components/app_bars/top_app_bar.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/top_app_bar.g.dart @@ -86,6 +86,8 @@ class $TopAppBarCWProxyImpl implements $TopAppBarComponentCWProxy { Key? key, }) => TopAppBar( + title: title ?? _value.title, + centerTitle: centerTitle ?? _value.centerTitle, systemOverlayStyle: systemOverlayStyle ?? _value.systemOverlayStyle, automaticallyImplyLeading: automaticallyImplyLeading ?? _value.automaticallyImplyLeading, @@ -103,10 +105,8 @@ class $TopAppBarCWProxyImpl implements $TopAppBarComponentCWProxy { excludeHeaderSemantics ?? _value.excludeHeaderSemantics, toolbarHeight: toolbarHeight ?? _value.toolbarHeight, leadingWidth: leadingWidth ?? _value.leadingWidth, - title: title ?? _value.title, leading: leading ?? _value.leading, actions: actions ?? _value.actions, - centerTitle: centerTitle ?? _value.centerTitle, shape: shape ?? _value.shape, expandedWidget: expandedWidget ?? _value.expandedWidget, key: key ?? _value.key, diff --git a/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart b/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart new file mode 100644 index 00000000..87d26a6d --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.dart @@ -0,0 +1,135 @@ +// 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'; +import 'package:flutter/services.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/bars/widgets/navigation_item.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +part 'top_navigation_bar.g.dart'; + +@ComponentCopyWithExtension() +class TopNavigationBar extends TopNavigationBarComponent + with $TopNavigationBarCWMixin { + const TopNavigationBar({ + super.navigationItems, + super.onTap, + super.currentIndex = 0, + super.systemOverlayStyle, + super.automaticallyImplyLeading, + super.flexibleSpace, + super.bottom, + super.elevation, + super.scrolledUnderElevation, + super.shadowColor, + super.surfaceTintColor, + super.backgroundColor, + super.iconTheme, + super.primary, + super.excludeHeaderSemantics, + super.toolbarHeight, + super.leadingWidth, + super.leading, + super.actions, + super.shape, + super.expandedWidget, + super.key, + }); + + @override + Widget build(BuildContext context) => DecoratedBox( + decoration: BoxDecoration( + gradient: ThemeHelper.getThemeElement( + [ + backgroundColor, + context.themeExtension()?.backgroundColors, + ], + valueValidator: (value) => value?.isGradient, + transform: (value) => + LinearGradientHelper.fromNullableColors(value?.colors), + defaultValue: null, + ), + color: ThemeHelper.getThemeElement( + [ + backgroundColor, + context.themeExtension()?.backgroundColors, + ], + valueValidator: (value) => value?.isColor, + transform: (value) => value?.color, + defaultValue: Theme.of(context).appBarTheme.backgroundColor, + ), + ), + child: AppBar( + toolbarHeight: 100, + titleSpacing: 0, + backgroundColor: Colors.transparent, + systemOverlayStyle: systemOverlayStyle, + automaticallyImplyLeading: automaticallyImplyLeading ?? true, + flexibleSpace: flexibleSpace, + bottom: bottom, + elevation: elevation ?? 0, + scrolledUnderElevation: scrolledUnderElevation, + shadowColor: shadowColor, + surfaceTintColor: surfaceTintColor, + iconTheme: ThemeHelper.getThemeElement( + [ + iconTheme, + context.themeExtension()?.iconTheme, + ], + valueValidator: (value) => value != null, + transform: (value) => value, + defaultValue: Theme.of(context).iconTheme, + ), + primary: primary ?? true, + excludeHeaderSemantics: excludeHeaderSemantics ?? false, + leadingWidth: 200, + title: Row( + mainAxisSize: MainAxisSize.min, + children: navigationItems != null + ? navigationItems! + .asMap() + .map( + (key, value) => MapEntry( + key, + Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: MouseRegion( + cursor: SystemMouseCursors.click, + child: GestureDetector( + onTap: () { + onTap?.call(context, key); + }, + child: NavigationItem( + item: value, + selected: key == currentIndex, + ), + ), + ), + ), + ), + ) + .values + .toList() + : [], + ), + leading: leading, + actions: actions, + centerTitle: true, + ), + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart b/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.g.dart similarity index 74% rename from packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart rename to packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.g.dart index f6e95da2..591b8704 100644 --- a/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.g.dart +++ b/packages/wyatt_ui_kit/lib/src/components/bars/top_navigation_bar.g.dart @@ -11,6 +11,9 @@ class $TopNavigationBarCWProxyImpl const $TopNavigationBarCWProxyImpl(this._value); final TopNavigationBar _value; @override + TopNavigationBar navigationItems(List? navigationItems) => + this(navigationItems: navigationItems); + @override TopNavigationBar onTap(void Function(BuildContext, int)? onTap) => this(onTap: onTap); @override @@ -69,6 +72,7 @@ class $TopNavigationBarCWProxyImpl TopNavigationBar key(Key? key) => this(key: key); @override TopNavigationBar call({ + List? navigationItems, void Function(BuildContext, int)? onTap, int? currentIndex, ShapeBorder? shape, @@ -92,10 +96,30 @@ class $TopNavigationBarCWProxyImpl Key? key, }) => TopNavigationBar( - leading: leading ?? _value.leading, - actions: actions ?? _value.actions, + navigationItems: navigationItems ?? _value.navigationItems, onTap: onTap ?? _value.onTap, currentIndex: currentIndex ?? _value.currentIndex, + systemOverlayStyle: systemOverlayStyle ?? _value.systemOverlayStyle, + automaticallyImplyLeading: + automaticallyImplyLeading ?? _value.automaticallyImplyLeading, + flexibleSpace: flexibleSpace ?? _value.flexibleSpace, + bottom: bottom ?? _value.bottom, + elevation: elevation ?? _value.elevation, + scrolledUnderElevation: + scrolledUnderElevation ?? _value.scrolledUnderElevation, + shadowColor: shadowColor ?? _value.shadowColor, + surfaceTintColor: surfaceTintColor ?? _value.surfaceTintColor, + backgroundColor: backgroundColor ?? _value.backgroundColor, + iconTheme: iconTheme ?? _value.iconTheme, + primary: primary ?? _value.primary, + excludeHeaderSemantics: + excludeHeaderSemantics ?? _value.excludeHeaderSemantics, + toolbarHeight: toolbarHeight ?? _value.toolbarHeight, + leadingWidth: leadingWidth ?? _value.leadingWidth, + leading: leading ?? _value.leading, + actions: actions ?? _value.actions, + shape: shape ?? _value.shape, + expandedWidget: expandedWidget ?? _value.expandedWidget, key: key ?? _value.key, ); } diff --git a/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart b/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart new file mode 100644 index 00000000..8269445f --- /dev/null +++ b/packages/wyatt_ui_kit/lib/src/components/bars/widgets/navigation_item.dart @@ -0,0 +1,73 @@ +// Copyright (C) 2023 WYATT GROUP +// Please see the AUTHORS file for details. +// +// super 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. +// +// super 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 super program. If not, see . + +import 'package:flutter/material.dart'; +import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; +import 'package:wyatt_ui_kit/wyatt_ui_kit.dart'; + +class NavigationItem extends StatelessWidget { + const NavigationItem({ + required this.item, + required this.selected, + super.key, + }); + final TextWrapper item; + final bool selected; + + @override + Widget build(BuildContext context) => Stack( + alignment: Alignment.bottomCenter, + children: [ + if (selected) + Container( + height: 5, + width: 70, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100), + color: ThemeHelper.getThemeElement( + [ + context + .themeExtension() + ?.secondaryColor + ], + valueValidator: (value) => value != null, + transform: (value) => value, + defaultValue: Theme.of(context).primaryColor, + ), + ), + ), + SizedBox( + height: 50, + child: Center( + child: Text( + item.data, + style: ThemeHelper.getThemeElement( + [ + item.style, + context + .themeExtension() + ?.subTitleStyle + ], + valueValidator: (value) => value != null, + transform: (value) => value, + defaultValue: context.textTheme.titleMedium, + ), + ), + ), + ), + ], + ); +} diff --git a/packages/wyatt_ui_kit/lib/src/components/components.dart b/packages/wyatt_ui_kit/lib/src/components/components.dart index 9b4c399c..486e2f93 100644 --- a/packages/wyatt_ui_kit/lib/src/components/components.dart +++ b/packages/wyatt_ui_kit/lib/src/components/components.dart @@ -14,10 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export './app_bars/app_bars.dart'; export './buttons/buttons.dart'; export './cards/cards.dart'; export './gradients/gradients.dart'; export './loader/loader.dart'; export './rich_text_builder/rich_text_builder.dart'; export './text_inputs/text_input.dart'; +export 'bars/bars.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.dart b/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.dart deleted file mode 100644 index d236b884..00000000 --- a/packages/wyatt_ui_kit/lib/src/components/top_navigation_bars/top_navigation_bar.dart +++ /dev/null @@ -1,35 +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'; -import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; -import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -part 'top_navigation_bar.g.dart'; - -@ComponentCopyWithExtension() -class TopNavigationBar extends TopNavigationBarComponent - with $TopNavigationBarCWMixin { - const TopNavigationBar({ - super.leading, - super.actions, - super.onTap, - super.currentIndex = 0, - super.key, - }); - - @override - Widget build(BuildContext context) => const Placeholder(); -} diff --git a/packages/wyatt_ui_kit/lib/src/domain/domain.dart b/packages/wyatt_ui_kit/lib/src/domain/domain.dart index 8433530b..6c7c9ab3 100644 --- a/packages/wyatt_ui_kit/lib/src/domain/domain.dart +++ b/packages/wyatt_ui_kit/lib/src/domain/domain.dart @@ -19,4 +19,4 @@ export './card_theme_extension.dart'; export './loader_theme_extension.dart'; export './rich_text_builder_theme_extension.dart'; export './text_input_theme_extension.dart'; -export './top_app_bar_extension.dart'; +export 'top_bar_theme_extension.dart'; diff --git a/packages/wyatt_ui_kit/lib/src/domain/top_app_bar_extension.dart b/packages/wyatt_ui_kit/lib/src/domain/top_bar_theme_extension.dart similarity index 81% rename from packages/wyatt_ui_kit/lib/src/domain/top_app_bar_extension.dart rename to packages/wyatt_ui_kit/lib/src/domain/top_bar_theme_extension.dart index ea6718bb..9bfd3389 100644 --- a/packages/wyatt_ui_kit/lib/src/domain/top_app_bar_extension.dart +++ b/packages/wyatt_ui_kit/lib/src/domain/top_bar_theme_extension.dart @@ -17,18 +17,20 @@ import 'package:flutter/material.dart'; import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; -abstract class TopAppBarThemeExtension - extends ThemeExtension { - const TopAppBarThemeExtension({ +abstract class TopBarThemeExtension + extends ThemeExtension { + const TopBarThemeExtension({ this.iconTheme, this.backgroundColors, - this.expandedDividerStyle, + this.secondaryColor, this.titleStyle, + this.subTitleStyle, }); final MultiColor? backgroundColors; final IconThemeData? iconTheme; - final Color? expandedDividerStyle; + final Color? secondaryColor; final TextStyle? titleStyle; + final TextStyle? subTitleStyle; }