Compare commits
	
		
			3 Commits
		
	
	
		
			cfcf9e75f8
			...
			80dffdb986
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 80dffdb986 | |||
| 9713d1ec29 | |||
| a15a065e36 | 
| @ -23,12 +23,17 @@ import 'package:wyatt_ui_components/wyatt_ui_components.dart'; | ||||
| mixin CrudMixin<Cubit extends bloc_base.Cubit<dynamic>, | ||||
|     SuccessState extends CrudSuccess> { | ||||
|   Widget errorBuilder(BuildContext context, CrudError state) => | ||||
|       context.components.errorComponent.call( | ||||
|         message: (state.message != null) ? TextWrapper(state.message!) : null, | ||||
|       ); | ||||
|       context.components.error != null | ||||
|           ? context.components.errorComponent.call( | ||||
|               message: | ||||
|                   (state.message != null) ? TextWrapper(state.message!) : null, | ||||
|             ) | ||||
|           : const SizedBox.shrink(); | ||||
| 
 | ||||
|   Widget loadingBuilder(BuildContext context, CrudLoading state) => | ||||
|       context.components.loader ?? const SizedBox.shrink(); | ||||
|       context.components.loader != null | ||||
|           ? context.components.loaderComponent.call() | ||||
|           : const CircularProgressIndicator(); | ||||
| 
 | ||||
|   Widget initialBuilder(BuildContext context, CrudInitial state) => | ||||
|       const SizedBox.shrink(); | ||||
|  | ||||
| @ -26,6 +26,7 @@ abstract class FrameLayoutGridCubitScreenCrudList< | ||||
|     super.customAppBar, | ||||
|     super.customBottomNavBar, | ||||
|     super.height = 60, | ||||
|     super.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| } | ||||
|  | ||||
| @ -26,6 +26,7 @@ abstract class FrameLayoutCubitScreen<Cubit extends bloc_base.Cubit<State>, | ||||
|   const FrameLayoutCubitScreen({ | ||||
|     this.customAppBar, | ||||
|     this.customBottomNavBar, | ||||
|     this.scaffoldFieldsWrapper, | ||||
|     this.height = 60, | ||||
|     super.key, | ||||
|   }); | ||||
| @ -34,12 +35,14 @@ abstract class FrameLayoutCubitScreen<Cubit extends bloc_base.Cubit<State>, | ||||
|   final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? | ||||
|       customBottomNavBar; | ||||
|   final double height; | ||||
|   final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; | ||||
| 
 | ||||
|   @override | ||||
|   Widget parent(BuildContext context, Widget child) => FrameLayout( | ||||
|         customAppBar: customAppBar, | ||||
|         customBottomNavBar: customBottomNavBar, | ||||
|         height: height, | ||||
|         scaffoldFieldsWrapper: scaffoldFieldsWrapper, | ||||
|         body: child, | ||||
|       ); | ||||
| } | ||||
|  | ||||
| @ -29,6 +29,7 @@ abstract class FrameLayoutCubitScreenCrud< | ||||
|     super.customBottomNavBar, | ||||
|     super.height, | ||||
|     super.key, | ||||
|     super.scaffoldFieldsWrapper, | ||||
|   }); | ||||
| 
 | ||||
