Compare commits

..

No commits in common. "0a950638db425724ab11fdca340340869fd0a138" and "a6903ae432946145504478c1874e02f892189ee5" have entirely different histories.

54 changed files with 266 additions and 790 deletions

View File

@ -5,10 +5,10 @@ import 'package:bloc_layout_example/components/custom_loading_widget.dart';
import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart';
abstract class AppThemeComponent { abstract class AppThemeComponent {
static ComponentThemeData components = ComponentThemeData.raw( static const ComponentThemeData components = ComponentThemeData.raw(
topAppBars: const CustomAppBar().registry(), topAppBar: CustomAppBar(),
bottomNavigationBars: const CustomBottomBar().registry(), bottomNavigationBar: CustomBottomBar(),
loaders: const CustomLoadingWidget().registry(), loader: CustomLoadingWidget(),
errors: const CustomErrorWidget().registry(), error: CustomErrorWidget(),
); );
} }

View File

@ -22,17 +22,13 @@ import 'package:wyatt_ui_components/wyatt_ui_components.dart';
mixin CrudMixin<Cubit extends bloc_base.Cubit<dynamic>, mixin CrudMixin<Cubit extends bloc_base.Cubit<dynamic>,
SuccessState extends CrudSuccess> { SuccessState extends CrudSuccess> {
String? get loaderComponentId => null;
String? get errorComponentId => null;
Widget errorBuilder(BuildContext context, CrudError state) => Widget errorBuilder(BuildContext context, CrudError state) =>
context.components.errorComponent(errorComponentId).call( context.components.errorComponent.call(
message: message: (state.message != null) ? TextWrapper(state.message!) : null,
(state.message != null) ? TextWrapper(state.message!) : null, );
);
Widget loadingBuilder(BuildContext context, CrudLoading state) => Widget loadingBuilder(BuildContext context, CrudLoading state) =>
context.components.loaderComponent(loaderComponentId).call(); context.components.loader ?? const SizedBox.shrink();
Widget initialBuilder(BuildContext context, CrudInitial state) => Widget initialBuilder(BuildContext context, CrudInitial state) =>
const SizedBox.shrink(); const SizedBox.shrink();

View File

@ -24,8 +24,7 @@ abstract class BottomNavigationBarGridLayoutCubitScreenCrudList<
with GridLayoutMixin<SuccessType> { with GridLayoutMixin<SuccessType> {
const BottomNavigationBarGridLayoutCubitScreenCrudList({ const BottomNavigationBarGridLayoutCubitScreenCrudList({
super.custom, super.custom,
super.barId, super.height = 60,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });
} }

View File

@ -26,21 +26,18 @@ abstract class BottomNavigationBarLayoutCubitScreen<
State extends Object> extends CubitScreenBase<Cubit, State> { State extends Object> extends CubitScreenBase<Cubit, State> {
const BottomNavigationBarLayoutCubitScreen({ const BottomNavigationBarLayoutCubitScreen({
this.custom, this.custom,
this.barId, this.height = 60,
this.scaffoldFieldsWrapper,
super.key, super.key,
}); });
final ComponentCallBack<BottomNavigationBarComponent>? custom; final double height;
final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)?
final String? barId; custom;
@override @override
Widget parent(BuildContext context, Widget child) => Widget parent(BuildContext context, Widget child) =>
StructuralLayout.withBottomNavBar( BottomNavigationBarLayout(
custom: custom, custom: custom,
barId: barId,
scaffoldFieldsWrapper: scaffoldFieldsWrapper,
body: child, body: child,
); );
} }

View File

@ -26,8 +26,7 @@ abstract class BottomNavigationBarLayoutCubitScreenCrud<
with CrudMixin<Cubit, CrudSuccessState> { with CrudMixin<Cubit, CrudSuccessState> {
const BottomNavigationBarLayoutCubitScreenCrud({ const BottomNavigationBarLayoutCubitScreenCrud({
super.custom, super.custom,
super.barId, super.height,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });

View File

@ -24,8 +24,7 @@ abstract class BottomNavigationBarLayoutCubitScreenCrudItem<
CrudLoaded<SuccessType>> { CrudLoaded<SuccessType>> {
const BottomNavigationBarLayoutCubitScreenCrudItem({ const BottomNavigationBarLayoutCubitScreenCrudItem({
super.custom, super.custom,
super.barId, super.height = 60,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });
} }

View File

@ -24,8 +24,7 @@ abstract class BottomNavigationBarLayoutCubitScreenCrudList<
CrudListLoaded<SuccessType>> { CrudListLoaded<SuccessType>> {
const BottomNavigationBarLayoutCubitScreenCrudList({ const BottomNavigationBarLayoutCubitScreenCrudList({
super.custom, super.custom,
super.barId, super.height = 60,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });
} }

View File

@ -20,7 +20,5 @@ import 'package:wyatt_crud_bloc/wyatt_crud_bloc.dart';
abstract class CubitScreenCrudItemBase<Cubit extends bloc_base.Cubit<CrudState>, abstract class CubitScreenCrudItemBase<Cubit extends bloc_base.Cubit<CrudState>,
T extends Object?> extends CubitScreenCrudBase<Cubit, CrudLoaded<T>> { T extends Object?> extends CubitScreenCrudBase<Cubit, CrudLoaded<T>> {
const CubitScreenCrudItemBase({ const CubitScreenCrudItemBase({super.key});
super.key,
});
} }

View File

@ -25,11 +25,7 @@ abstract class FrameLayoutGridCubitScreenCrudList<
const FrameLayoutGridCubitScreenCrudList({ const FrameLayoutGridCubitScreenCrudList({
super.customAppBar, super.customAppBar,
super.customBottomNavBar, super.customBottomNavBar,
super.floatingActionButtonId, super.height = 60,
super.height,
super.appBarId,
super.bottomNavBarId,
super.customFloatingActionButton,
super.scaffoldFieldsWrapper, super.scaffoldFieldsWrapper,
super.key, super.key,
}); });

View File

@ -26,34 +26,21 @@ abstract class FrameLayoutCubitScreen<Cubit extends bloc_base.Cubit<State>,
const FrameLayoutCubitScreen({ const FrameLayoutCubitScreen({
this.customAppBar, this.customAppBar,
this.customBottomNavBar, this.customBottomNavBar,
this.customFloatingActionButton,
this.appBarId,
this.bottomNavBarId,
this.floatingActionButtonId,
this.scaffoldFieldsWrapper, this.scaffoldFieldsWrapper,
this.height = 60, this.height = 60,
super.key, super.key,
}); });
final ComponentCallBack<TopAppBarComponent>? customAppBar; final TopAppBarComponent? Function(TopAppBarComponent?)? customAppBar;
final ComponentCallBack<BottomNavigationBarComponent>? customBottomNavBar; final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)?
final ComponentCallBack<FloatingActionButtonComponent>? customBottomNavBar;
customFloatingActionButton;
final String? appBarId;
final String? bottomNavBarId;
final String? floatingActionButtonId;
final double height; final double height;
final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; final ScaffoldFieldsWrapper? scaffoldFieldsWrapper;
@override @override
Widget parent(BuildContext context, Widget child) => Widget parent(BuildContext context, Widget child) => FrameLayout(
StructuralLayout.withFrame(
customAppBar: customAppBar, customAppBar: customAppBar,
customBottomNavBar: customBottomNavBar, customBottomNavBar: customBottomNavBar,
customFloatingActionButton: customFloatingActionButton,
appBarId: appBarId,
bottomNavBarId: bottomNavBarId,
floatingActionButtonId: floatingActionButtonId,
height: height, height: height,
scaffoldFieldsWrapper: scaffoldFieldsWrapper, scaffoldFieldsWrapper: scaffoldFieldsWrapper,
body: child, body: child,

View File

@ -27,13 +27,9 @@ abstract class FrameLayoutCubitScreenCrud<
const FrameLayoutCubitScreenCrud({ const FrameLayoutCubitScreenCrud({
super.customAppBar, super.customAppBar,
super.customBottomNavBar, super.customBottomNavBar,
super.floatingActionButtonId,
super.height, super.height,
super.appBarId,
super.bottomNavBarId,
super.customFloatingActionButton,
super.scaffoldFieldsWrapper,
super.key, super.key,
super.scaffoldFieldsWrapper,
}); });
@override @override

View File

@ -24,11 +24,7 @@ abstract class FrameLayoutCubitScreenCrudItem<
const FrameLayoutCubitScreenCrudItem({ const FrameLayoutCubitScreenCrudItem({
super.customAppBar, super.customAppBar,
super.customBottomNavBar, super.customBottomNavBar,
super.floatingActionButtonId, super.height = 60,
super.height,
super.appBarId,
super.bottomNavBarId,
super.customFloatingActionButton,
super.scaffoldFieldsWrapper, super.scaffoldFieldsWrapper,
super.key, super.key,
}); });

View File

@ -24,11 +24,7 @@ abstract class FrameLayoutCubitScreenCrudList<
const FrameLayoutCubitScreenCrudList({ const FrameLayoutCubitScreenCrudList({
super.customAppBar, super.customAppBar,
super.customBottomNavBar, super.customBottomNavBar,
super.floatingActionButtonId, super.height = 60,
super.height,
super.appBarId,
super.bottomNavBarId,
super.customFloatingActionButton,
super.scaffoldFieldsWrapper, super.scaffoldFieldsWrapper,
super.key, super.key,
}); });

View File

@ -25,8 +25,6 @@ abstract class TopAppBarGridLayoutCubitScreenCrudList<
const TopAppBarGridLayoutCubitScreenCrudList({ const TopAppBarGridLayoutCubitScreenCrudList({
super.custom, super.custom,
super.height = 60, super.height = 60,
super.barId,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });
} }

View File

@ -25,23 +25,17 @@ abstract class TopAppBarLayoutCubitScreen<Cubit extends bloc_base.Cubit<State>,
State extends Object> extends CubitScreenBase<Cubit, State> { State extends Object> extends CubitScreenBase<Cubit, State> {
const TopAppBarLayoutCubitScreen({ const TopAppBarLayoutCubitScreen({
this.custom, this.custom,
this.barId,
this.scaffoldFieldsWrapper,
this.height = 60, this.height = 60,
super.key, super.key,
}); });
final double height; final double height;
final ComponentCallBack<TopAppBarComponent>? custom; final TopAppBarComponent? Function(TopAppBarComponent?)? custom;
final String? barId;
final ScaffoldFieldsWrapper? scaffoldFieldsWrapper;
@override @override
Widget parent(BuildContext context, Widget child) => TopAppBarLayout( Widget parent(BuildContext context, Widget child) => TopAppBarLayout(
height: height, height: height,
custom: custom, custom: custom,
barId: barId,
scaffoldFieldsWrapper: scaffoldFieldsWrapper,
body: child, body: child,
); );
} }

View File

@ -27,8 +27,6 @@ abstract class TopAppBarLayoutCubitScreenCrud<
const TopAppBarLayoutCubitScreenCrud({ const TopAppBarLayoutCubitScreenCrud({
super.custom, super.custom,
super.height, super.height,
super.barId,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });

View File

@ -24,8 +24,6 @@ abstract class TopAppBarLayoutCubitScreenCrudItem<
const TopAppBarLayoutCubitScreenCrudItem({ const TopAppBarLayoutCubitScreenCrudItem({
super.custom, super.custom,
super.height = 60, super.height = 60,
super.barId,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });
} }

View File

@ -24,8 +24,6 @@ abstract class TopAppBarLayoutCubitScreenCrudList<
const TopAppBarLayoutCubitScreenCrudList({ const TopAppBarLayoutCubitScreenCrudList({
super.custom, super.custom,
super.height = 60, super.height = 60,
super.barId,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });
} }

View File

@ -25,8 +25,6 @@ abstract class TopNavigationBarGridLayoutCubitScreenCrudList<
const TopNavigationBarGridLayoutCubitScreenCrudList({ const TopNavigationBarGridLayoutCubitScreenCrudList({
super.custom, super.custom,
super.height = 60, super.height = 60,
super.barId,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });
} }

View File

@ -27,23 +27,16 @@ abstract class TopNavigationBarLayoutCubitScreen<
const TopNavigationBarLayoutCubitScreen({ const TopNavigationBarLayoutCubitScreen({
this.custom, this.custom,
this.height = 60, this.height = 60,
this.barId,
this.scaffoldFieldsWrapper,
super.key, super.key,
}); });
final double height; final double height;
final ComponentCallBack<TopNavigationBarComponent>? custom; final TopNavigationBarComponent? Function(TopNavigationBarComponent?)? custom;
final String? barId;
final ScaffoldFieldsWrapper? scaffoldFieldsWrapper;
@override @override
Widget parent(BuildContext context, Widget child) => Widget parent(BuildContext context, Widget child) => TopNavigationBarLayout(
StructuralLayout.withTopNavigationBar(
barId: barId,
custom: custom,
height: height, height: height,
scaffoldFieldsWrapper: scaffoldFieldsWrapper, custom: custom,
body: child, body: child,
); );
} }

View File

@ -27,8 +27,6 @@ abstract class TopNavigationBarLayoutCubitScreenCrud<
const TopNavigationBarLayoutCubitScreenCrud({ const TopNavigationBarLayoutCubitScreenCrud({
super.custom, super.custom,
super.height, super.height,
super.barId,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });

View File

@ -25,8 +25,6 @@ abstract class TopNavigationBarLayoutCubitScreenCrudItem<
const TopNavigationBarLayoutCubitScreenCrudItem({ const TopNavigationBarLayoutCubitScreenCrudItem({
super.custom, super.custom,
super.height = 60, super.height = 60,
super.barId,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });
} }

View File

@ -25,8 +25,6 @@ abstract class TopNavigationBarLayoutCubitScreenCrudList<
const TopNavigationBarLayoutCubitScreenCrudList({ const TopNavigationBarLayoutCubitScreenCrudList({
super.custom, super.custom,
super.height = 60, super.height = 60,
super.barId,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });
} }

View File

@ -1,16 +1,12 @@
@startuml _ @startuml Class Model
set namespaceSeparator :: set namespaceSeparator ::
abstract class "wyatt_bloc_layout::src::core::mixins::gird_view_mixin.dart::GridLayoutMixin" { abstract class "wyatt_bloc_layout::src::core::mixins::gird_view_mixin.dart::GridLayoutMixin" {
+double verticalGap
+double horizontalGap
+Widget gridChild() +Widget gridChild()
+Widget successBuilder() +Widget successBuilder()
} }
abstract class "wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" { abstract class "wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" {
+String? loaderComponentId
+String? errorComponentId
+Widget errorBuilder() +Widget errorBuilder()
+Widget loadingBuilder() +Widget loadingBuilder()
+Widget initialBuilder() +Widget initialBuilder()
@ -23,26 +19,11 @@ abstract class "wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::Cu
"wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" "wyatt_bloc_helper::src::cubit.dart::CubitScreen" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase"
abstract class "wyatt_bloc_layout::src::presentation::cubit_consumer_crud_list_base.dart::CubitConsumerCrudListBase" {
}
"wyatt_bloc_layout::src::presentation::cubit_consumer_crud_base.dart::CubitConsumerCrudBase" <|-- "wyatt_bloc_layout::src::presentation::cubit_consumer_crud_list_base.dart::CubitConsumerCrudListBase"
abstract class "wyatt_bloc_layout::src::presentation::cubit_consumer_base.dart::CubitConsumerBase" {
}
"wyatt_bloc_helper::src::cubit.dart::CubitConsumerScreen" <|-- "wyatt_bloc_layout::src::presentation::cubit_consumer_base.dart::CubitConsumerBase"
abstract class "wyatt_bloc_layout::src::presentation::cubit_screen_crud_list_base.dart::CubitScreenCrudListBase" { abstract class "wyatt_bloc_layout::src::presentation::cubit_screen_crud_list_base.dart::CubitScreenCrudListBase" {
} }
"wyatt_bloc_layout::src::presentation::cubit_screen_crud_base.dart::CubitScreenCrudBase" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_crud_list_base.dart::CubitScreenCrudListBase" "wyatt_bloc_layout::src::presentation::cubit_screen_crud_base.dart::CubitScreenCrudBase" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_crud_list_base.dart::CubitScreenCrudListBase"
abstract class "wyatt_bloc_layout::src::presentation::cubit_consumer_crud_item_base.dart::CubitConsumerCrudItemBase" {
}
"wyatt_bloc_layout::src::presentation::cubit_consumer_crud_base.dart::CubitConsumerCrudBase" <|-- "wyatt_bloc_layout::src::presentation::cubit_consumer_crud_item_base.dart::CubitConsumerCrudItemBase"
abstract class "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen_crud.dart::FrameLayoutCubitScreenCrud" { abstract class "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen_crud.dart::FrameLayoutCubitScreenCrud" {
+Widget onBuild() +Widget onBuild()
} }
@ -58,19 +39,12 @@ abstract class "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_l
abstract class "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" { abstract class "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" {
+TopAppBarComponent? Function(TopAppBarComponent?)? customAppBar +TopAppBarComponent? Function(TopAppBarComponent?)? customAppBar
+BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? customBottomNavBar +BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? customBottomNavBar
+FloatingActionButtonComponent? Function(FloatingActionButtonComponent?)? customFloatingActionButton
+String? appBarId
+String? bottomNavBarId
+String? floatingActionButtonId
+double height +double height
+ScaffoldFieldsWrapper? scaffoldFieldsWrapper
+Widget parent() +Widget parent()
} }
"wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" o-- "wyatt_ui_layout::src::presentation::layouts::structural_layouts::structural_layout.dart::TopAppBarComponent Function(TopAppBarComponent)" "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" o-- "null::TopAppBarComponent Function(TopAppBarComponent)"
"wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" o-- "wyatt_ui_layout::src::presentation::layouts::structural_layouts::structural_layout.dart::BottomNavigationBarComponent Function(BottomNavigationBarComponent)" "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" o-- "null::BottomNavigationBarComponent Function(BottomNavigationBarComponent)"
"wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" o-- "wyatt_ui_layout::src::presentation::layouts::structural_layouts::structural_layout.dart::FloatingActionButtonComponent Function(FloatingActionButtonComponent)"
"wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" o-- "wyatt_ui_layout::src::core::scaffold_fields_wrapper.dart::ScaffoldFieldsWrapper"
"wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen" "wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_layout_cubit_screen.dart::FrameLayoutCubitScreen"
abstract class "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_grid_layout_cubit_screen_crud_list.dart::FrameLayoutGridCubitScreenCrudList" { abstract class "wyatt_bloc_layout::src::presentation::frame_bloc_layout::frame_grid_layout_cubit_screen_crud_list.dart::FrameLayoutGridCubitScreenCrudList" {
@ -97,13 +71,10 @@ abstract class "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::t
abstract class "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen.dart::TopAppBarLayoutCubitScreen" { abstract class "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen.dart::TopAppBarLayoutCubitScreen" {
+double height +double height
+TopAppBarComponent? Function(TopAppBarComponent?)? custom +TopAppBarComponent? Function(TopAppBarComponent?)? custom
+String? barId
+ScaffoldFieldsWrapper? scaffoldFieldsWrapper
+Widget parent() +Widget parent()
} }
"wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen.dart::TopAppBarLayoutCubitScreen" o-- "wyatt_ui_layout::src::presentation::layouts::structural_layouts::structural_layout.dart::TopAppBarComponent Function(TopAppBarComponent)" "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen.dart::TopAppBarLayoutCubitScreen" o-- "null::TopAppBarComponent Function(TopAppBarComponent)"
"wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen.dart::TopAppBarLayoutCubitScreen" o-- "wyatt_ui_layout::src::core::scaffold_fields_wrapper.dart::ScaffoldFieldsWrapper"
"wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen.dart::TopAppBarLayoutCubitScreen" "wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen.dart::TopAppBarLayoutCubitScreen"
abstract class "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen_crud.dart::TopAppBarLayoutCubitScreenCrud" { abstract class "wyatt_bloc_layout::src::presentation::top_app_bar_bloc_layout::top_app_bar_layout_cubit_screen_crud.dart::TopAppBarLayoutCubitScreenCrud" {
@ -137,22 +108,13 @@ abstract class "wyatt_bloc_layout::src::presentation::cubit_screen_crud_base.dar
"wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_crud_base.dart::CubitScreenCrudBase" "wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_crud_base.dart::CubitScreenCrudBase"
"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_crud_base.dart::CubitScreenCrudBase" "wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::cubit_screen_crud_base.dart::CubitScreenCrudBase"
abstract class "wyatt_bloc_layout::src::presentation::cubit_consumer_crud_base.dart::CubitConsumerCrudBase" {
+Widget onBuild()
}
"wyatt_bloc_layout::src::presentation::cubit_consumer_base.dart::CubitConsumerBase" <|-- "wyatt_bloc_layout::src::presentation::cubit_consumer_crud_base.dart::CubitConsumerCrudBase"
"wyatt_bloc_layout::src::core::crud_cubit_consumer_screen_mixin.dart::CrudMixin" <|-- "wyatt_bloc_layout::src::presentation::cubit_consumer_crud_base.dart::CubitConsumerCrudBase"
abstract class "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen.dart::BottomNavigationBarLayoutCubitScreen" { abstract class "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen.dart::BottomNavigationBarLayoutCubitScreen" {
+double height
+BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? custom +BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? custom
+ScaffoldFieldsWrapper? scaffoldFieldsWrapper
+String? barId
+Widget parent() +Widget parent()
} }
"wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen.dart::BottomNavigationBarLayoutCubitScreen" o-- "wyatt_ui_layout::src::presentation::layouts::structural_layouts::structural_layout.dart::BottomNavigationBarComponent Function(BottomNavigationBarComponent)" "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen.dart::BottomNavigationBarLayoutCubitScreen" o-- "null::BottomNavigationBarComponent Function(BottomNavigationBarComponent)"
"wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen.dart::BottomNavigationBarLayoutCubitScreen" o-- "wyatt_ui_layout::src::core::scaffold_fields_wrapper.dart::ScaffoldFieldsWrapper"
"wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen.dart::BottomNavigationBarLayoutCubitScreen" "wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen.dart::BottomNavigationBarLayoutCubitScreen"
abstract class "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen_crud_item.dart::BottomNavigationBarLayoutCubitScreenCrudItem" { abstract class "wyatt_bloc_layout::src::presentation::bottom_navigation_bar_bloc_layout::bottom_navigation_bar_layout_cubit_screen_crud_item.dart::BottomNavigationBarLayoutCubitScreenCrudItem" {
@ -192,13 +154,10 @@ abstract class "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_la
abstract class "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen.dart::TopNavigationBarLayoutCubitScreen" { abstract class "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen.dart::TopNavigationBarLayoutCubitScreen" {
+double height +double height
+TopNavigationBarComponent? Function(TopNavigationBarComponent?)? custom +TopNavigationBarComponent? Function(TopNavigationBarComponent?)? custom
+String? barId
+ScaffoldFieldsWrapper? scaffoldFieldsWrapper
+Widget parent() +Widget parent()
} }
"wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen.dart::TopNavigationBarLayoutCubitScreen" o-- "wyatt_ui_layout::src::presentation::layouts::structural_layouts::structural_layout.dart::TopNavigationBarComponent Function(TopNavigationBarComponent)" "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen.dart::TopNavigationBarLayoutCubitScreen" o-- "null::TopNavigationBarComponent Function(TopNavigationBarComponent)"
"wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen.dart::TopNavigationBarLayoutCubitScreen" o-- "wyatt_ui_layout::src::core::scaffold_fields_wrapper.dart::ScaffoldFieldsWrapper"
"wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen.dart::TopNavigationBarLayoutCubitScreen" "wyatt_bloc_layout::src::presentation::cubit_screen_base.dart::CubitScreenBase" <|-- "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen.dart::TopNavigationBarLayoutCubitScreen"
abstract class "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen_crud_item.dart::TopNavigationBarLayoutCubitScreenCrudItem" { abstract class "wyatt_bloc_layout::src::presentation::top_navigation_bar_bloc_layout::top_navigation_bar_layout_cubit_screen_crud_item.dart::TopNavigationBarLayoutCubitScreenCrudItem" {

View File

@ -68,23 +68,23 @@ class ComponentThemeData {
// /// {@macro component_theme_data} // /// {@macro component_theme_data}
factory ComponentThemeData.fromOther(ComponentThemeData other) => factory ComponentThemeData.fromOther(ComponentThemeData other) =>
ComponentThemeData( ComponentThemeData(
topAppBars: other._topAppBars, topAppBars: other.topAppBars,
topNavigationBars: other._topNavigationBars, topNavigationBars: other.topNavigationBars,
bottomNavigationBars: other._bottomNavigationBars, bottomNavigationBars: other.bottomNavigationBars,
errors: other._errors, errors: other.errors,
loaders: other._loaders, loaders: other.loaders,
richTextBuilders: other._richTextBuilders, richTextBuilders: other.richTextBuilders,
textInputs: other._textInputs, textInputs: other.textInputs,
fileSelectionButtons: other._fileSelectionButtons, fileSelectionButtons: other.fileSelectionButtons,
flatButtons: other._flatButtons, flatButtons: other.flatButtons,
simpleIconButtons: other._simpleIconButtons, simpleIconButtons: other.simpleIconButtons,
symbolButtons: other._symbolButtons, symbolButtons: other.symbolButtons,
informationCards: other._informationCards, informationCards: other.informationCards,
portfolioCards: other._portfolioCards, portfolioCards: other.portfolioCards,
quoteCards: other._quoteCards, quoteCards: other.quoteCards,
skillCards: other._skillCards, skillCards: other.skillCards,
pricingCards: other._pricingCards, pricingCards: other.pricingCards,
floatingActionButtons: other._floatingActionButtons, floatingActionButtons: other.floatingActionButtons,
); );
/// Create a [ComponentThemeData] given a set of exact values. Most values /// Create a [ComponentThemeData] given a set of exact values. Most values
@ -94,40 +94,24 @@ class ComponentThemeData {
/// create intermediate themes based on two themes created with the /// create intermediate themes based on two themes created with the
/// [ComponentThemeData] constructor. /// [ComponentThemeData] constructor.
const ComponentThemeData.raw({ const ComponentThemeData.raw({
ComponentRegistry<TopAppBarComponent>? topAppBars, this.topAppBars,
ComponentRegistry<TopNavigationBarComponent>? topNavigationBars, this.topNavigationBars,
ComponentRegistry<BottomNavigationBarComponent>? bottomNavigationBars, this.bottomNavigationBars,
ComponentRegistry<ErrorComponent>? errors, this.errors,
ComponentRegistry<LoaderComponent>? loaders, this.loaders,
ComponentRegistry<RichTextBuilderComponent>? richTextBuilders, this.richTextBuilders,
ComponentRegistry<TextInputComponent>? textInputs, this.textInputs,
ComponentRegistry<FileSelectionButtonComponent>? fileSelectionButtons, this.fileSelectionButtons,
ComponentRegistry<FlatButtonComponent>? flatButtons, this.flatButtons,
ComponentRegistry<SimpleIconButtonComponent>? simpleIconButtons, this.simpleIconButtons,
ComponentRegistry<SymbolButtonComponent>? symbolButtons, this.symbolButtons,
ComponentRegistry<InformationCardComponent>? informationCards, this.informationCards,
ComponentRegistry<PortfolioCardComponent>? portfolioCards, this.portfolioCards,
ComponentRegistry<QuoteCardComponent>? quoteCards, this.quoteCards,
ComponentRegistry<SkillCardComponent>? skillCards, this.skillCards,
ComponentRegistry<PricingCardComponent>? pricingCards, this.pricingCards,
ComponentRegistry<FloatingActionButtonComponent>? floatingActionButtons, this.floatingActionButtons,
}) : _floatingActionButtons = floatingActionButtons, });
_symbolButtons = symbolButtons,
_simpleIconButtons = simpleIconButtons,
_flatButtons = flatButtons,
_fileSelectionButtons = fileSelectionButtons,
_textInputs = textInputs,
_richTextBuilders = richTextBuilders,
_pricingCards = pricingCards,
_skillCards = skillCards,
_quoteCards = quoteCards,
_portfolioCards = portfolioCards,
_informationCards = informationCards,
_loaders = loaders,
_errors = errors,
_bottomNavigationBars = bottomNavigationBars,
_topNavigationBars = topNavigationBars,
_topAppBars = topAppBars;
R _get<T extends Component, R>(T? component, R? returned) { R _get<T extends Component, R>(T? component, R? returned) {
if (component == null) { if (component == null) {
@ -145,97 +129,90 @@ class ComponentThemeData {
} }
// Bars // Bars
final ComponentRegistry<TopAppBarComponent>? _topAppBars; final ComponentRegistry<TopAppBarComponent>? topAppBars;
$TopAppBarComponentCWProxy topAppBarComponent([String? id]) => $TopAppBarComponentCWProxy topAppBarComponent([String? id]) =>
_get(_topAppBars?.call(id), _topAppBars?.call(id)?.copyWith); _get(topAppBars?.call(id), topAppBars?.call(id)?.copyWith);
final ComponentRegistry<TopNavigationBarComponent>? _topNavigationBars; final ComponentRegistry<TopNavigationBarComponent>? topNavigationBars;
$TopNavigationBarComponentCWProxy topNavigationBarComponent([String? id]) => $TopNavigationBarComponentCWProxy topNavigationBarComponent([String? id]) =>
_get( _get(topNavigationBars?.call(id), topNavigationBars?.call(id)?.copyWith);
_topNavigationBars?.call(id),
_topNavigationBars?.call(id)?.copyWith,
);
final ComponentRegistry<BottomNavigationBarComponent>? _bottomNavigationBars; final ComponentRegistry<BottomNavigationBarComponent>? bottomNavigationBars;
$BottomNavigationBarComponentCWProxy bottomNavigationBarComponent([ $BottomNavigationBarComponentCWProxy bottomNavigationBarComponent([
String? id, String? id,
]) => ]) =>
_get( _get(
_bottomNavigationBars?.call(id), bottomNavigationBars?.call(id),
_bottomNavigationBars?.call(id)?.copyWith, bottomNavigationBars?.call(id)?.copyWith,
); );
// CRUD Widgets // CRUD Widgets
final ComponentRegistry<ErrorComponent>? _errors; final ComponentRegistry<ErrorComponent>? errors;
$ErrorComponentCWProxy errorComponent([String? id]) => $ErrorComponentCWProxy errorComponent([String? id]) =>
_get(_errors?.call(id), _errors?.call(id)?.copyWith); _get(errors?.call(id), errors?.call(id)?.copyWith);
final ComponentRegistry<LoaderComponent>? _loaders; final ComponentRegistry<LoaderComponent>? loaders;
$LoaderComponentCWProxy loaderComponent([String? id]) => $LoaderComponentCWProxy loaderComponent([String? id]) =>
_get(_loaders?.call(id), _loaders?.call(id)?.copyWith); _get(loaders?.call(id), loaders?.call(id)?.copyWith);
// Cards // Cards
final ComponentRegistry<InformationCardComponent>? _informationCards; final ComponentRegistry<InformationCardComponent>? informationCards;
$InformationCardComponentCWProxy informationCardComponent([String? id]) => $InformationCardComponentCWProxy informationCardComponent([String? id]) =>
_get(_informationCards?.call(id), _informationCards?.call(id)?.copyWith); _get(informationCards?.call(id), informationCards?.call(id)?.copyWith);
final ComponentRegistry<PortfolioCardComponent>? _portfolioCards; final ComponentRegistry<PortfolioCardComponent>? portfolioCards;
$PortfolioCardComponentCWProxy portfolioCardComponent([String? id]) => $PortfolioCardComponentCWProxy portfolioCardComponent([String? id]) =>
_get(_portfolioCards?.call(id), _portfolioCards?.call(id)?.copyWith); _get(portfolioCards?.call(id), portfolioCards?.call(id)?.copyWith);
final ComponentRegistry<QuoteCardComponent>? _quoteCards; final ComponentRegistry<QuoteCardComponent>? quoteCards;
$QuoteCardComponentCWProxy quoteCardComponent([String? id]) => $QuoteCardComponentCWProxy quoteCardComponent([String? id]) =>
_get(_quoteCards?.call(id), _quoteCards?.call(id)?.copyWith); _get(quoteCards?.call(id), quoteCards?.call(id)?.copyWith);
final ComponentRegistry<SkillCardComponent>? _skillCards; final ComponentRegistry<SkillCardComponent>? skillCards;
$SkillCardComponentCWProxy skillCardComponent([String? id]) => $SkillCardComponentCWProxy skillCardComponent([String? id]) =>
_get(_skillCards?.call(id), _skillCards?.call(id)?.copyWith); _get(skillCards?.call(id), skillCards?.call(id)?.copyWith);
final ComponentRegistry<PricingCardComponent>? _pricingCards; final ComponentRegistry<PricingCardComponent>? pricingCards;
$PricingCardComponentCWProxy pricingCardComponent([String? id]) => $PricingCardComponentCWProxy pricingCardComponent([String? id]) =>
_get(_pricingCards?.call(id), _pricingCards?.call(id)?.copyWith); _get(pricingCards?.call(id), pricingCards?.call(id)?.copyWith);
// Rich Text // Rich Text
final ComponentRegistry<RichTextBuilderComponent>? _richTextBuilders; final ComponentRegistry<RichTextBuilderComponent>? richTextBuilders;
$RichTextBuilderComponentCWProxy richTextBuilderComponent([String? id]) => $RichTextBuilderComponentCWProxy richTextBuilderComponent([String? id]) =>
_get(_richTextBuilders?.call(id), _richTextBuilders?.call(id)?.copyWith); _get(richTextBuilders?.call(id), richTextBuilders?.call(id)?.copyWith);
// Text Inputs // Text Inputs
final ComponentRegistry<TextInputComponent>? _textInputs; final ComponentRegistry<TextInputComponent>? textInputs;
$TextInputComponentCWProxy textInputComponent([String? id]) => $TextInputComponentCWProxy textInputComponent([String? id]) =>
_get(_textInputs?.call(id), _textInputs?.call(id)?.copyWith); _get(textInputs?.call(id), textInputs?.call(id)?.copyWith);
// Buttons // Buttons
final ComponentRegistry<FileSelectionButtonComponent>? _fileSelectionButtons; final ComponentRegistry<FileSelectionButtonComponent>? fileSelectionButtons;
$FileSelectionButtonComponentCWProxy fileSelectionButtonComponent([ $FileSelectionButtonComponentCWProxy fileSelectionButtonComponent([
String? id, String? id,
]) => ]) =>
_get( _get(
_fileSelectionButtons?.call(id), fileSelectionButtons?.call(id),
_fileSelectionButtons?.call(id)?.copyWith, fileSelectionButtons?.call(id)?.copyWith,
); );
final ComponentRegistry<FlatButtonComponent>? _flatButtons; final ComponentRegistry<FlatButtonComponent>? flatButtons;
$FlatButtonComponentCWProxy flatButtonComponent([String? id]) => $FlatButtonComponentCWProxy flatButtonComponent([String? id]) =>
_get(_flatButtons?.call(id), _flatButtons?.call(id)?.copyWith); _get(flatButtons?.call(id), flatButtons?.call(id)?.copyWith);
final ComponentRegistry<SimpleIconButtonComponent>? _simpleIconButtons; final ComponentRegistry<SimpleIconButtonComponent>? simpleIconButtons;
$SimpleIconButtonComponentCWProxy simpleIconButtonComponent([String? id]) => $SimpleIconButtonComponentCWProxy simpleIconButtonComponent([String? id]) =>
_get( _get(simpleIconButtons?.call(id), simpleIconButtons?.call(id)?.copyWith);
_simpleIconButtons?.call(id),
_simpleIconButtons?.call(id)?.copyWith,
);
final ComponentRegistry<SymbolButtonComponent>? _symbolButtons; final ComponentRegistry<SymbolButtonComponent>? symbolButtons;
$SymbolButtonComponentCWProxy symbolButtonComponent([String? id]) => $SymbolButtonComponentCWProxy symbolButtonComponent([String? id]) =>
_get(_symbolButtons?.call(id), _symbolButtons?.call(id)?.copyWith); _get(symbolButtons?.call(id), symbolButtons?.call(id)?.copyWith);
final ComponentRegistry<FloatingActionButtonComponent>? final ComponentRegistry<FloatingActionButtonComponent>? floatingActionButtons;
_floatingActionButtons;
$FloatingActionButtonComponentCWProxy floatingActionButtonComponent([ $FloatingActionButtonComponentCWProxy floatingActionButtonComponent([
String? id, String? id,
]) => ]) =>
_get( _get(
_floatingActionButtons?.call(id), floatingActionButtons?.call(id),
_floatingActionButtons?.call(id)?.copyWith, floatingActionButtons?.call(id)?.copyWith,
); );
} }

View File

@ -30,13 +30,13 @@ class PortfolioCards extends StatelessWidget {
'quis elit ut amet velit. Incididunt fugiat proident ' 'quis elit ut amet velit. Incididunt fugiat proident '
'proident deserunt tempor Lorem cillum qui do '), 'proident deserunt tempor Lorem cillum qui do '),
ctas: [ ctas: [
context.components.flatButtonComponent().call( context.components.flatButtonComponent.call(
label: const TextWrapper('En savoir plus'), label: const TextWrapper('En savoir plus'),
suffix: const Icon( suffix: const Icon(
Icons.arrow_forward_ios, Icons.arrow_forward_ios,
size: 15, size: 15,
), ),
), ),
], ],
assets: [ assets: [
Image.asset( Image.asset(
@ -65,13 +65,13 @@ class PortfolioCards extends StatelessWidget {
'quis elit ut amet velit. Incididunt fugiat proident ' 'quis elit ut amet velit. Incididunt fugiat proident '
'proident deserunt tempor Lorem cillum qui do '), 'proident deserunt tempor Lorem cillum qui do '),
ctas: [ ctas: [
context.components.flatButtonComponent().call( context.components.flatButtonComponent.call(
label: const TextWrapper('En savoir plus'), label: const TextWrapper('En savoir plus'),
suffix: const Icon( suffix: const Icon(
Icons.arrow_forward_ios, Icons.arrow_forward_ios,
size: 15, size: 15,
), ),
), ),
], ],
assets: [ assets: [
Image.asset( Image.asset(
@ -100,13 +100,13 @@ class PortfolioCards extends StatelessWidget {
'quis elit ut amet velit. Incididunt fugiat proident ' 'quis elit ut amet velit. Incididunt fugiat proident '
'proident deserunt tempor Lorem cillum qui do '), 'proident deserunt tempor Lorem cillum qui do '),
ctas: [ ctas: [
context.components.flatButtonComponent().call( context.components.flatButtonComponent.call(
label: const TextWrapper('En savoir plus'), label: const TextWrapper('En savoir plus'),
suffix: const Icon( suffix: const Icon(
Icons.arrow_forward_ios, Icons.arrow_forward_ios,
size: 15, size: 15,
), ),
), ),
], ],
assets: [ assets: [
Image.asset( Image.asset(
@ -145,13 +145,13 @@ class PortfolioCards extends StatelessWidget {
'quis elit ut amet velit. Incididunt fugiat proident ' 'quis elit ut amet velit. Incididunt fugiat proident '
'proident deserunt tempor Lorem cillum qui do '), 'proident deserunt tempor Lorem cillum qui do '),
ctas: [ ctas: [
context.components.flatButtonComponent().call( context.components.flatButtonComponent.call(
label: const TextWrapper('En savoir plus'), label: const TextWrapper('En savoir plus'),
suffix: const Icon( suffix: const Icon(
Icons.arrow_forward_ios, Icons.arrow_forward_ios,
size: 15, size: 15,
), ),
), ),
], ],
assets: [ assets: [
Image.asset( Image.asset(

View File

@ -73,20 +73,20 @@ class PricingCards extends StatelessWidget {
), ),
), ),
], ],
cta: context.components.flatButtonComponent().call( cta: context.components.flatButtonComponent.call(
label: const TextWrapper( label: const TextWrapper(
'Contactez-nous', 'Contactez-nous',
style: TextStyle(color: Colors.white), style: TextStyle(color: Colors.white),
),
normalStyle: FlatButtonThemeExtensionImpl.dark(
theme: Theme.of(context),
).normalStyle?.copyWith(
backgroundColors:
const MultiColor(Constants.blueBtnGradient),
borderColors:
const MultiColor(Constants.blueBtnGradient),
), ),
normalStyle: FlatButtonThemeExtensionImpl.dark( ),
theme: Theme.of(context),
).normalStyle?.copyWith(
backgroundColors:
const MultiColor(Constants.blueBtnGradient),
borderColors:
const MultiColor(Constants.blueBtnGradient),
),
),
), ),
const Gap(20), const Gap(20),
PricingCard( PricingCard(
@ -130,20 +130,20 @@ class PricingCards extends StatelessWidget {
), ),
), ),
], ],
cta: context.components.flatButtonComponent().call( cta: context.components.flatButtonComponent.call(
label: const TextWrapper( label: const TextWrapper(
'Contactez-nous', 'Contactez-nous',
style: TextStyle(color: Colors.white), style: TextStyle(color: Colors.white),
),
normalStyle: FlatButtonThemeExtensionImpl.dark(
theme: Theme.of(context),
).normalStyle?.copyWith(
backgroundColors:
const MultiColor(Constants.purpleGradient),
borderColors:
const MultiColor(Constants.purpleGradient),
), ),
normalStyle: FlatButtonThemeExtensionImpl.dark( ),
theme: Theme.of(context),
).normalStyle?.copyWith(
backgroundColors:
const MultiColor(Constants.purpleGradient),
borderColors:
const MultiColor(Constants.purpleGradient),
),
),
), ),
], ],
), ),

View File

@ -22,22 +22,23 @@ import 'package:wyatt_ui_kit/wyatt_ui_kit.dart';
/// {@endtemplate} /// {@endtemplate}
abstract class WyattComponentThemeData { abstract class WyattComponentThemeData {
/// {@macro wyatt_component_theme_data} /// {@macro wyatt_component_theme_data}
static ComponentThemeData wyattComponentThemeData = ComponentThemeData.raw( static const ComponentThemeData wyattComponentThemeData =
topAppBars: const TopAppBar().registry(), ComponentThemeData.raw(
topNavigationBars: const TopNavigationBar().registry(), topAppBar: TopAppBar(),
// bottomNavigationBars: , topNavigationBar: TopNavigationBar(),
// errors: , // bottomNavigationBar: ,
loaders: const Loader().registry(), // error: ,
richTextBuilders: const RichTextBuilder().registry(), loader: Loader(),
textInputs: const TextInput().registry(), richTextBuilder: RichTextBuilder(),
fileSelectionButtons: const FileSelectionButton().registry(), textInput: TextInput(),
flatButtons: const FlatButton().registry(), fileSelectionButton: FileSelectionButton(),
simpleIconButtons: const SimpleIconButton().registry(), flatButton: FlatButton(),
symbolButtons: const SymbolButton().registry(), simpleIconButton: SimpleIconButton(),
informationCards: const InformationCard().registry(), symbolButton: SymbolButton(),
portfolioCards: const PortfolioCard().registry(), informationCard: InformationCard(),
quoteCards: const QuoteCard().registry(), portfolioCard: PortfolioCard(),
skillCards: const SkillCard().registry(), quoteCard: QuoteCard(),
pricingCards: const PricingCard().registry(), skillCard: SkillCard(),
pricingCard: PricingCard(),
); );
} }

View File

@ -3,19 +3,17 @@ import 'package:flutter/services.dart';
import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart'; import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart';
import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart';
part 'custom_mobile_app_bar.g.dart'; part 'custom_app_bar.g.dart';
@ComponentCopyWithExtension() @ComponentCopyWithExtension()
class CustomMobileAppBar extends TopAppBarComponent class CustomAppBar extends TopAppBarComponent with $CustomAppBarCWMixin {
with $CustomMobileAppBarCWMixin { const CustomAppBar({
const CustomMobileAppBar({
super.title, super.title,
super.key, super.key,
}); });
@override @override
Widget build(BuildContext context) => AppBar( Widget build(BuildContext context) => AppBar(
backgroundColor: Colors.red,
title: Text(title?.data ?? ''), title: Text(title?.data ?? ''),
); );
} }

View File

@ -17,15 +17,11 @@ class $CustomBottomNavigationBarCWProxyImpl
CustomBottomNavigationBar currentIndex(int? currentIndex) => CustomBottomNavigationBar currentIndex(int? currentIndex) =>
this(currentIndex: currentIndex); this(currentIndex: currentIndex);
@override @override
CustomBottomNavigationBar items(List<BottomNavigationBarItem>? items) =>
this(items: items);
@override
CustomBottomNavigationBar key(Key? key) => this(key: key); CustomBottomNavigationBar key(Key? key) => this(key: key);
@override @override
CustomBottomNavigationBar call({ CustomBottomNavigationBar call({
void Function(BuildContext, int)? onTap, void Function(BuildContext, int)? onTap,
int? currentIndex, int? currentIndex,
List<BottomNavigationBarItem>? items,
Key? key, Key? key,
}) => }) =>
CustomBottomNavigationBar( CustomBottomNavigationBar(

View File

@ -1,21 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:wyatt_component_copy_with_extension/wyatt_component_copy_with_extension.dart';
import 'package:wyatt_ui_components/wyatt_ui_components.dart';
part 'custom_desktop_app_bar.g.dart';
@ComponentCopyWithExtension()
class CustomDesktopAppBar extends TopAppBarComponent
with $CustomDesktopAppBarCWMixin {
const CustomDesktopAppBar({
super.title,
super.key,
});
@override
Widget build(BuildContext context) => AppBar(
backgroundColor: Colors.green,
title: Text(title?.data ?? ''),
);
}

View File

@ -1,104 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'custom_desktop_app_bar.dart';
// **************************************************************************
// ComponentCopyWithGenerator
// **************************************************************************
class $CustomDesktopAppBarCWProxyImpl implements $TopAppBarComponentCWProxy {
const $CustomDesktopAppBarCWProxyImpl(this._value);
final CustomDesktopAppBar _value;
@override
CustomDesktopAppBar title(TextWrapper? title) => this(title: title);
@override
CustomDesktopAppBar centerTitle(bool? centerTitle) =>
this(centerTitle: centerTitle);
@override
CustomDesktopAppBar shape(ShapeBorder? shape) => this(shape: shape);
@override
CustomDesktopAppBar systemOverlayStyle(
SystemUiOverlayStyle? systemOverlayStyle) =>
this(systemOverlayStyle: systemOverlayStyle);
@override
CustomDesktopAppBar automaticallyImplyLeading(
bool? automaticallyImplyLeading) =>
this(automaticallyImplyLeading: automaticallyImplyLeading);
@override
CustomDesktopAppBar flexibleSpace(Widget? flexibleSpace) =>
this(flexibleSpace: flexibleSpace);
@override
CustomDesktopAppBar bottom(PreferredSizeWidget? bottom) =>
this(bottom: bottom);
@override
CustomDesktopAppBar elevation(double? elevation) =>
this(elevation: elevation);
@override
CustomDesktopAppBar scrolledUnderElevation(double? scrolledUnderElevation) =>
this(scrolledUnderElevation: scrolledUnderElevation);
@override
CustomDesktopAppBar shadowColor(Color? shadowColor) =>
this(shadowColor: shadowColor);
@override
CustomDesktopAppBar surfaceTintColor(Color? surfaceTintColor) =>
this(surfaceTintColor: surfaceTintColor);
@override
CustomDesktopAppBar backgroundColor(MultiColor? backgroundColor) =>
this(backgroundColor: backgroundColor);
@override
CustomDesktopAppBar iconTheme(IconThemeData? iconTheme) =>
this(iconTheme: iconTheme);
@override
CustomDesktopAppBar primary(bool? primary) => this(primary: primary);
@override
CustomDesktopAppBar excludeHeaderSemantics(bool? excludeHeaderSemantics) =>
this(excludeHeaderSemantics: excludeHeaderSemantics);
@override
CustomDesktopAppBar toolbarHeight(double? toolbarHeight) =>
this(toolbarHeight: toolbarHeight);
@override
CustomDesktopAppBar leadingWidth(double? leadingWidth) =>
this(leadingWidth: leadingWidth);
@override
CustomDesktopAppBar leading(Widget? leading) => this(leading: leading);
@override
CustomDesktopAppBar actions(List<Widget>? actions) => this(actions: actions);
@override
CustomDesktopAppBar expandedWidget(List<Widget>? expandedWidget) =>
this(expandedWidget: expandedWidget);
@override
CustomDesktopAppBar key(Key? key) => this(key: key);
@override
CustomDesktopAppBar call({
TextWrapper? title,
bool? centerTitle,
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<Widget>? actions,
List<Widget>? expandedWidget,
Key? key,
}) =>
CustomDesktopAppBar(
title: title ?? _value.title,
key: key ?? _value.key,
);
}
mixin $CustomDesktopAppBarCWMixin on Component {
$TopAppBarComponentCWProxy get copyWith =>
$CustomDesktopAppBarCWProxyImpl(this as CustomDesktopAppBar);
}

View File

@ -1,103 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'custom_mobile_app_bar.dart';
// **************************************************************************
// ComponentCopyWithGenerator
// **************************************************************************
class $CustomMobileAppBarCWProxyImpl implements $TopAppBarComponentCWProxy {
const $CustomMobileAppBarCWProxyImpl(this._value);
final CustomMobileAppBar _value;
@override
CustomMobileAppBar title(TextWrapper? title) => this(title: title);
@override
CustomMobileAppBar centerTitle(bool? centerTitle) =>
this(centerTitle: centerTitle);
@override
CustomMobileAppBar shape(ShapeBorder? shape) => this(shape: shape);
@override
CustomMobileAppBar systemOverlayStyle(
SystemUiOverlayStyle? systemOverlayStyle) =>
this(systemOverlayStyle: systemOverlayStyle);
@override
CustomMobileAppBar automaticallyImplyLeading(
bool? automaticallyImplyLeading) =>
this(automaticallyImplyLeading: automaticallyImplyLeading);
@override
CustomMobileAppBar flexibleSpace(Widget? flexibleSpace) =>
this(flexibleSpace: flexibleSpace);
@override
CustomMobileAppBar bottom(PreferredSizeWidget? bottom) =>
this(bottom: bottom);
@override
CustomMobileAppBar elevation(double? elevation) => this(elevation: elevation);
@override
CustomMobileAppBar scrolledUnderElevation(double? scrolledUnderElevation) =>
this(scrolledUnderElevation: scrolledUnderElevation);
@override
CustomMobileAppBar shadowColor(Color? shadowColor) =>
this(shadowColor: shadowColor);
@override
CustomMobileAppBar surfaceTintColor(Color? surfaceTintColor) =>
this(surfaceTintColor: surfaceTintColor);
@override
CustomMobileAppBar backgroundColor(MultiColor? backgroundColor) =>
this(backgroundColor: backgroundColor);
@override
CustomMobileAppBar iconTheme(IconThemeData? iconTheme) =>
this(iconTheme: iconTheme);
@override
CustomMobileAppBar primary(bool? primary) => this(primary: primary);
@override
CustomMobileAppBar excludeHeaderSemantics(bool? excludeHeaderSemantics) =>
this(excludeHeaderSemantics: excludeHeaderSemantics);
@override
CustomMobileAppBar toolbarHeight(double? toolbarHeight) =>
this(toolbarHeight: toolbarHeight);
@override
CustomMobileAppBar leadingWidth(double? leadingWidth) =>
this(leadingWidth: leadingWidth);
@override
CustomMobileAppBar leading(Widget? leading) => this(leading: leading);
@override
CustomMobileAppBar actions(List<Widget>? actions) => this(actions: actions);
@override
CustomMobileAppBar expandedWidget(List<Widget>? expandedWidget) =>
this(expandedWidget: expandedWidget);
@override
CustomMobileAppBar key(Key? key) => this(key: key);
@override
CustomMobileAppBar call({
TextWrapper? title,
bool? centerTitle,
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<Widget>? actions,
List<Widget>? expandedWidget,
Key? key,
}) =>
CustomMobileAppBar(
title: title ?? _value.title,
key: key ?? _value.key,
);
}
mixin $CustomMobileAppBarCWMixin on Component {
$TopAppBarComponentCWProxy get copyWith =>
$CustomMobileAppBarCWProxyImpl(this as CustomMobileAppBar);
}

View File

@ -1,18 +1,14 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart';
import 'package:wyatt_ui_layout_example/components/custom_app_bar.dart';
import 'package:wyatt_ui_layout_example/components/custom_bottom_navigation_bar.dart'; import 'package:wyatt_ui_layout_example/components/custom_bottom_navigation_bar.dart';
import 'package:wyatt_ui_layout_example/components/custom_desktop_app_bar.dart';
import 'package:wyatt_ui_layout_example/components/custom_mobile_app_bar.dart';
import 'package:wyatt_ui_layout_example/pages/bottom_navigation_bar_layout_page_1.dart'; import 'package:wyatt_ui_layout_example/pages/bottom_navigation_bar_layout_page_1.dart';
import 'package:wyatt_ui_layout_example/pages/bottom_navigation_bar_layout_page_2.dart'; import 'package:wyatt_ui_layout_example/pages/bottom_navigation_bar_layout_page_2.dart';
class AppThemeComponent { class AppThemeComponent {
static ComponentThemeData get components => ComponentThemeData.raw( static ComponentThemeData get components => ComponentThemeData.raw(
topAppBars: { topAppBar: const CustomAppBar(),
'mobile': const CustomMobileAppBar(), bottomNavigationBar: CustomBottomNavigationBar(
'desktop': const CustomDesktopAppBar(),
}.registry(),
bottomNavigationBars: CustomBottomNavigationBar(
onTap: (context, index) { onTap: (context, index) {
switch (index) { switch (index) {
case 0: case 0:
@ -41,6 +37,6 @@ class AppThemeComponent {
break; break;
} }
}, },
).registry(), ),
); );
} }

View File

@ -6,15 +6,12 @@ class AppBarLayoutPage extends StatelessWidget {
const AppBarLayoutPage({super.key}); const AppBarLayoutPage({super.key});
@override @override
Widget build(BuildContext context) => LayoutBuilder( Widget build(BuildContext context) => TopAppBarLayout(
builder: (context, constraint) => StructuralLayout.withTopAppBar( custom: (topBar) =>
barId: constraint.maxWidth < 600 ? 'mobile' : 'desktop', topBar?.copyWith.title(const TextWrapper('New Title')),
custom: (topBar) => body: const Center(
topBar?.copyWith.title(const TextWrapper('New Title')), child: Text(
body: const Center( 'Body',
child: Text(
'Body',
),
), ),
), ),
); );

View File

@ -5,7 +5,7 @@ class BottomNavigationBarLayoutPage1 extends StatelessWidget {
const BottomNavigationBarLayoutPage1({super.key}); const BottomNavigationBarLayoutPage1({super.key});
@override @override
Widget build(BuildContext context) => StructuralLayout.withBottomNavBar( Widget build(BuildContext context) => BottomNavigationBarLayout(
custom: (p0) => p0?.copyWith.call(currentIndex: 0), custom: (p0) => p0?.copyWith.call(currentIndex: 0),
body: const TopAppBarLayout( body: const TopAppBarLayout(
body: Center( body: Center(

View File

@ -5,7 +5,7 @@ class BottomNavigationBarLayoutPage2 extends StatelessWidget {
const BottomNavigationBarLayoutPage2({super.key}); const BottomNavigationBarLayoutPage2({super.key});
@override @override
Widget build(BuildContext context) => StructuralLayout.withBottomNavBar( Widget build(BuildContext context) => BottomNavigationBarLayout(
custom: (p0) => p0?.copyWith.currentIndex(1), custom: (p0) => p0?.copyWith.currentIndex(1),
body: const TopAppBarLayout( body: const TopAppBarLayout(
body: Center( body: Center(

View File

@ -1,6 +1,5 @@
# Flutter-related # Flutter-related
Flutter/ephemeral/ **/Flutter/ephemeral/
Flutter/Generated.xcconfig
**/Pods/ **/Pods/
# Xcode-related # Xcode-related

View File

@ -0,0 +1,11 @@
// This is a generated file; do not edit or check into version control.
FLUTTER_ROOT=/Users/maloleon/Library/flutter
FLUTTER_APPLICATION_PATH=/Users/maloleon/Studio/wyatt-packages/packages/wyatt_ui_layout/example
COCOAPODS_PARALLEL_CODE_SIGN=true
FLUTTER_BUILD_DIR=build
FLUTTER_BUILD_NAME=1.0.0
FLUTTER_BUILD_NUMBER=1
DART_OBFUSCATION=false
TRACK_WIDGET_CREATION=true
TREE_SHAKE_ICONS=false
PACKAGE_CONFIG=.dart_tool/package_config.json

View File

@ -0,0 +1,12 @@
#!/bin/sh
# This is a generated file; do not edit or check into version control.
export "FLUTTER_ROOT=/Users/maloleon/Library/flutter"
export "FLUTTER_APPLICATION_PATH=/Users/maloleon/Studio/wyatt-packages/packages/wyatt_ui_layout/example"
export "COCOAPODS_PARALLEL_CODE_SIGN=true"
export "FLUTTER_BUILD_DIR=build"
export "FLUTTER_BUILD_NAME=1.0.0"
export "FLUTTER_BUILD_NUMBER=1"
export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=true"
export "TREE_SHAKE_ICONS=false"
export "PACKAGE_CONFIG=.dart_tool/package_config.json"

View File

@ -182,7 +182,7 @@
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
LastSwiftUpdateCheck = 0920; LastSwiftUpdateCheck = 0920;
LastUpgradeCheck = 1430; LastUpgradeCheck = 1300;
ORGANIZATIONNAME = ""; ORGANIZATIONNAME = "";
TargetAttributes = { TargetAttributes = {
33CC10EC2044A3C60003C045 = { 33CC10EC2044A3C60003C045 = {

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "1430" LastUpgradeVersion = "1300"
version = "1.3"> version = "1.3">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"

View File

@ -18,7 +18,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1 version: 1.0.0+1
environment: environment:
sdk: ">=3.0.0 <4.0.0" sdk: ">=2.17.0 <3.0.0"
# Dependencies specify other packages that your package needs in order to work. # Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions # To automatically upgrade your package dependencies to the latest versions

View File

@ -1,39 +0,0 @@
// Copyright (C) 2022 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_ui_layout/src/presentation/layouts/layout.dart';
import 'package:wyatt_ui_layout/wyatt_ui_layout.dart';
/// {@template content_layout}
/// An abstract class that provides a base for creating custom content layout
/// widgets.
/// {@endtemplate}
abstract class ContentLayout extends Layout {
/// {@macro content_layout}
const ContentLayout({super.key});
factory ContentLayout.withGrid({
required List<Widget> children,
double verticalGap = 30,
double horizontalGap = 30,
}) =>
GridLayout(
verticalGap: verticalGap,
horizontalGap: horizontalGap,
children: children,
);
}

View File

@ -14,5 +14,4 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
export './content_layout.dart';
export './grid_layout.dart'; export './grid_layout.dart';

View File

@ -16,7 +16,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gap/gap.dart'; import 'package:gap/gap.dart';
import 'package:wyatt_ui_layout/src/presentation/layouts/content_layouts/content_layout.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart';
/// {@template grid_layout} /// {@template grid_layout}
/// A concrete implementation of the [ContentLayout] abstract class for a layout /// A concrete implementation of the [ContentLayout] abstract class for a layout

View File

@ -28,3 +28,21 @@ abstract class Layout extends StatelessWidget {
/// {@macro layout} /// {@macro layout}
const Layout({super.key}); const Layout({super.key});
} }
/// {@template structural_layout}
/// An abstract class that provides a base for creating custom structural layout
/// widgets.
/// {@endtemplate}
abstract class StructuralLayout extends Layout {
/// {@macro structural_layout}
const StructuralLayout({super.key});
}
/// {@template content_layout}
/// An abstract class that provides a base for creating custom content layout
/// widgets.
/// {@endtemplate}
abstract class ContentLayout extends Layout {
/// {@macro content_layout}
const ContentLayout({super.key});
}

View File

@ -19,7 +19,6 @@ import 'package:flutter/material.dart';
import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart';
import 'package:wyatt_ui_layout/src/core/scaffold_fields_wrapper.dart'; import 'package:wyatt_ui_layout/src/core/scaffold_fields_wrapper.dart';
import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart';
import 'package:wyatt_ui_layout/src/presentation/layouts/structural_layouts/structural_layout.dart';
/// {@template bottom_navigation_bar_layout} /// {@template bottom_navigation_bar_layout}
/// A concrete implementation of the [Layout] abstract class for a layout which /// A concrete implementation of the [Layout] abstract class for a layout which
@ -30,7 +29,6 @@ class BottomNavigationBarLayout extends StructuralLayout {
const BottomNavigationBarLayout({ const BottomNavigationBarLayout({
required this.body, required this.body,
this.custom, this.custom,
this.barId,
this.scaffoldFieldsWrapper, this.scaffoldFieldsWrapper,
super.key, super.key,
}); });
@ -43,23 +41,15 @@ class BottomNavigationBarLayout extends StructuralLayout {
final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)?
custom; custom;
/// The parameter [barId] enables to specify the particular
/// bottom bar to utilize.
final String? barId;
/// The [scaffoldFieldsWrapper] is a final variable that serves as a wrapper
/// for customizing the scaffold.
/// It allows for tailored modifications and enhancements to the standard
/// scaffold functionality.
final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; final ScaffoldFieldsWrapper? scaffoldFieldsWrapper;
@override @override
Widget build(BuildContext context) => Scaffold( Widget build(BuildContext context) => Scaffold(
body: body, body: body,
bottomNavigationBar: custom?.call( bottomNavigationBar: custom?.call(
context.components.bottomNavigationBarComponent(barId).call(), context.components.bottomNavigationBar,
) ?? ) ??
context.components.bottomNavigationBarComponent(barId).call(), context.components.bottomNavigationBar,
floatingActionButtonLocation: floatingActionButtonLocation:
scaffoldFieldsWrapper?.floatingActionButtonLocation, scaffoldFieldsWrapper?.floatingActionButtonLocation,
floatingActionButtonAnimator: floatingActionButtonAnimator:

View File

@ -18,7 +18,7 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart';
import 'package:wyatt_ui_layout/src/core/scaffold_fields_wrapper.dart'; import 'package:wyatt_ui_layout/src/core/scaffold_fields_wrapper.dart';
import 'package:wyatt_ui_layout/src/presentation/layouts/structural_layouts/structural_layout.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart';
/// {@template frame_layout} /// {@template frame_layout}
/// A layout that contains a top app bar, a body and a bottom navigation bar. /// A layout that contains a top app bar, a body and a bottom navigation bar.
@ -36,9 +36,6 @@ class FrameLayout extends StructuralLayout {
this.customAppBar, this.customAppBar,
this.customBottomNavBar, this.customBottomNavBar,
this.customFloatingActionButton, this.customFloatingActionButton,
this.appBarId,
this.bottomNavBarId,
this.floatingActionButtonId,
this.height = 60, this.height = 60,
this.scaffoldFieldsWrapper, this.scaffoldFieldsWrapper,
super.key, super.key,
@ -56,18 +53,6 @@ class FrameLayout extends StructuralLayout {
final FloatingActionButtonComponent? Function(FloatingActionButtonComponent?)? final FloatingActionButtonComponent? Function(FloatingActionButtonComponent?)?
customFloatingActionButton; customFloatingActionButton;
/// The parameter [appBarId] enables to specify the particular
/// app bar to utilize.
final String? appBarId;
/// The parameter [bottomNavBarId] enables to specify the particular
/// bottom bar to utilize.
final String? bottomNavBarId;
/// The parameter [floatingActionButtonId] enables to specify
/// the particular floating action button to utilize.
final String? floatingActionButtonId;
/// The main content of the layout. /// The main content of the layout.
final Widget body; final Widget body;
@ -78,27 +63,20 @@ class FrameLayout extends StructuralLayout {
@override @override
Widget build(BuildContext context) => Scaffold( Widget build(BuildContext context) => Scaffold(
appBar: (customAppBar appBar: (customAppBar?.call(context.components.topAppBar) != null ||
?.call(context.components.topAppBarComponent(appBarId)()) != context.components.topAppBar != null)
null)
? PreferredSize( ? PreferredSize(
preferredSize: Size.fromHeight(height), preferredSize: Size.fromHeight(height),
child: customAppBar?.call( child: customAppBar?.call(context.components.topAppBar) ??
context.components.topAppBarComponent(appBarId)(), context.components.topAppBar!,
) ??
context.components.topAppBarComponent(appBarId)(),
) )
: null, : null,
floatingActionButton: customFloatingActionButton?.call( floatingActionButton: customFloatingActionButton
context.components ?.call(context.components.floatingActionButton) ??
.floatingActionButtonComponent(floatingActionButtonId)(), context.components.floatingActionButton,
) ?? bottomNavigationBar:
context.components customBottomNavBar?.call(context.components.bottomNavigationBar) ??
.floatingActionButtonComponent(floatingActionButtonId)(), context.components.bottomNavigationBar,
bottomNavigationBar: customBottomNavBar?.call(
context.components.bottomNavigationBarComponent(bottomNavBarId)(),
) ??
context.components.bottomNavigationBarComponent(bottomNavBarId)(),
body: body, body: body,
floatingActionButtonLocation: floatingActionButtonLocation:
scaffoldFieldsWrapper?.floatingActionButtonLocation, scaffoldFieldsWrapper?.floatingActionButtonLocation,

View File

@ -1,99 +0,0 @@
// Copyright (C) 2022 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/widgets.dart';
import 'package:wyatt_ui_components/wyatt_ui_components.dart';
import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart';
import 'package:wyatt_ui_layout/wyatt_ui_layout.dart';
typedef ComponentCallBack<T extends Component> = T? Function(T? component);
/// {@template structural_layout}
/// An abstract class that provides a base for creating custom structural layout
/// widgets.
/// {@endtemplate}
abstract class StructuralLayout extends Layout {
/// {@macro structural_layout}
const StructuralLayout({super.key});
factory StructuralLayout.withTopAppBar({
required Widget body,
ComponentCallBack<TopAppBarComponent>? custom,
String? barId,
double height = 60,
ScaffoldFieldsWrapper? scaffoldFieldsWrapper,
}) =>
TopAppBarLayout(
body: body,
barId: barId,
custom: custom,
height: height,
scaffoldFieldsWrapper: scaffoldFieldsWrapper,
);
factory StructuralLayout.withTopNavigationBar({
required Widget body,
ComponentCallBack<TopNavigationBarComponent>? custom,
String? barId,
double height = 60,
ScaffoldFieldsWrapper? scaffoldFieldsWrapper,
}) =>
TopNavigationBarLayout(
body: body,
barId: barId,
custom: custom,
height: height,
scaffoldFieldsWrapper: scaffoldFieldsWrapper,
);
factory StructuralLayout.withFrame({
required Widget body,
ComponentCallBack<TopAppBarComponent>? customAppBar,
ComponentCallBack<BottomNavigationBarComponent>? customBottomNavBar,
ComponentCallBack<FloatingActionButtonComponent>?
customFloatingActionButton,
String? appBarId,
String? bottomNavBarId,
String? floatingActionButtonId,
double height = 60,
ScaffoldFieldsWrapper? scaffoldFieldsWrapper,
}) =>
FrameLayout(
body: body,
customAppBar: customAppBar,
customBottomNavBar: customBottomNavBar,
customFloatingActionButton: customFloatingActionButton,
appBarId: appBarId,
bottomNavBarId: bottomNavBarId,
floatingActionButtonId: floatingActionButtonId,
height: height,
scaffoldFieldsWrapper: scaffoldFieldsWrapper,
);
factory StructuralLayout.withBottomNavBar({
required Widget? body,
BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)?
custom,
String? barId,
ScaffoldFieldsWrapper? scaffoldFieldsWrapper,
}) =>
BottomNavigationBarLayout(
body: body,
custom: custom,
barId: barId,
scaffoldFieldsWrapper: scaffoldFieldsWrapper,
);
}

View File

@ -16,5 +16,4 @@
export './bottom_navigation_bar_layout.dart'; export './bottom_navigation_bar_layout.dart';
export './frame_layout.dart'; export './frame_layout.dart';
export './structural_layout.dart';
export './top_app_bar_layout.dart'; export './top_app_bar_layout.dart';

View File

@ -18,7 +18,7 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:wyatt_ui_components/wyatt_ui_components.dart'; import 'package:wyatt_ui_components/wyatt_ui_components.dart';
import 'package:wyatt_ui_layout/src/core/scaffold_fields_wrapper.dart'; import 'package:wyatt_ui_layout/src/core/scaffold_fields_wrapper.dart';
import 'package:wyatt_ui_layout/src/presentation/layouts/structural_layouts/structural_layout.dart'; import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart';
/// {@template top_bar_layout} /// {@template top_bar_layout}
/// An abstract class for creating layouts with a top bar component. /// An abstract class for creating layouts with a top bar component.
@ -27,7 +27,7 @@ import 'package:wyatt_ui_layout/src/presentation/layouts/structural_layouts/stru
/// component, such as an app bar or navigation bar. /// component, such as an app bar or navigation bar.
/// ///
/// Implementations of this class must provide a concrete implementation of /// Implementations of this class must provide a concrete implementation of
/// the [appBar] method, which returns the specific top bar component for the /// the [child] method, which returns the specific top bar component for the
/// given [BuildContext]. /// given [BuildContext].
/// ///
/// [T] represents the type of the top bar component. /// [T] represents the type of the top bar component.
@ -38,7 +38,6 @@ abstract class TopBarLayout<T extends TopBarComponent>
const TopBarLayout({ const TopBarLayout({
required this.body, required this.body,
this.custom, this.custom,
this.barId,
this.height = 60, this.height = 60,
this.scaffoldFieldsWrapper, this.scaffoldFieldsWrapper,
super.key, super.key,
@ -52,31 +51,20 @@ abstract class TopBarLayout<T extends TopBarComponent>
/// a customized top bar component. /// a customized top bar component.
final T? Function(T?)? custom; final T? Function(T?)? custom;
/// The parameter [barId] enables to specify the particular app bar to use.
final String? barId;
/// The height of the top bar. /// The height of the top bar.
final double height; final double height;
/// Returns the top bar component for the given [BuildContext]. /// Returns the top bar component for the given [BuildContext].
T appBar(BuildContext context, String? barId); T? child(BuildContext context);
/// The [scaffoldFieldsWrapper] is a final variable that serves as a wrapper
/// for customizing the scaffold.
/// It allows for tailored modifications and enhancements to the standard
/// scaffold functionality.
final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; final ScaffoldFieldsWrapper? scaffoldFieldsWrapper;
@override @override
Widget build(BuildContext context) => Scaffold( Widget build(BuildContext context) => Scaffold(
appBar: (custom?.call( appBar: (custom?.call(child(context)) != null || child(context) != null)
appBar(context, barId),
) !=
null)
? PreferredSize( ? PreferredSize(
preferredSize: Size.fromHeight(height), preferredSize: Size.fromHeight(height),
child: custom?.call(appBar(context, barId)) ?? child: custom?.call(child(context)) ?? child(context)!,
appBar(context, barId),
) )
: null, : null,
body: body, body: body,
@ -123,16 +111,14 @@ class TopAppBarLayout extends TopBarLayout<TopAppBarComponent> {
/// [height] represents the height of the top bar. /// [height] represents the height of the top bar.
const TopAppBarLayout({ const TopAppBarLayout({
required super.body, required super.body,
super.barId,
super.custom, super.custom,
super.height, super.height,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });
@override @override
TopAppBarComponent appBar(BuildContext context, String? barId) => TopAppBarComponent? child(BuildContext context) =>
context.components.topAppBarComponent(barId).call(); context.components.topAppBar;
} }
/// A concrete implementation of [TopBarLayout] for a navigation bar. /// A concrete implementation of [TopBarLayout] for a navigation bar.
@ -145,14 +131,12 @@ class TopNavigationBarLayout extends TopBarLayout<TopNavigationBarComponent> {
/// [height] represents the height of the top bar. /// [height] represents the height of the top bar.
const TopNavigationBarLayout({ const TopNavigationBarLayout({
required super.body, required super.body,
super.barId,
super.custom, super.custom,
super.height, super.height,
super.scaffoldFieldsWrapper,
super.key, super.key,
}); });
@override @override
TopNavigationBarComponent appBar(BuildContext context, String? barId) => TopNavigationBarComponent? child(BuildContext context) =>
context.components.topNavigationBarComponent(barId).call(); context.components.topNavigationBar;
} }

View File

@ -6,7 +6,7 @@ version: 0.1.1
publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub publish_to: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
environment: environment:
sdk: ">=3.0.0 <4.0.0" sdk: ">=2.17.0 <3.0.0"
dependencies: dependencies:
flutter: { sdk: flutter } flutter: { sdk: flutter }