[flutter_adaptive_scaffold] Fix leading and trailing Navigation Rail Widgets (#3080)
The leading and trailing Navigation Rail widgets were not being passed
through to the Navigation Rail.
Fixes flutter/flutter#114684
diff --git a/packages/flutter_adaptive_scaffold/CHANGELOG.md b/packages/flutter_adaptive_scaffold/CHANGELOG.md
index 85dcaaa..88f6aa1 100644
--- a/packages/flutter_adaptive_scaffold/CHANGELOG.md
+++ b/packages/flutter_adaptive_scaffold/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.0.9
+
+* Fix passthrough of `leadingExtendedNavRail`, `leadingUnextendedNavRail` and `trailingNavRail`
+
## 0.0.8
Make fuchsia a mobile platform.
diff --git a/packages/flutter_adaptive_scaffold/lib/src/adaptive_scaffold.dart b/packages/flutter_adaptive_scaffold/lib/src/adaptive_scaffold.dart
index 58509ff..e9ec851 100644
--- a/packages/flutter_adaptive_scaffold/lib/src/adaptive_scaffold.dart
+++ b/packages/flutter_adaptive_scaffold/lib/src/adaptive_scaffold.dart
@@ -480,6 +480,8 @@
? Drawer(
child: NavigationRail(
extended: true,
+ leading: widget.leadingExtendedNavRail,
+ trailing: widget.trailingNavRail,
selectedIndex: widget.selectedIndex,
destinations: widget.destinations
.map((_) => AdaptiveScaffold.toRailDestination(_))
@@ -498,6 +500,8 @@
key: const Key('primaryNavigation'),
builder: (_) => AdaptiveScaffold.standardNavigationRail(
width: widget.navigationRailWidth,
+ leading: widget.leadingUnextendedNavRail,
+ trailing: widget.trailingNavRail,
selectedIndex: widget.selectedIndex,
destinations: widget.destinations
.map((_) => AdaptiveScaffold.toRailDestination(_))
@@ -510,6 +514,8 @@
builder: (_) => AdaptiveScaffold.standardNavigationRail(
width: widget.extendedNavigationRailWidth,
extended: true,
+ leading: widget.leadingExtendedNavRail,
+ trailing: widget.trailingNavRail,
selectedIndex: widget.selectedIndex,
destinations: widget.destinations
.map((_) => AdaptiveScaffold.toRailDestination(_))
diff --git a/packages/flutter_adaptive_scaffold/pubspec.yaml b/packages/flutter_adaptive_scaffold/pubspec.yaml
index 36a30a2..33b0353 100644
--- a/packages/flutter_adaptive_scaffold/pubspec.yaml
+++ b/packages/flutter_adaptive_scaffold/pubspec.yaml
@@ -1,6 +1,6 @@
name: flutter_adaptive_scaffold
description: Widgets to easily build adaptive layouts, including navigation elements.
-version: 0.0.8
+version: 0.0.9
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+flutter_adaptive_scaffold%22
repository: https://github.com/flutter/packages/tree/main/packages/flutter_adaptive_scaffold
diff --git a/packages/flutter_adaptive_scaffold/test/adaptive_scaffold_test.dart b/packages/flutter_adaptive_scaffold/test/adaptive_scaffold_test.dart
index 41377d1..36a451c 100644
--- a/packages/flutter_adaptive_scaffold/test/adaptive_scaffold_test.dart
+++ b/packages/flutter_adaptive_scaffold/test/adaptive_scaffold_test.dart
@@ -193,6 +193,35 @@
expect(find.byType(PreferredSizeWidgetImpl), findsOneWidget);
},
);
+
+ // Verify that the leading navigation rail widget is displayed
+ // based on the screen size
+ testWidgets(
+ 'adaptive scaffold displays leading widget in navigation rail',
+ (WidgetTester tester) async {
+ await Future.forEach(SimulatedLayout.values,
+ (SimulatedLayout region) async {
+ final MaterialApp app = region.app();
+ await tester.binding.setSurfaceSize(region.size);
+ await tester.pumpWidget(app);
+ await tester.pumpAndSettle();
+
+ if (region.size == SimulatedLayout.large.size) {
+ expect(find.text('leading_extended'), findsOneWidget);
+ expect(find.text('leading_unextended'), findsNothing);
+ expect(find.text('trailing'), findsOneWidget);
+ } else if (region.size == SimulatedLayout.medium.size) {
+ expect(find.text('leading_extended'), findsNothing);
+ expect(find.text('leading_unextended'), findsOneWidget);
+ expect(find.text('trailing'), findsOneWidget);
+ } else if (region.size == SimulatedLayout.small.size) {
+ expect(find.text('leading_extended'), findsNothing);
+ expect(find.text('leading_unextended'), findsNothing);
+ expect(find.text('trailing'), findsNothing);
+ }
+ });
+ },
+ );
}
/// An empty widget that implements [PreferredSizeWidget] to ensure that
diff --git a/packages/flutter_adaptive_scaffold/test/simulated_layout.dart b/packages/flutter_adaptive_scaffold/test/simulated_layout.dart
index 231b6b2..e81a5ff 100644
--- a/packages/flutter_adaptive_scaffold/test/simulated_layout.dart
+++ b/packages/flutter_adaptive_scaffold/test/simulated_layout.dart
@@ -86,6 +86,9 @@
smallSecondaryBody: (_) => Container(color: Colors.red),
secondaryBody: (_) => Container(color: Colors.green),
largeSecondaryBody: (_) => Container(color: Colors.blue),
+ leadingExtendedNavRail: const Text('leading_extended'),
+ leadingUnextendedNavRail: const Text('leading_unextended'),
+ trailingNavRail: const Text('trailing'),
);
}
}