Skip to content

Commit 1ea7278

Browse files
committed
Refactor to allow re-using posts, post pages across app
1 parent 8f7abab commit 1ea7278

File tree

8 files changed

+134
-68
lines changed

8 files changed

+134
-68
lines changed

ios/Runner.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
archiveVersion = 1;
44
classes = {
55
};
6-
objectVersion = 46;
6+
objectVersion = 50;
77
objects = {
88

99
/* Begin PBXBuildFile section */
@@ -127,7 +127,7 @@
127127
97C146E61CF9000F007C117D /* Project object */ = {
128128
isa = PBXProject;
129129
attributes = {
130-
LastUpgradeCheck = 1020;
130+
LastUpgradeCheck = 1300;
131131
ORGANIZATIONNAME = "";
132132
TargetAttributes = {
133133
97C146ED1CF9000F007C117D = {

ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1020"
3+
LastUpgradeVersion = "1300"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

lib/posts/posts_page.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,8 @@ class PostsPage extends StatelessWidget {
2121
PostTile(
2222
tileColor: posts[i].color,
2323
postTitle: posts[i].title,
24-
onTileTap: () => context.router.push(
25-
SinglePostRoute(
26-
postId: posts[i].id,
27-
),
28-
),
24+
onTileTap: () =>
25+
context.router.pushNamed('/post/${posts[i].id}'),
2926
),
3027
],
3128
),

lib/posts/single_post_page.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:auto_route/annotations.dart';
2+
import 'package:auto_route/auto_route.dart';
23
import 'package:flutter/material.dart';
34
import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/data/app_data.dart';
45

@@ -13,6 +14,10 @@ class SinglePostPage extends StatelessWidget {
1314
Widget build(BuildContext context) {
1415
final post = Post.posts[postId - 1];
1516
return Scaffold(
17+
appBar: AppBar(
18+
title: Text('Post #${post.id}'),
19+
leading: const AutoBackButton(),
20+
),
1621
backgroundColor: post.color,
1722
body: Center(
1823
child: Padding(

lib/routes/router.dart

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/users/use
1919
path: '',
2020
page: PostsPage,
2121
),
22-
AutoRoute(
23-
path: ':postId',
24-
page: SinglePostPage,
25-
)
2622
],
2723
),
2824
AutoRoute(
@@ -35,17 +31,27 @@ import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/users/use
3531
page: UsersPage,
3632
),
3733
AutoRoute(
38-
path: ':userId',
39-
page: UserProfilePage,
40-
),
34+
path: ':userId',
35+
name: 'UserRouter',
36+
page: EmptyRouterPage,
37+
children: [
38+
AutoRoute(path: '', page: UserProfilePage),
39+
AutoRoute(
40+
path: 'posts', name: 'UserPostsRoute', page: PostsPage),
41+
]),
4142
],
4243
),
4344
AutoRoute(
4445
path: 'settings',
4546
name: 'SettingsRouter',
4647
page: SettingsPage,
47-
)
48+
),
4849
]),
50+
AutoRoute(
51+
path: '/post',
52+
name: 'PostRouter',
53+
page: EmptyRouterPage,
54+
children: [AutoRoute(path: ':postId', page: SinglePostPage)])
4955
],
5056
)
5157
class $AppRouter {}

lib/routes/router.gr.dart

Lines changed: 107 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ import 'package:flutter/material.dart' as _i8;
1515

1616
import '../home_page.dart' as _i1;
1717
import '../posts/posts_page.dart' as _i4;
18-
import '../posts/single_post_page.dart' as _i5;
18+
import '../posts/single_post_page.dart' as _i7;
1919
import '../settings/settings_page.dart' as _i3;
20-
import '../users/user_profile_page.dart' as _i7;
21-
import '../users/users_page.dart' as _i6;
20+
import '../users/user_profile_page.dart' as _i6;
21+
import '../users/users_page.dart' as _i5;
2222

