feat(ui_layout-bloc_layout): proxy scaffold fields
This commit is contained in:
		
							parent
							
								
									fd40d1be3d
								
							
						
					
					
						commit
						a078f6b6b0
					
				@ -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,
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										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,
 | 
			
		||||
      );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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