feat(ui_layout-bloc_layout): proxy scaffold fields
This commit is contained in:
		
							parent
							
								
									a15a065e36
								
							
						
					
					
						commit
						9713d1ec29
					
				| @ -26,6 +26,7 @@ abstract class FrameLayoutGridCubitScreenCrudList< | |||||||
|     super.customAppBar, |     super.customAppBar, | ||||||
|     super.customBottomNavBar, |     super.customBottomNavBar, | ||||||
|     super.height = 60, |     super.height = 60, | ||||||
|  |     super.scaffoldFieldsWrapper, | ||||||
|     super.key, |     super.key, | ||||||
|   }); |   }); | ||||||
| } | } | ||||||
|  | |||||||
| @ -26,6 +26,7 @@ abstract class FrameLayoutCubitScreen<Cubit extends bloc_base.Cubit<State>, | |||||||
|   const FrameLayoutCubitScreen({ |   const FrameLayoutCubitScreen({ | ||||||
|     this.customAppBar, |     this.customAppBar, | ||||||
|     this.customBottomNavBar, |     this.customBottomNavBar, | ||||||
|  |     this.scaffoldFieldsWrapper, | ||||||
|     this.height = 60, |     this.height = 60, | ||||||
|     super.key, |     super.key, | ||||||
|   }); |   }); | ||||||
| @ -34,12 +35,14 @@ abstract class FrameLayoutCubitScreen<Cubit extends bloc_base.Cubit<State>, | |||||||
|   final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? |   final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? | ||||||
|       customBottomNavBar; |       customBottomNavBar; | ||||||
|   final double height; |   final double height; | ||||||
|  |   final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; | ||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|   Widget parent(BuildContext context, Widget child) => FrameLayout( |   Widget parent(BuildContext context, Widget child) => FrameLayout( | ||||||
|         customAppBar: customAppBar, |         customAppBar: customAppBar, | ||||||
|         customBottomNavBar: customBottomNavBar, |         customBottomNavBar: customBottomNavBar, | ||||||
|         height: height, |         height: height, | ||||||
|  |         scaffoldFieldsWrapper: scaffoldFieldsWrapper, | ||||||
|         body: child, |         body: child, | ||||||
|       ); |       ); | ||||||
| } | } | ||||||
|  | |||||||
| @ -29,6 +29,7 @@ abstract class FrameLayoutCubitScreenCrud< | |||||||
|     super.customBottomNavBar, |     super.customBottomNavBar, | ||||||
|     super.height, |     super.height, | ||||||
|     super.key, |     super.key, | ||||||
|  |     super.scaffoldFieldsWrapper, | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|  | |||||||
| @ -25,6 +25,7 @@ abstract class FrameLayoutCubitScreenCrudItem< | |||||||
|     super.customAppBar, |     super.customAppBar, | ||||||
|     super.customBottomNavBar, |     super.customBottomNavBar, | ||||||
|     super.height = 60, |     super.height = 60, | ||||||
|  |     super.scaffoldFieldsWrapper, | ||||||
|     super.key, |     super.key, | ||||||
|   }); |   }); | ||||||
| } | } | ||||||
|  | |||||||
| @ -25,6 +25,7 @@ abstract class FrameLayoutCubitScreenCrudList< | |||||||
|     super.customAppBar, |     super.customAppBar, | ||||||
|     super.customBottomNavBar, |     super.customBottomNavBar, | ||||||
|     super.height = 60, |     super.height = 60, | ||||||
|  |     super.scaffoldFieldsWrapper, | ||||||
|     super.key, |     super.key, | ||||||
|   }); |   }); | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										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 | // 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/>. | ||||||
| 
 | 
 | ||||||
|  | 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/presentation/layouts/layout.dart'; | import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; | ||||||
| 
 | 
 | ||||||
