Skip to content
This repository was archived by the owner on May 14, 2023. It is now read-only.

Commit ad561ba

Browse files
authored
[adaptive_navigation] Enhance AdaptiveScaffold (#59)
* Change AdaptiveScaffold to StatelessWidget * Add const to AdaptiveScaffold * Add key to AdaptiveScaffold
1 parent ee6e80e commit ad561ba

File tree

1 file changed

+27
-32
lines changed

1 file changed

+27
-32
lines changed

lib/scaffold.dart

Lines changed: 27 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class AdaptiveScaffoldDestination {
2828
/// A widget that adapts to the current display size, displaying a [Drawer],
2929
/// [NavigationRail], or [BottomNavigationBar]. Navigation destinations are
3030
/// defined in the [destinations] parameter.
31-
class AdaptiveNavigationScaffold extends StatefulWidget {
31+
class AdaptiveNavigationScaffold extends StatelessWidget {
3232
final Widget title;
3333
final Widget body;
3434
final int currentIndex;
@@ -37,7 +37,8 @@ class AdaptiveNavigationScaffold extends StatefulWidget {
3737
final FloatingActionButton floatingActionButton;
3838
final NavigationTypeResolver navigationTypeResolver;
3939

40-
AdaptiveNavigationScaffold({
40+
const AdaptiveNavigationScaffold({
41+
Key key,
4142
this.title,
4243
this.body,
4344
@required this.currentIndex,
@@ -46,15 +47,9 @@ class AdaptiveNavigationScaffold extends StatefulWidget {
4647
this.floatingActionButton,
4748
this.navigationTypeResolver,
4849
}) : assert(currentIndex != null),
49-
assert(destinations != null);
50+
assert(destinations != null),
51+
super(key: key);
5052

51-
@override
52-
_AdaptiveNavigationScaffoldState createState() =>
53-
_AdaptiveNavigationScaffoldState();
54-
}
55-
56-
class _AdaptiveNavigationScaffoldState
57-
extends State<AdaptiveNavigationScaffold> {
5853
NavigationType _defaultNavigationTypeResolver(BuildContext context) {
5954
if (_isLargeScreen(context)) {
6055
return NavigationType.drawer;
@@ -68,52 +63,52 @@ class _AdaptiveNavigationScaffoldState
6863
@override
6964
Widget build(BuildContext context) {
7065
final NavigationTypeResolver navigationTypeResolver =
71-
widget.navigationTypeResolver ?? _defaultNavigationTypeResolver;
66+
this.navigationTypeResolver ?? _defaultNavigationTypeResolver;
7267
switch (navigationTypeResolver(context)) {
7368
case NavigationType.bottomNavigation:
7469
// Show a Scaffold with a BottomNavigationBar.
7570
return Scaffold(
76-
body: widget.body,
77-
appBar: AppBar(title: widget.title),
71+
body: body,
72+
appBar: AppBar(title: title),
7873
bottomNavigationBar: BottomNavigationBar(
7974
items: [
80-
for (final destination in widget.destinations)
75+
for (final destination in destinations)
8176
BottomNavigationBarItem(
8277
icon: Icon(destination.icon),
8378
title: Text(destination.title),
8479
),
8580
],
86-
currentIndex: widget.currentIndex,
87-
onTap: widget.onNavigationIndexChange,
81+
currentIndex: currentIndex,
82+
onTap: onNavigationIndexChange,
8883
),
89-
floatingActionButton: widget.floatingActionButton,
84+
floatingActionButton: floatingActionButton,
9085
);
9186
case NavigationType.navigationRail:
9287
// Show a Scaffold with a body containing a NavigationRail.
9388
return Scaffold(
9489
appBar: AppBar(
95-
title: widget.title,
90+
title: title,
9691
),
9792
body: Row(
9893
children: [
9994
NavigationRail(
100-
leading: widget.floatingActionButton,
95+
leading: floatingActionButton,
10196
destinations: [
102-
for (final destination in widget.destinations)
97+
for (final destination in destinations)
10398
NavigationRailDestination(
10499
icon: Icon(destination.icon),
105100
label: Text(destination.title),
106101
),
107102
],
108-
selectedIndex: widget.currentIndex,
109-
onDestinationSelected: widget.onNavigationIndexChange ?? (_) {},
103+
selectedIndex: currentIndex,
104+
onDestinationSelected: onNavigationIndexChange ?? (_) {},
110105
),
111106
VerticalDivider(
112107
width: 1,
113108
thickness: 1,
114109
),
115110
Expanded(
116-
child: widget.body,
111+
child: body,
117112
),
118113
],
119114
),
@@ -127,15 +122,15 @@ class _AdaptiveNavigationScaffoldState
127122
children: [
128123
DrawerHeader(
129124
child: Center(
130-
child: widget.title,
125+
child: title,
131126
),
132127
),
133-
for (final destination in widget.destinations)
128+
for (final destination in destinations)
134129
ListTile(
135130
leading: Icon(destination.icon),
136131
title: Text(destination.title),
137-
selected: widget.destinations.indexOf(destination) ==
138-
widget.currentIndex,
132+
selected:
133+
destinations.indexOf(destination) == currentIndex,
139134
onTap: () => _destinationTapped(destination),
140135
),
141136
],
@@ -148,8 +143,8 @@ class _AdaptiveNavigationScaffoldState
148143
Expanded(
149144
child: Scaffold(
150145
appBar: AppBar(),
151-
body: widget.body,
152-
floatingActionButton: widget.floatingActionButton,
146+
body: body,
147+
floatingActionButton: floatingActionButton,
153148
),
154149
),
155150
],
@@ -158,9 +153,9 @@ class _AdaptiveNavigationScaffoldState
158153
}
159154

160155
void _destinationTapped(AdaptiveScaffoldDestination destination) {
161-
final index = widget.destinations.indexOf(destination);
162-
if (index != widget.currentIndex) {
163-
widget.onNavigationIndexChange(index);
156+
final index = destinations.indexOf(destination);
157+
if (index != currentIndex) {
158+
onNavigationIndexChange(index);
164159
}
165160
}
166161
}

0 commit comments

Comments
 (0)