From 9713d1ec29010c4817eb40e3797521c80353deca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malo=20L=C3=A9on?= Date: Wed, 10 May 2023 09:01:42 +0200 Subject: [PATCH] feat(ui_layout-bloc_layout): proxy scaffold fields --- ...me_grid_layout_cubit_screen_crud_list.dart | 1 + .../frame_layout_cubit_screen.dart | 3 + .../frame_layout_cubit_screen_crud.dart | 1 + .../frame_layout_cubit_screen_crud_item.dart | 1 + .../frame_layout_cubit_screen_crud_list.dart | 1 + .../wyatt_ui_layout/lib/src/core/core.dart | 17 ++ .../lib/src/core/scaffold_fields_wrapper.dart | 244 ++++++++++++++++++ .../bottom_navigation_bar_layout.dart | 35 +++ .../structural_layouts/frame_layout.dart | 46 +++- .../top_app_bar_layout.dart | 35 +++ packages/wyatt_ui_layout/lib/src/src.dart | 3 +- 11 files changed, 385 insertions(+), 2 deletions(-) create mode 100644 packages/wyatt_ui_layout/lib/src/core/core.dart create mode 100644 packages/wyatt_ui_layout/lib/src/core/scaffold_fields_wrapper.dart diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_grid_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_grid_layout_cubit_screen_crud_list.dart index e54e5c49..044776d5 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_grid_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_grid_layout_cubit_screen_crud_list.dart @@ -26,6 +26,7 @@ abstract class FrameLayoutGridCubitScreenCrudList< super.customAppBar, super.customBottomNavBar, super.height = 60, + super.scaffoldFieldsWrapper, super.key, }); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart index 51985223..d5b6d415 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen.dart @@ -26,6 +26,7 @@ abstract class FrameLayoutCubitScreen, const FrameLayoutCubitScreen({ this.customAppBar, this.customBottomNavBar, + this.scaffoldFieldsWrapper, this.height = 60, super.key, }); @@ -34,12 +35,14 @@ abstract class FrameLayoutCubitScreen, 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, ); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart index 62e5fc91..0803c37e 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud.dart @@ -29,6 +29,7 @@ abstract class FrameLayoutCubitScreenCrud< super.customBottomNavBar, super.height, super.key, + super.scaffoldFieldsWrapper, }); @override diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart index 80381609..e3d9e965 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_item.dart @@ -25,6 +25,7 @@ abstract class FrameLayoutCubitScreenCrudItem< super.customAppBar, super.customBottomNavBar, super.height = 60, + super.scaffoldFieldsWrapper, super.key, }); } diff --git a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart index 6bbf7a6b..7ff1910b 100644 --- a/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart +++ b/packages/wyatt_bloc_layout/lib/src/presentation/frame_bloc_layout/frame_layout_cubit_screen_crud_list.dart @@ -25,6 +25,7 @@ abstract class FrameLayoutCubitScreenCrudList< super.customAppBar, super.customBottomNavBar, super.height = 60, + super.scaffoldFieldsWrapper, super.key, }); } diff --git a/packages/wyatt_ui_layout/lib/src/core/core.dart b/packages/wyatt_ui_layout/lib/src/core/core.dart new file mode 100644 index 00000000..ff9289bd --- /dev/null +++ b/packages/wyatt_ui_layout/lib/src/core/core.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 . + +export './scaffold_fields_wrapper.dart'; diff --git a/packages/wyatt_ui_layout/lib/src/core/scaffold_fields_wrapper.dart b/packages/wyatt_ui_layout/lib/src/core/scaffold_fields_wrapper.dart new file mode 100644 index 00000000..9f08b13b --- /dev/null +++ b/packages/wyatt_ui_layout/lib/src/core/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 . + +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? 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; +} diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/bottom_navigation_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/bottom_navigation_bar_layout.dart index d8755e92..3c72ffcf 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/bottom_navigation_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/bottom_navigation_bar_layout.dart @@ -14,8 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +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, ); } diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/frame_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/frame_layout.dart index 1bf0ec38..e44a8163 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/frame_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/frame_layout.dart @@ -14,8 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +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, ); } diff --git a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/top_app_bar_layout.dart b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/top_app_bar_layout.dart index d6a104b5..0f9acc41 100644 --- a/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/top_app_bar_layout.dart +++ b/packages/wyatt_ui_layout/lib/src/presentation/layouts/structural_layouts/top_app_bar_layout.dart @@ -14,8 +14,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +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 required this.body, this.custom, this.height = 60, + this.scaffoldFieldsWrapper, super.key, }); @@ -54,6 +57,8 @@ abstract class TopBarLayout /// 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 ) : 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, ); } diff --git a/packages/wyatt_ui_layout/lib/src/src.dart b/packages/wyatt_ui_layout/lib/src/src.dart index 6890de4f..0a6aedc9 100644 --- a/packages/wyatt_ui_layout/lib/src/src.dart +++ b/packages/wyatt_ui_layout/lib/src/src.dart @@ -14,4 +14,5 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'presentation/presentation.dart'; +export './core/core.dart'; +export './presentation/presentation.dart';