| /// {@template bottom_navigation_bar_layout} | /// {@template bottom_navigation_bar_layout} | ||||||
| @ -27,6 +29,7 @@ class BottomNavigationBarLayout extends StructuralLayout { | |||||||
|   const BottomNavigationBarLayout({ |   const BottomNavigationBarLayout({ | ||||||
|     required this.body, |     required this.body, | ||||||
|     this.custom, |     this.custom, | ||||||
|  |     this.scaffoldFieldsWrapper, | ||||||
|     super.key, |     super.key, | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
| @ -38,6 +41,8 @@ class BottomNavigationBarLayout extends StructuralLayout { | |||||||
|   final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? |   final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? | ||||||
|       custom; |       custom; | ||||||
| 
 | 
 | ||||||
|  |   final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; | ||||||
|  | 
 | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) => Scaffold( |   Widget build(BuildContext context) => Scaffold( | ||||||
|         body: body, |         body: body, | ||||||
| @ -45,5 +50,35 @@ class BottomNavigationBarLayout extends StructuralLayout { | |||||||
|               context.components.bottomNavigationBar, |               context.components.bottomNavigationBar, | ||||||
|             ) ?? |             ) ?? | ||||||
|             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 | // 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/>. | ||||||
| 
 | 
 | ||||||
|  | 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/presentation/layouts/layout.dart'; | import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; | ||||||
| 
 | 
 | ||||||
| /// {@template frame_layout} | /// {@template frame_layout} | ||||||
| @ -33,7 +35,9 @@ class FrameLayout extends StructuralLayout { | |||||||
|     required this.body, |     required this.body, | ||||||
|     this.customAppBar, |     this.customAppBar, | ||||||
|     this.customBottomNavBar, |     this.customBottomNavBar, | ||||||
|  |     this.customFloatingActionButton, | ||||||
|     this.height = 60, |     this.height = 60, | ||||||
|  |     this.scaffoldFieldsWrapper, | ||||||
|     super.key, |     super.key, | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
| @ -44,12 +48,19 @@ class FrameLayout extends StructuralLayout { | |||||||
|   final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? |   final BottomNavigationBarComponent? Function(BottomNavigationBarComponent?)? | ||||||
|       customBottomNavBar; |       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. |   /// The main content of the layout. | ||||||
|   final Widget body; |   final Widget body; | ||||||
| 
 | 
 | ||||||
|   /// The height of the top app bar. |   /// The height of the top app bar. | ||||||
|   final double height; |   final double height; | ||||||
| 
 | 
 | ||||||
|  |   final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; | ||||||
|  | 
 | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) => Scaffold( |   Widget build(BuildContext context) => Scaffold( | ||||||
|         appBar: (customAppBar?.call(context.components.topAppBar) != null || |         appBar: (customAppBar?.call(context.components.topAppBar) != null || | ||||||
| @ -60,9 +71,42 @@ class FrameLayout extends StructuralLayout { | |||||||
|                     context.components.topAppBar!, |                     context.components.topAppBar!, | ||||||
|               ) |               ) | ||||||
|             : null, |             : null, | ||||||
|         body: body, |         floatingActionButton: customFloatingActionButton | ||||||
|  |                 ?.call(context.components.floatingActionButton) ?? | ||||||
|  |             context.components.floatingActionButton, | ||||||
|         bottomNavigationBar: |         bottomNavigationBar: | ||||||
|             customBottomNavBar?.call(context.components.bottomNavigationBar) ?? |             customBottomNavBar?.call(context.components.bottomNavigationBar) ?? | ||||||
|                 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 | // 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/>. | ||||||
| 
 | 
 | ||||||
|  | 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/presentation/layouts/layout.dart'; | import 'package:wyatt_ui_layout/src/presentation/layouts/layout.dart'; | ||||||
| 
 | 
 | ||||||
| /// {@template top_bar_layout} | /// {@template top_bar_layout} | ||||||
| @ -37,6 +39,7 @@ abstract class TopBarLayout<T extends TopBarComponent> | |||||||
|     required this.body, |     required this.body, | ||||||
|     this.custom, |     this.custom, | ||||||
|     this.height = 60, |     this.height = 60, | ||||||
|  |     this.scaffoldFieldsWrapper, | ||||||
|     super.key, |     super.key, | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
| @ -54,6 +57,8 @@ abstract class TopBarLayout<T extends TopBarComponent> | |||||||
|   /// Returns the top bar component for the given [BuildContext]. |   /// Returns the top bar component for the given [BuildContext]. | ||||||
|   T? child(BuildContext context); |   T? child(BuildContext context); | ||||||
| 
 | 
 | ||||||
|  |   final ScaffoldFieldsWrapper? scaffoldFieldsWrapper; | ||||||
|  | 
 | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) => Scaffold( |   Widget build(BuildContext context) => Scaffold( | ||||||
|         appBar: (custom?.call(child(context)) != null || child(context) != null) |         appBar: (custom?.call(child(context)) != null || child(context) != null) | ||||||
| @ -63,6 +68,36 @@ abstract class TopBarLayout<T extends TopBarComponent> | |||||||
|               ) |               ) | ||||||
|             : null, |             : null, | ||||||
|         body: body, |         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,4 +14,5 @@ | |||||||
| // 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 'presentation/presentation.dart'; | export './core/core.dart'; | ||||||
|  | export './presentation/presentation.dart'; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user