|   @override | ||||
|  | ||||
| @ -25,6 +25,7 @@ abstract class FrameLayoutCubitScreenCrudItem< | ||||
|     super.customAppBar, | ||||
|     super.customBottomNavBar, | ||||
|     super.height = 60, | ||||
|     super.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| } | ||||
|  | ||||
| @ -25,6 +25,7 @@ abstract class FrameLayoutCubitScreenCrudList< | ||||
|     super.customAppBar, | ||||
|     super.customBottomNavBar, | ||||
|     super.height = 60, | ||||
|     super.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| } | ||||
|  | ||||
| @ -25,6 +25,7 @@ abstract class TopAppBarGridLayoutCubitScreenCrudList< | ||||
|   const TopAppBarGridLayoutCubitScreenCrudList({ | ||||
|     super.custom, | ||||
|     super.height = 60, | ||||
|     super.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| } | ||||
|  | ||||
| @ -26,16 +26,19 @@ abstract class TopAppBarLayoutCubitScreen<Cubit extends bloc_base.Cubit<State>, | ||||
|   const TopAppBarLayoutCubitScreen({ | ||||
|     this.custom, | ||||
|     this.height = 60, | ||||
|     this.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| 
 | ||||
|   final double height; | ||||
|   final TopAppBarComponent? Function(TopAppBarComponent?)? custom; | ||||
|   final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; | ||||
| 
 | ||||
|   @override | ||||
|   Widget parent(BuildContext context, Widget child) => TopAppBarLayout( | ||||
|         height: height, | ||||
|         custom: custom, | ||||
|         scaffoldFieldsWrapper: scaffoldFieldsWrapper, | ||||
|         body: child, | ||||
|       ); | ||||
| } | ||||
|  | ||||
| @ -27,6 +27,7 @@ abstract class TopAppBarLayoutCubitScreenCrud< | ||||
|   const TopAppBarLayoutCubitScreenCrud({ | ||||
|     super.custom, | ||||
|     super.height, | ||||
|     super.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| 
 | ||||
|  | ||||
| @ -24,6 +24,7 @@ abstract class TopAppBarLayoutCubitScreenCrudItem< | ||||
|   const TopAppBarLayoutCubitScreenCrudItem({ | ||||
|     super.custom, | ||||
|     super.height = 60, | ||||
|     super.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| } | ||||
|  | ||||
| @ -24,6 +24,7 @@ abstract class TopAppBarLayoutCubitScreenCrudList< | ||||
|   const TopAppBarLayoutCubitScreenCrudList({ | ||||
|     super.custom, | ||||
|     super.height = 60, | ||||
|     super.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| } | ||||
|  | ||||
| @ -19,6 +19,7 @@ export './buttons/buttons.dart'; | ||||
| export './cards/cards.dart'; | ||||
| export './component.dart'; | ||||
| export './error/error.dart'; | ||||
| export './floating_buttons/floating_buttons.dart'; | ||||
| export './gradients/gradients.dart'; | ||||
| export './loader/loader.dart'; | ||||
| export './rich_text_builder/rich_text_builder.dart'; | ||||
|  | ||||
| @ -0,0 +1,17 @@ | ||||
| // Copyright (C) 2023 WYATT GROUP | ||||
| // Please see the AUTHORS file for details. | ||||
| // | ||||
| // This program is free software: you can redistribute it and/or modify | ||||
| // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation, either version 3 of the License, or | ||||
| // any later version. | ||||
| // | ||||
| // This program is distributed in the hope that it will be useful, | ||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
| // GNU General Public License for more details. | ||||
| // | ||||
| // You should have received a copy of the GNU General Public License | ||||
| // along with this program. If not, see <https://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| export './floating_action_button_component.dart'; | ||||
							
								
								
									
										17
									
								
								packages/wyatt_ui_layout/lib/src/core/core.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								packages/wyatt_ui_layout/lib/src/core/core.dart
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | ||||
| // Copyright (C) 2023 WYATT GROUP | ||||
| // Please see the AUTHORS file for details. | ||||
| // | ||||
| // This program is free software: you can redistribute it and/or modify | ||||
| // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation, either version 3 of the License, or | ||||
| // any later version. | ||||
| // | ||||
| // This program is distributed in the hope that it will be useful, | ||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
| // GNU General Public License for more details. | ||||
| // | ||||
| // You should have received a copy of the GNU General Public License | ||||
| // along with this program. If not, see <https://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| export './scaffold_fields_wrapper.dart'; | ||||
| @ -0,0 +1,244 @@ | ||||
| // Copyright (C) 2023 WYATT GROUP | ||||
| // Please see the AUTHORS file for details. | ||||
| // | ||||
| // This program is free software: you can redistribute it and/or modify | ||||
| // it under the terms of the GNU General Public License as published by | ||||
| // the Free Software Foundation, either version 3 of the License, or | ||||
| // any later version. | ||||
| // | ||||
| // This program is distributed in the hope that it will be useful, | ||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
| // GNU General Public License for more details. | ||||
| // | ||||
| // You should have received a copy of the GNU General Public License | ||||
| // along with this program. If not, see <https://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| import 'package:flutter/gestures.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| 
 | ||||
| class ScaffoldFieldsWrapper { | ||||
|   ScaffoldFieldsWrapper({ | ||||
|     this.extendBody, | ||||
|     this.extendBodyBehindAppBar, | ||||
|     this.floatingActionButtonLocation, | ||||
|     this.floatingActionButtonAnimator, | ||||
|     this.persistentFooterButtons, | ||||
|     this.persistentFooterAlignment, | ||||
|     this.drawer, | ||||
|     this.onDrawerChanged, | ||||
|     this.endDrawer, | ||||
|     this.onEndDrawerChanged, | ||||
|     this.drawerScrimColor, | ||||
|     this.backgroundColor, | ||||
|     this.bottomSheet, | ||||
|     this.resizeToAvoidBottomInset, | ||||
|     this.primary, | ||||
|     this.drawerDragStartBehavior, | ||||
|     this.drawerEdgeDragWidth, | ||||
|     this.drawerEnableOpenDragGesture, | ||||
|     this.endDrawerEnableOpenDragGesture, | ||||
|     this.restorationId, | ||||
|   }); | ||||
| 
 | ||||
|   final bool? extendBody; | ||||
| 
 | ||||
|   /// If true, and an appBar is specified, then the height of the body is | ||||
|   /// extended to include the height of the app bar and the top of the body | ||||
|   /// is aligned with the top of the app bar. | ||||
|   /// | ||||
|   /// This is useful if the app bar's [AppBar.backgroundColor] is not | ||||
|   /// completely opaque. | ||||
|   /// | ||||
|   /// This property is false by default. It must not be null. | ||||
|   /// | ||||
|   /// See also: | ||||
|   /// | ||||
|   ///  * [extendBody], which extends the height of the body to the bottom | ||||
|   ///    of the scaffold. | ||||
|   final bool? extendBodyBehindAppBar; | ||||
| 
 | ||||
|   /// Responsible for determining where the floatingActionButton should go. | ||||
|   /// | ||||
|   /// If null, the [ScaffoldState] will use | ||||
|   /// the default location, [FloatingActionButtonLocation.endFloat]. | ||||
|   final FloatingActionButtonLocation? floatingActionButtonLocation; | ||||
| 
 | ||||
|   /// Animator to move the floatingActionButton to a | ||||
|   /// new [floatingActionButtonLocation]. | ||||
|   /// | ||||
|   /// If null, the [ScaffoldState] will use the default animator, | ||||
|   /// [FloatingActionButtonAnimator.scaling]. | ||||
|   final FloatingActionButtonAnimator? floatingActionButtonAnimator; | ||||
| 
 | ||||
|   /// A set of buttons that are displayed at the bottom of the scaffold. | ||||
|   /// | ||||
|   /// Typically this is a list of [TextButton] widgets. These buttons are | ||||
|   /// persistently visible, even if the body of the scaffold scrolls. | ||||
|   /// | ||||
|   /// These widgets will be wrapped in an [OverflowBar]. | ||||
|   /// | ||||
|   /// The [persistentFooterButtons] are rendered above the | ||||
|   /// bottomNavigationBar but below the body. | ||||
|   final List<Widget>? persistentFooterButtons; | ||||
| 
 | ||||
|   /// The alignment of the [persistentFooterButtons] inside the [OverflowBar]. | ||||
|   /// | ||||
|   /// Defaults to [AlignmentDirectional.centerEnd]. | ||||
|   final AlignmentDirectional? persistentFooterAlignment; | ||||
| 
 | ||||
|   /// A panel displayed to the side of the body, often hidden on mobile | ||||
|   /// devices. Swipes in from either left-to-right ([TextDirection.ltr]) or | ||||
|   /// right-to-left ([TextDirection.rtl]) | ||||
|   /// | ||||
|   /// Typically a [Drawer]. | ||||
|   /// | ||||
|   /// To open the drawer, use the [ScaffoldState.openDrawer] function. | ||||
|   /// | ||||
|   /// To close the drawer, use either [ScaffoldState.closeDrawer], | ||||
|   /// [Navigator.pop] or press the escape key on the keyboard. | ||||
|   /// | ||||
|   /// {@tool dartpad} | ||||
|   /// To disable the drawer edge swipe on mobile, set the | ||||
|   /// [Scaffold.drawerEnableOpenDragGesture] to false. Then, use | ||||
|   /// [ScaffoldState.openDrawer] to open the drawer and [Navigator.pop] to close | ||||
|   /// it. | ||||
|   /// | ||||
|   /// ** See code in examples/api/lib/material/scaffold/scaffold.drawer.0.dart ** | ||||
|   /// {@end-tool} | ||||
|   final Widget? drawer; | ||||
| 
 | ||||
|   /// Optional callback that is called when the [Scaffold.drawer] | ||||
|   /// is opened or closed. | ||||
|   final DrawerCallback? onDrawerChanged; | ||||
| 
 | ||||
|   /// A panel displayed to the side of the body, often hidden on mobile | ||||
|   /// devices. Swipes in from right-to-left ([TextDirection.ltr]) or | ||||
|   /// left-to-right ([TextDirection.rtl]) | ||||
|   /// | ||||
|   /// Typically a [Drawer]. | ||||
|   /// | ||||
|   /// To open the drawer, use the [ScaffoldState.openEndDrawer] function. | ||||
|   /// | ||||
|   /// To close the drawer, use either [ScaffoldState.closeEndDrawer], | ||||
|   /// [Navigator.pop] | ||||
|   /// or press the escape key on the keyboard. | ||||
|   /// | ||||
|   /// {@tool dartpad} | ||||
|   /// To disable the drawer edge swipe, set the | ||||
|   /// [Scaffold.endDrawerEnableOpenDragGesture] to false. Then, use | ||||
|   /// [ScaffoldState.openEndDrawer] to open the drawer and [Navigator.pop] to | ||||
|   /// close it. | ||||
|   /// | ||||
|   /// ** See code in examples/api/lib/material/scaffold/scaffold.end_drawer.0.dart ** | ||||
|   /// {@end-tool} | ||||
|   final Widget? endDrawer; | ||||
| 
 | ||||
|   /// Optional callback that is called when the [Scaffold.endDrawer] | ||||
|   /// is opened or closed. | ||||
|   final DrawerCallback? onEndDrawerChanged; | ||||
| 
 | ||||
|   /// The color to use for the scrim that obscures primary content while | ||||
|   /// a drawer is open. | ||||
|   /// | ||||
|   /// If this is null, then [DrawerThemeData.scrimColor] is used. If that | ||||
|   /// is also null, then it defaults to [Colors.black54]. | ||||
|   final Color? drawerScrimColor; | ||||
| 
 | ||||
|   /// The color of the [Material] widget that underlies the entire Scaffold. | ||||
|   /// | ||||
|   /// The theme's [ThemeData.scaffoldBackgroundColor] by default. | ||||
|   final Color? backgroundColor; | ||||
| 
 | ||||
|   /// The persistent bottom sheet to display. | ||||
|   /// | ||||
|   /// A persistent bottom sheet shows information that supplements the primary | ||||
|   /// content of the app. A persistent bottom sheet remains visible even when | ||||
|   /// the user interacts with other parts of the app. | ||||
|   /// | ||||
|   /// A closely related widget is a modal bottom sheet, which is an alternative | ||||
|   /// to a menu or a dialog and prevents the user from interacting with the rest | ||||
|   /// of the app. Modal bottom sheets can be created and displayed with the | ||||
|   /// [showModalBottomSheet] function. | ||||
|   /// | ||||
|   /// Unlike the persistent bottom sheet displayed by [showBottomSheet] | ||||
|   /// this bottom sheet is not a [LocalHistoryEntry] and cannot be dismissed | ||||
|   /// with the scaffold appbar's back button. | ||||
|   /// | ||||
|   /// If a persistent bottom sheet created with [showBottomSheet] is already | ||||
|   /// visible, it must be closed before building the Scaffold with a new | ||||
|   /// [bottomSheet]. | ||||
|   /// | ||||
|   /// The value of [bottomSheet] can be any widget at all. It's unlikely to | ||||
|   /// actually be a [BottomSheet], which is used by the implementations of | ||||
|   /// [showBottomSheet] and [showModalBottomSheet]. Typically it's a widget | ||||
|   /// that includes [Material]. | ||||
|   /// | ||||
|   /// See also: | ||||
|   /// | ||||
|   ///  * [showBottomSheet], which displays a bottom sheet as a route that can | ||||
|   ///    be dismissed with the scaffold's back button. | ||||
|   ///  * [showModalBottomSheet], which displays a modal bottom sheet. | ||||
|   ///  * [BottomSheetThemeData], which can be used to customize the default | ||||
|   ///    bottom sheet property values when using a [BottomSheet]. | ||||
|   final Widget? bottomSheet; | ||||
| 
 | ||||
|   /// If true the body and the scaffold's floating widgets should size | ||||
|   /// themselves to avoid the onscreen keyboard whose height is defined by the | ||||
|   /// ambient [MediaQuery]'s [MediaQueryData.viewInsets] `bottom` property. | ||||
|   /// | ||||
|   /// For example, if there is an onscreen keyboard displayed above the | ||||
|   /// scaffold, the body can be resized to avoid overlapping the keyboard, which | ||||
|   /// prevents widgets inside the body from being obscured by the keyboard. | ||||
|   /// | ||||
|   /// Defaults to true. | ||||
|   final bool? resizeToAvoidBottomInset; | ||||
| 
 | ||||
|   /// Whether this scaffold is being displayed at the top of the screen. | ||||
|   /// | ||||
|   /// If true then the height of the appBar will be extended by the height | ||||
|   /// of the screen's status bar, i.e. the top padding for [MediaQuery]. | ||||
|   /// | ||||
|   /// The default value of this property, like the default value of | ||||
|   /// [AppBar.primary], is true. | ||||
|   final bool? primary; | ||||
| 
 | ||||
|   /// {@macro flutter.material.DrawerController.dragStartBehavior} | ||||
|   final DragStartBehavior? drawerDragStartBehavior; | ||||
| 
 | ||||
|   /// The width of the area within which a horizontal swipe will open the | ||||
|   /// drawer. | ||||
|   /// | ||||
|   /// By default, the value used is 20.0 added to the padding edge of | ||||
|   /// `MediaQuery.of(context).padding` that corresponds to the surrounding | ||||
|   /// [TextDirection]. This ensures that the drag area for notched devices is | ||||
|   /// not obscured. For example, if `TextDirection.of(context)` is set to | ||||
|   /// [TextDirection.ltr], 20.0 will be added to | ||||
|   /// `MediaQuery.of(context).padding.left`. | ||||
|   final double? drawerEdgeDragWidth; | ||||
| 
 | ||||
|   /// Determines if the [Scaffold.drawer] can be opened with a drag | ||||
|   /// gesture on mobile. | ||||
|   /// | ||||
|   /// On desktop platforms, the drawer is not draggable. | ||||
|   /// | ||||
|   /// By default, the drag gesture is enabled on mobile. | ||||
|   final bool? drawerEnableOpenDragGesture; | ||||
| 
 | ||||
|   /// Determines if the [Scaffold.endDrawer] can be opened with a | ||||
|   /// gesture on mobile. | ||||
|   /// | ||||
|   /// On desktop platforms, the drawer is not draggable. | ||||
|   /// | ||||
|   /// By default, the drag gesture is enabled on mobile. | ||||
|   final bool? endDrawerEnableOpenDragGesture; | ||||
| 
 | ||||
|   /// Restoration ID to save and restore the state of the [Scaffold]. | ||||
|   /// | ||||
|   /// If it is non-null, the scaffold will persist and restore whether the | ||||
|   /// [drawer] and [endDrawer] was open or closed. | ||||
|   /// | ||||
|   /// The state of this widget is persisted in a [RestorationBucket] claimed | ||||
|   /// from the surrounding [RestorationScope] using the provided restoration ID. | ||||
|   final String? restorationId; | ||||
| } | ||||
| @ -14,8 +14,10 @@ | ||||
| // 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/gestures.dart'; | ||||
| import 'package:flutter/material.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/presentation/layouts/layout.dart'; | ||||
| 
 | ||||
| /// {@template bottom_navigation_bar_layout} | ||||
| @ -27,6 +29,7 @@ class BottomNavigationBarLayout extends StructuralLayout { | ||||
|   const BottomNavigationBarLayout({ | ||||
|     required this.body, | ||||
|     this.custom, | ||||
|     this.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| 
 | ||||
| @ -38,6 +41,8 @@ class BottomNavigationBarLayout extends StructuralLayout { | ||||
|   final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? | ||||
|       custom; | ||||
| 
 | ||||
|   final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) => Scaffold( | ||||
|         body: body, | ||||
| @ -45,5 +50,35 @@ class BottomNavigationBarLayout extends StructuralLayout { | ||||
|               context.components.bottomNavigationBar, | ||||
|             ) ?? | ||||
|             context.components.bottomNavigationBar, | ||||
|         floatingActionButtonLocation: | ||||
|             scaffoldFieldsWrapper?.floatingActionButtonLocation, | ||||
|         floatingActionButtonAnimator: | ||||
|             scaffoldFieldsWrapper?.floatingActionButtonAnimator, | ||||
|         persistentFooterButtons: scaffoldFieldsWrapper?.persistentFooterButtons, | ||||
|         persistentFooterAlignment: | ||||
|             scaffoldFieldsWrapper?.persistentFooterAlignment ?? | ||||
|                 AlignmentDirectional.centerEnd, | ||||
|         drawer: scaffoldFieldsWrapper?.drawer, | ||||
|         onDrawerChanged: scaffoldFieldsWrapper?.onDrawerChanged, | ||||
|         endDrawer: scaffoldFieldsWrapper?.endDrawer, | ||||
|         onEndDrawerChanged: scaffoldFieldsWrapper?.onEndDrawerChanged, | ||||
|         bottomSheet: scaffoldFieldsWrapper?.bottomSheet, | ||||
|         backgroundColor: scaffoldFieldsWrapper?.backgroundColor, | ||||
|         resizeToAvoidBottomInset: | ||||
|             scaffoldFieldsWrapper?.resizeToAvoidBottomInset, | ||||
|         primary: scaffoldFieldsWrapper?.primary ?? true, | ||||
|         drawerDragStartBehavior: | ||||
|             scaffoldFieldsWrapper?.drawerDragStartBehavior ?? | ||||
|                 DragStartBehavior.start, | ||||
|         extendBody: scaffoldFieldsWrapper?.extendBody ?? false, | ||||
|         extendBodyBehindAppBar: | ||||
|             scaffoldFieldsWrapper?.extendBodyBehindAppBar ?? false, | ||||
|         drawerScrimColor: scaffoldFieldsWrapper?.drawerScrimColor, | ||||
|         drawerEdgeDragWidth: scaffoldFieldsWrapper?.drawerEdgeDragWidth, | ||||
|         drawerEnableOpenDragGesture: | ||||
|             scaffoldFieldsWrapper?.drawerEnableOpenDragGesture ?? true, | ||||
|         endDrawerEnableOpenDragGesture: | ||||
|             scaffoldFieldsWrapper?.endDrawerEnableOpenDragGesture ?? true, | ||||
|         restorationId: scaffoldFieldsWrapper?.restorationId, | ||||
|       ); | ||||
| } | ||||
|  | ||||
| @ -14,8 +14,10 @@ | ||||
| // 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/gestures.dart'; | ||||
| import 'package:flutter/material.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/presentation/layouts/layout.dart'; | ||||
| 
 | ||||
| /// {@template frame_layout} | ||||
| @ -33,7 +35,9 @@ class FrameLayout extends StructuralLayout { | ||||
|     required this.body, | ||||
|     this.customAppBar, | ||||
|     this.customBottomNavBar, | ||||
|     this.customFloatingActionButton, | ||||
|     this.height = 60, | ||||
|     this.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| 
 | ||||
| @ -44,12 +48,19 @@ class FrameLayout extends StructuralLayout { | ||||
|   final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? | ||||
|       customBottomNavBar; | ||||
| 
 | ||||
|   /// An optional function that can be used to customize the | ||||
|   /// floating action button | ||||
|   final FloatingActionButtonComponent? Function(FloatingActionButtonComponent?)? | ||||
|       customFloatingActionButton; | ||||
| 
 | ||||
|   /// The main content of the layout. | ||||
|   final Widget body; | ||||
| 
 | ||||
|   /// The height of the top app bar. | ||||
|   final double height; | ||||
| 
 | ||||
|   final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) => Scaffold( | ||||
|         appBar: (customAppBar?.call(context.components.topAppBar) != null || | ||||
| @ -60,9 +71,42 @@ class FrameLayout extends StructuralLayout { | ||||
|                     context.components.topAppBar!, | ||||
|               ) | ||||
|             : null, | ||||
|         body: body, | ||||
|         floatingActionButton: customFloatingActionButton | ||||
|                 ?.call(context.components.floatingActionButton) ?? | ||||
|             context.components.floatingActionButton, | ||||
|         bottomNavigationBar: | ||||
|             customBottomNavBar?.call(context.components.bottomNavigationBar) ?? | ||||
|                 context.components.bottomNavigationBar, | ||||
|         body: body, | ||||
|         floatingActionButtonLocation: | ||||
|             scaffoldFieldsWrapper?.floatingActionButtonLocation, | ||||
|         floatingActionButtonAnimator: | ||||
|             scaffoldFieldsWrapper?.floatingActionButtonAnimator, | ||||
|         persistentFooterButtons: scaffoldFieldsWrapper?.persistentFooterButtons, | ||||
|         persistentFooterAlignment: | ||||
|             scaffoldFieldsWrapper?.persistentFooterAlignment ?? | ||||
|                 AlignmentDirectional.centerEnd, | ||||
|         drawer: scaffoldFieldsWrapper?.drawer, | ||||
|         onDrawerChanged: scaffoldFieldsWrapper?.onDrawerChanged, | ||||
|         endDrawer: scaffoldFieldsWrapper?.endDrawer, | ||||
|         onEndDrawerChanged: scaffoldFieldsWrapper?.onEndDrawerChanged, | ||||
|         bottomSheet: scaffoldFieldsWrapper?.bottomSheet, | ||||
|         backgroundColor: scaffoldFieldsWrapper?.backgroundColor, | ||||
|         resizeToAvoidBottomInset: | ||||
|             scaffoldFieldsWrapper?.resizeToAvoidBottomInset, | ||||
|         primary: scaffoldFieldsWrapper?.primary ?? true, | ||||
|         drawerDragStartBehavior: | ||||
|             scaffoldFieldsWrapper?.drawerDragStartBehavior ?? | ||||
|                 DragStartBehavior.start, | ||||
|         extendBody: scaffoldFieldsWrapper?.extendBody ?? false, | ||||
|         extendBodyBehindAppBar: | ||||
|             scaffoldFieldsWrapper?.extendBodyBehindAppBar ?? false, | ||||
|         drawerScrimColor: scaffoldFieldsWrapper?.drawerScrimColor, | ||||
|         drawerEdgeDragWidth: scaffoldFieldsWrapper?.drawerEdgeDragWidth, | ||||
|         drawerEnableOpenDragGesture: | ||||
|             scaffoldFieldsWrapper?.drawerEnableOpenDragGesture ?? true, | ||||
|         endDrawerEnableOpenDragGesture: | ||||
|             scaffoldFieldsWrapper?.endDrawerEnableOpenDragGesture ?? true, | ||||
|         restorationId: scaffoldFieldsWrapper?.restorationId, | ||||
|       ); | ||||
| } | ||||
|  | ||||
| @ -14,8 +14,10 @@ | ||||
| // 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/gestures.dart'; | ||||
| import 'package:flutter/material.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/presentation/layouts/layout.dart'; | ||||
| 
 | ||||
| /// {@template top_bar_layout} | ||||
| @ -37,6 +39,7 @@ abstract class TopBarLayout<T extends TopBarComponent> | ||||
|     required this.body, | ||||
|     this.custom, | ||||
|     this.height = 60, | ||||
|     this.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| 
 | ||||
| @ -54,6 +57,8 @@ abstract class TopBarLayout<T extends TopBarComponent> | ||||
|   /// Returns the top bar component for the given [BuildContext]. | ||||
|   T? child(BuildContext context); | ||||
| 
 | ||||
|   final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) => Scaffold( | ||||
|         appBar: (custom?.call(child(context)) != null || child(context) != null) | ||||
| @ -63,6 +68,36 @@ abstract class TopBarLayout<T extends TopBarComponent> | ||||
|               ) | ||||
|             : null, | ||||
|         body: body, | ||||
|         floatingActionButtonLocation: | ||||
|             scaffoldFieldsWrapper?.floatingActionButtonLocation, | ||||
|         floatingActionButtonAnimator: | ||||
|             scaffoldFieldsWrapper?.floatingActionButtonAnimator, | ||||
|         persistentFooterButtons: scaffoldFieldsWrapper?.persistentFooterButtons, | ||||
|         persistentFooterAlignment: | ||||
|             scaffoldFieldsWrapper?.persistentFooterAlignment ?? | ||||
|                 AlignmentDirectional.centerEnd, | ||||
|         drawer: scaffoldFieldsWrapper?.drawer, | ||||
|         onDrawerChanged: scaffoldFieldsWrapper?.onDrawerChanged, | ||||
|         endDrawer: scaffoldFieldsWrapper?.endDrawer, | ||||
|         onEndDrawerChanged: scaffoldFieldsWrapper?.onEndDrawerChanged, | ||||
|         bottomSheet: scaffoldFieldsWrapper?.bottomSheet, | ||||
|         backgroundColor: scaffoldFieldsWrapper?.backgroundColor, | ||||
|         resizeToAvoidBottomInset: | ||||
|             scaffoldFieldsWrapper?.resizeToAvoidBottomInset, | ||||
|         primary: scaffoldFieldsWrapper?.primary ?? true, | ||||
|         drawerDragStartBehavior: | ||||
|             scaffoldFieldsWrapper?.drawerDragStartBehavior ?? | ||||
|                 DragStartBehavior.start, | ||||
|         extendBody: scaffoldFieldsWrapper?.extendBody ?? false, | ||||
|         extendBodyBehindAppBar: | ||||
|             scaffoldFieldsWrapper?.extendBodyBehindAppBar ?? false, | ||||
|         drawerScrimColor: scaffoldFieldsWrapper?.drawerScrimColor, | ||||
|         drawerEdgeDragWidth: scaffoldFieldsWrapper?.drawerEdgeDragWidth, | ||||
|         drawerEnableOpenDragGesture: | ||||
|             scaffoldFieldsWrapper?.drawerEnableOpenDragGesture ?? true, | ||||
|         endDrawerEnableOpenDragGesture: | ||||
|             scaffoldFieldsWrapper?.endDrawerEnableOpenDragGesture ?? true, | ||||
|         restorationId: scaffoldFieldsWrapper?.restorationId, | ||||
|       ); | ||||
| } | ||||
| 
 | ||||
| @ -78,6 +113,7 @@ class TopAppBarLayout extends TopBarLayout<TopAppBarComponent> { | ||||
|     required super.body, | ||||
|     super.custom, | ||||
|     super.height, | ||||
|     super.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| 
 | ||||
| @ -98,6 +134,7 @@ class TopNavigationBarLayout extends TopBarLayout<TopNavigationBarComponent> { | ||||
|     required super.body, | ||||
|     super.custom, | ||||
|     super.height, | ||||
|     super.scaffoldFieldsWrapper, | ||||
|     super.key, | ||||
|   }); | ||||
| 
 | ||||
|  | ||||
| @ -14,4 +14,5 @@ | ||||
| // You should have received a copy of the GNU General Public License | ||||
| // along with this program. If not, see <https://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| export 'presentation/presentation.dart'; | ||||
| export './core/core.dart'; | ||||
| export './presentation/presentation.dart'; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user