2323
class AppRouter extends _i2.RootStackRouter {
2424
AppRouter([_i8.GlobalKey<_i8.NavigatorState>? navigatorKey])
@@ -30,6 +30,10 @@ class AppRouter extends _i2.RootStackRouter {
3030
return _i2.MaterialPageX<dynamic>(
3131
routeData: routeData, child: const _i1.HomePage());
3232
},
33+
PostRouter.name: (routeData) {
34+
return _i2.MaterialPageX<dynamic>(
35+
routeData: routeData, child: const _i2.EmptyRouterPage());
36+
},
3337
PostsRouter.name: (routeData) {
3438
return _i2.MaterialPageX<dynamic>(
3539
routeData: routeData, child: const _i2.EmptyRouterPage());
@@ -48,18 +52,13 @@ class AppRouter extends _i2.RootStackRouter {
4852
return _i2.MaterialPageX<dynamic>(
4953
routeData: routeData, child: _i4.PostsPage(key: args.key));
5054
},
51-
SinglePostRoute.name: (routeData) {
52-
final pathParams = routeData.inheritedPathParams;
53-
final args = routeData.argsAs<SinglePostRouteArgs>(
54-
orElse: () =>
55-
SinglePostRouteArgs(postId: pathParams.getInt('postId')));
55+
UsersRoute.name: (routeData) {
5656
return _i2.MaterialPageX<dynamic>(
57-
routeData: routeData,
58-
child: _i5.SinglePostPage(key: args.key, postId: args.postId));
57+
routeData: routeData, child: const _i5.UsersPage());
5958
},
60-
UsersRoute.name: (routeData) {
59+
UserRouter.name: (routeData) {
6160
return _i2.MaterialPageX<dynamic>(
62-
routeData: routeData, child: const _i6.UsersPage());
61+
routeData: routeData, child: const _i2.EmptyRouterPage());
6362
},
6463
UserProfileRoute.name: (routeData) {
6564
final pathParams = routeData.inheritedPathParams;
@@ -68,7 +67,22 @@ class AppRouter extends _i2.RootStackRouter {
6867
UserProfileRouteArgs(userId: pathParams.getInt('userId')));
6968
return _i2.MaterialPageX<dynamic>(
7069
routeData: routeData,
71-
child: _i7.UserProfilePage(key: args.key, userId: args.userId));
70+
child: _i6.UserProfilePage(key: args.key, userId: args.userId));
71+
},
72+
UserPostsRoute.name: (routeData) {
73+
final args = routeData.argsAs<UserPostsRouteArgs>(
74+
orElse: () => const UserPostsRouteArgs());
75+
return _i2.MaterialPageX<dynamic>(
76+
routeData: routeData, child: _i4.PostsPage(key: args.key));
77+
},
78+
SinglePostRoute.name: (routeData) {
79+
final pathParams = routeData.inheritedPathParams;
80+
final args = routeData.argsAs<SinglePostRouteArgs>(
81+
orElse: () =>
82+
SinglePostRouteArgs(postId: pathParams.getInt('postId')));
83+
return _i2.MaterialPageX<dynamic>(
84+
routeData: routeData,
85+
child: _i7.SinglePostPage(key: args.key, postId: args.postId));
7286
}
7387
};
7488

@@ -80,21 +94,30 @@ class AppRouter extends _i2.RootStackRouter {
8094
parent: HomeRoute.name,
8195
children: [
8296
_i2.RouteConfig(PostsRoute.name,
83-
path: '', parent: PostsRouter.name),
84-
_i2.RouteConfig(SinglePostRoute.name,
85-
path: ':postId', parent: PostsRouter.name)
97+
path: '', parent: PostsRouter.name)
8698
]),
8799
_i2.RouteConfig(UsersRouter.name,
88100
path: 'users',
89101
parent: HomeRoute.name,
90102
children: [
91103
_i2.RouteConfig(UsersRoute.name,
92104
path: '', parent: UsersRouter.name),
93-
_i2.RouteConfig(UserProfileRoute.name,
94-
path: ':userId', parent: UsersRouter.name)
105+
_i2.RouteConfig(UserRouter.name,
106+
path: ':userId',
107+
parent: UsersRouter.name,
108+
children: [
109+
_i2.RouteConfig(UserProfileRoute.name,
110+
path: '', parent: UserRouter.name),
111+
_i2.RouteConfig(UserPostsRoute.name,
112+
path: 'posts', parent: UserRouter.name)
113+
])
95114
]),
96115
_i2.RouteConfig(SettingsRouter.name,
97116
path: 'settings', parent: HomeRoute.name)
117+
]),
118+
_i2.RouteConfig(PostRouter.name, path: '/post', children: [
119+
_i2.RouteConfig(SinglePostRoute.name,
120+
path: ':postId', parent: PostRouter.name)
98121
])
99122
];
100123
}
@@ -108,6 +131,15 @@ class HomeRoute extends _i2.PageRouteInfo<void> {
108131
static const String name = 'HomeRoute';
109132
}
110133

