Skip to content

Commit b82570e

Browse files
authored
[flutter_adaptive_scaffold] allow users to override navigation rail padding from AdaptiveScaffold constructor (#8433)
1. Moved the default padding value into the body of `AdaptiveScaffold.standardNavigationRail`, and made the `padding` property an optional nullable value. 2. Added an optional nullable `EdgeInsetsGeometry` parameter `AdaptiveScaffold.navigationRailPadding` to the constructor, which is passed into the navigation rail in `build`. Fixes flutter/flutter#161670
1 parent afa43ae commit b82570e

File tree

4 files changed

+46
-2
lines changed

4 files changed

+46
-2
lines changed

packages/flutter_adaptive_scaffold/CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.3.3
2+
3+
* Adds `navigationRailPadding` padding to `AdaptiveScaffold` for specifying custom padding around the navigation rail.
4+
15
## 0.3.2
26

37
* Fixes some memory leaks by disposing curved animations and value notifiers.

packages/flutter_adaptive_scaffold/lib/src/adaptive_scaffold.dart

+14-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ const double kMaterialMediumAndUpMargin = 24;
2828
/// design 3 spec.
2929
const double kMaterialPadding = 4;
3030

31+
/// Padding value of the default padding for the navigation rail
32+
const double kNavigationRailDefaultPadding = 8;
33+
3134
/// Signature for a builder used by [AdaptiveScaffold.navigationRailDestinationBuilder] that converts a
3235
/// [NavigationDestination] to a [NavigationRailDestination].
3336
typedef NavigationRailDestinationBuilder = NavigationRailDestination Function(
@@ -94,6 +97,8 @@ class AdaptiveScaffold extends StatefulWidget {
9497
this.leadingUnextendedNavRail,
9598
this.leadingExtendedNavRail,
9699
this.trailingNavRail,
100+
this.navigationRailPadding =
101+
const EdgeInsets.all(kNavigationRailDefaultPadding),
97102
this.smallBody,
98103
this.body,
99104
this.mediumLargeBody,
@@ -148,6 +153,9 @@ class AdaptiveScaffold extends StatefulWidget {
148153
/// navigation rail at the largest breakpoint.
149154
final Widget? trailingNavRail;
150155

156+
/// Option to apply custom padding to the navigation rail.
157+
final EdgeInsetsGeometry navigationRailPadding;
158+
151159
/// The alignment of the destinations in the navigation rail.
152160
final double? groupAlignment;
153161

@@ -343,7 +351,8 @@ class AdaptiveScaffold extends StatefulWidget {
343351
int? selectedIndex,
344352
bool extended = false,
345353
Color? backgroundColor,
346-
EdgeInsetsGeometry padding = const EdgeInsets.all(8.0),
354+
EdgeInsetsGeometry padding =
355+
const EdgeInsets.all(kNavigationRailDefaultPadding),
347356
Widget? leading,
348357
Widget? trailing,
349358
void Function(int)? onDestinationSelected,
@@ -608,6 +617,7 @@ class _AdaptiveScaffoldState extends State<AdaptiveScaffold> {
608617
width: widget.navigationRailWidth,
609618
leading: widget.leadingUnextendedNavRail,
610619
trailing: widget.trailingNavRail,
620+
padding: widget.navigationRailPadding,
611621
selectedIndex: widget.selectedIndex,
612622
destinations: destinations,
613623
onDestinationSelected: widget.onSelectedIndexChange,
@@ -627,6 +637,7 @@ class _AdaptiveScaffoldState extends State<AdaptiveScaffold> {
627637
extended: true,
628638
leading: widget.leadingExtendedNavRail,
629639
trailing: widget.trailingNavRail,
640+
padding: widget.navigationRailPadding,
630641
selectedIndex: widget.selectedIndex,
631642
destinations: destinations,
632643
onDestinationSelected: widget.onSelectedIndexChange,
@@ -646,6 +657,7 @@ class _AdaptiveScaffoldState extends State<AdaptiveScaffold> {
646657
extended: true,
647658
leading: widget.leadingExtendedNavRail,
648659
trailing: widget.trailingNavRail,
660+
padding: widget.navigationRailPadding,
649661
selectedIndex: widget.selectedIndex,
650662
destinations: widget.destinations
651663
.map((NavigationDestination destination) =>
@@ -666,6 +678,7 @@ class _AdaptiveScaffoldState extends State<AdaptiveScaffold> {
666678
extended: true,
667679
leading: widget.leadingExtendedNavRail,
668680
trailing: widget.trailingNavRail,
681+
padding: widget.navigationRailPadding,
669682
selectedIndex: widget.selectedIndex,
670683
destinations: widget.destinations
671684
.map((NavigationDestination destination) =>

packages/flutter_adaptive_scaffold/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: flutter_adaptive_scaffold
22
description: Widgets to easily build adaptive layouts, including navigation elements.
3-
version: 0.3.2
3+
version: 0.3.3
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+flutter_adaptive_scaffold%22
55
repository: https://github.com/flutter/packages/tree/main/packages/flutter_adaptive_scaffold
66

packages/flutter_adaptive_scaffold/test/adaptive_scaffold_test.dart

+27
Original file line numberDiff line numberDiff line change
@@ -863,6 +863,33 @@ void main() {
863863
expect(rail.labelType, NavigationRailLabelType.all);
864864
},
865865
);
866+
867+
testWidgets(
868+
'adaptive scaffold builds correctly with and without navigation rail padding specified',
869+
(WidgetTester tester) async {
870+
// without navigation rail padding specified
871+
await tester.pumpWidget(MaterialApp(
872+
home: AdaptiveScaffold(
873+
destinations: const <NavigationDestination>[
874+
NavigationDestination(icon: Icon(Icons.inbox), label: 'Inbox'),
875+
NavigationDestination(icon: Icon(Icons.article), label: 'Articles'),
876+
],
877+
),
878+
));
879+
expect(tester.takeException(), isNull);
880+
881+
// with navigation rail padding specified
882+
await tester.pumpWidget(MaterialApp(
883+
home: AdaptiveScaffold(
884+
destinations: const <NavigationDestination>[
885+
NavigationDestination(icon: Icon(Icons.inbox), label: 'Inbox'),
886+
NavigationDestination(icon: Icon(Icons.article), label: 'Articles'),
887+
],
888+
navigationRailPadding: const EdgeInsets.only(left: 10),
889+
),
890+
));
891+
expect(tester.takeException(), isNull);
892+
});
866893
}
867894

868895
/// An empty widget that implements [PreferredSizeWidget] to ensure that

0 commit comments

Comments
 (0)