[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
This commit is contained in:
Ryan Shumate
2023-01-24 12:02:28 -05:00
committed by GitHub
parent a095576254
commit dbd24ef256
5 changed files with 43 additions and 1 deletions

View File

@ -1,3 +1,7 @@
## 0.0.9
* Fix passthrough of `leadingExtendedNavRail`, `leadingUnextendedNavRail` and `trailingNavRail`
## 0.0.8
Make fuchsia a mobile platform.

View File

@ -480,6 +480,8 @@ class _AdaptiveScaffoldState extends State<AdaptiveScaffold> {
? Drawer(
child: NavigationRail(
extended: true,
leading: widget.leadingExtendedNavRail,
trailing: widget.trailingNavRail,
selectedIndex: widget.selectedIndex,
destinations: widget.destinations
.map((_) => AdaptiveScaffold.toRailDestination(_))
@ -498,6 +500,8 @@ class _AdaptiveScaffoldState extends State<AdaptiveScaffold> {
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 @@ class _AdaptiveScaffoldState extends State<AdaptiveScaffold> {
builder: (_) => AdaptiveScaffold.standardNavigationRail(
width: widget.extendedNavigationRailWidth,
extended: true,
leading: widget.leadingExtendedNavRail,
trailing: widget.trailingNavRail,
selectedIndex: widget.selectedIndex,
destinations: widget.destinations
.map((_) => AdaptiveScaffold.toRailDestination(_))

View File

@ -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

View File

@ -193,6 +193,35 @@ void main() {
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

View File

@ -86,6 +86,9 @@ class TestScaffoldState extends State<TestScaffold> {
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'),
);
}
}