134+
/// generated route for
135+
/// [_i2.EmptyRouterPage]
136+
class PostRouter extends _i2.PageRouteInfo<void> {
137+
const PostRouter({List<_i2.PageRouteInfo>? children})
138+
: super(PostRouter.name, path: '/post', initialChildren: children);
139+
140+
static const String name = 'PostRouter';
141+
}
142+
111143
/// generated route for
112144
/// [_i2.EmptyRouterPage]
113145
class PostsRouter extends _i2.PageRouteInfo<void> {
@@ -155,44 +187,28 @@ class PostsRouteArgs {
155187
}
156188

157189
/// generated route for
158-
/// [_i5.SinglePostPage]
159-
class SinglePostRoute extends _i2.PageRouteInfo<SinglePostRouteArgs> {
160-
SinglePostRoute({_i8.Key? key, required int postId})
161-
: super(SinglePostRoute.name,
162-
path: ':postId',
163-
args: SinglePostRouteArgs(key: key, postId: postId),
164-
rawPathParams: {'postId': postId});
165-
166-
static const String name = 'SinglePostRoute';
167-
}
168-
169-
class SinglePostRouteArgs {
170-
const SinglePostRouteArgs({this.key, required this.postId});
171-
172-
final _i8.Key? key;
173-
174-
final int postId;
190+
/// [_i5.UsersPage]
191+
class UsersRoute extends _i2.PageRouteInfo<void> {
192+
const UsersRoute() : super(UsersRoute.name, path: '');
175193

176-
@override
177-
String toString() {
178-
return 'SinglePostRouteArgs{key: $key, postId: $postId}';
179-
}
194+
static const String name = 'UsersRoute';
180195
}
181196

182197
/// generated route for
183-
/// [_i6.UsersPage]
184-
class UsersRoute extends _i2.PageRouteInfo<void> {
185-
const UsersRoute() : super(UsersRoute.name, path: '');
198+
/// [_i2.EmptyRouterPage]
199+
class UserRouter extends _i2.PageRouteInfo<void> {
200+
const UserRouter({List<_i2.PageRouteInfo>? children})
201+
: super(UserRouter.name, path: ':userId', initialChildren: children);
186202

187-
static const String name = 'UsersRoute';
203+
static const String name = 'UserRouter';
188204
}
189205

190206
/// generated route for
191-
/// [_i7.UserProfilePage]
207+
/// [_i6.UserProfilePage]
192208
class UserProfileRoute extends _i2.PageRouteInfo<UserProfileRouteArgs> {
193209
UserProfileRoute({_i8.Key? key, required int userId})
194210
: super(UserProfileRoute.name,
195-
path: ':userId',
211+
path: '',
196212
args: UserProfileRouteArgs(key: key, userId: userId),
197213
rawPathParams: {'userId': userId});
198214

@@ -211,3 +227,49 @@ class UserProfileRouteArgs {
211227
return 'UserProfileRouteArgs{key: $key, userId: $userId}';
212228
}
213229
}
230+
231+
/// generated route for
232+
/// [_i4.PostsPage]
233+
class UserPostsRoute extends _i2.PageRouteInfo<UserPostsRouteArgs> {
234+
UserPostsRoute({_i8.Key? key})
235+
: super(UserPostsRoute.name,
236+
path: 'posts', args: UserPostsRouteArgs(key: key));
237+
238+
static const String name = 'UserPostsRoute';
239+
}
240+
241+
class UserPostsRouteArgs {
242+
const UserPostsRouteArgs({this.key});
243+
244+
final _i8.Key? key;
245+
246+
@override
247+
String toString() {
248+
return 'UserPostsRouteArgs{key: $key}';
249+
}
250+
}
251+
252+
/// generated route for
253+
/// [_i7.SinglePostPage]
254+
class SinglePostRoute extends _i2.PageRouteInfo<SinglePostRouteArgs> {
255+
SinglePostRoute({_i8.Key? key, required int postId})
256+
: super(SinglePostRoute.name,
257+
path: ':postId',
258+
args: SinglePostRouteArgs(key: key, postId: postId),
259+
rawPathParams: {'postId': postId});
260+
261+
static const String name = 'SinglePostRoute';
262+
}
263+
264+
class SinglePostRouteArgs {
265+
const SinglePostRouteArgs({this.key, required this.postId});
266+
267+
final _i8.Key? key;
268+
269+
final int postId;
270+
271+
@override
272+
String toString() {
273+
return 'SinglePostRouteArgs{key: $key, postId: $postId}';
274+
}
275+
}

lib/users/user_profile_page.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:auto_route/annotations.dart';
1+
import 'package:auto_route/auto_route.dart';
22
import 'package:flutter/material.dart';
33
import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/data/app_data.dart';
44
import 'package:flutter_bottom_navigation_with_nested_routing_tutorial/widgets.dart';
@@ -22,6 +22,7 @@ class UserProfilePage extends StatelessWidget {
2222
UserAvatar(
2323
avatarColor: Colors.white,
2424
username: 'user${user.id}',
25+
onAvatarTap: () => context.router.pushNamed('posts'),
2526
)
2627
],
2728
),

lib/users/users_page.dart

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,10 @@ class UsersPage extends StatelessWidget {
1818
UserAvatar(
1919
avatarColor: users[i].color,
2020
username: 'user${users[i].id}',
21-
onAvatarTap: () => context.router.push(
22-
UserProfileRoute(
23-
userId: users[i].id,
24-
),
25-
),
21+
onAvatarTap: () => context.router.pushNamed('${users[i].id}'),
2622
),
2723
],
2824
),
2925
);
3026
}
3127
}
32-

0 commit comments

Comments
 (0)