Skip to content

Commit 2463f27

Browse files
committed
[#19] Create AppRoute
1 parent c84a934 commit 2463f27

File tree

6 files changed

+61
-48
lines changed

6 files changed

+61
-48
lines changed

lib/main.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
44
import 'package:flutter_riverpod/flutter_riverpod.dart';
55
import 'package:go_router/go_router.dart';
66
import 'package:survey_flutter/model/survey_model.dart';
7+
import 'package:survey_flutter/screens/app_route.dart';
78
import 'package:survey_flutter/screens/home/home_screen.dart';
89
import 'package:survey_flutter/screens/login/login_screen.dart';
910
import 'package:survey_flutter/screens/splash/splash_screen.dart';
@@ -22,29 +23,27 @@ void main() async {
2223
);
2324
}
2425

25-
const routePathSplashScreen = '/';
26-
2726
class App extends StatelessWidget {
2827
App({Key? key}) : super(key: key);
2928

3029
final GoRouter _router = GoRouter(
3130
routes: <GoRoute>[
3231
GoRoute(
33-
path: routePathSplashScreen,
32+
path: AppRoute.splash.path,
3433
builder: (_, __) => const SplashScreen(),
3534
),
3635
GoRoute(
37-
path: routePathLoginScreen,
36+
path: AppRoute.login.path,
3837
pageBuilder: (_, __) => const NoTransitionPage<void>(
3938
child: LoginScreen(),
4039
),
4140
),
4241
GoRoute(
43-
path: routePathHomeScreen,
42+
path: AppRoute.home.path,
4443
builder: (_, __) => const HomeScreen(),
4544
),
4645
GoRoute(
47-
path: routePathSurveyScreen,
46+
path: AppRoute.survey.path,
4847
builder: (_, state) => SurveyScreen(
4948
survey: state.extra as SurveyModel,
5049
),

lib/screens/app_route.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
enum AppRoute {
2+
splash,
3+
login,
4+
home,
5+
survey,
6+
}
7+
8+
extension AppRoutePath on AppRoute {
9+
String get path {
10+
switch (this) {
11+
case AppRoute.splash:
12+
return '/';
13+
case AppRoute.login:
14+
return '/login';
15+
case AppRoute.home:
16+
return '/home';
17+
case AppRoute.survey:
18+
return '/survey';
19+
}
20+
}
21+
}

lib/screens/home/home_screen.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,15 @@ import 'package:flutter/material.dart';
22
import 'package:flutter_riverpod/flutter_riverpod.dart';
33
import 'package:go_router/go_router.dart';
44
import 'package:survey_flutter/model/survey_model.dart';
5+
import 'package:survey_flutter/screens/app_route.dart';
56
import 'package:survey_flutter/screens/home/home_header_widget.dart';
67
import 'package:survey_flutter/screens/home/home_page_indicator_widget.dart';
78
import 'package:survey_flutter/screens/home/home_pages_widget.dart';
89
import 'package:survey_flutter/screens/home/home_shimmer_loading.dart';
910
import 'package:survey_flutter/screens/home/home_view_model.dart';
10-
import 'package:survey_flutter/screens/survey/survey_screen.dart';
1111
import 'package:survey_flutter/utils/build_context_ext.dart';
1212
import 'package:survey_flutter/widgets/alert_dialog.dart';
1313

14-
const routePathHomeScreen = '/home';
15-
1614
class HomeScreen extends ConsumerStatefulWidget {
1715
const HomeScreen({Key? key}) : super(key: key);
1816

@@ -90,7 +88,7 @@ class _HomeScreenState extends ConsumerState<HomeScreen> {
9088
onNextButtonPressed: () {
9189
final survey = surveys[_currentPage.value];
9290
context.push(
93-
routePathSurveyScreen,
91+
AppRoute.survey.path,
9492
extra: survey,
9593
);
9694
},

lib/screens/login/login_screen.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@ import 'package:flutter/material.dart';
44
import 'package:flutter_riverpod/flutter_riverpod.dart';
55
import 'package:go_router/go_router.dart';
66
import 'package:survey_flutter/gen/assets.gen.dart';
7-
import 'package:survey_flutter/screens/home/home_screen.dart';
7+
import 'package:survey_flutter/screens/app_route.dart';
88
import 'package:survey_flutter/screens/login/login_form.dart';
99
import 'package:survey_flutter/screens/login/login_view_model.dart';
1010
import 'package:survey_flutter/theme/app_constants.dart';
1111
import 'package:survey_flutter/uimodels/app_error.dart';
1212
import 'package:survey_flutter/utils/build_context_ext.dart';
1313
import 'package:survey_flutter/widgets/alert_dialog.dart';
1414

15-
const routePathLoginScreen = '/login';
16-
1715
class LoginScreen extends ConsumerStatefulWidget {
1816
const LoginScreen({Key? key}) : super(key: key);
1917

@@ -117,7 +115,7 @@ class _LoginScreenState extends ConsumerState<LoginScreen>
117115
_setUpListener(BuildContext context) {
118116
ref.listen<AsyncValue<void>>(loginViewModelProvider, (_, next) {
119117
next.maybeWhen(
120-
data: (_) => context.go(routePathHomeScreen),
118+
data: (_) => context.go(AppRoute.home.path),
121119
error: (error, _) {
122120
showAlertDialog(
123121
context: context,

lib/screens/splash/splash_screen.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ import 'package:flutter/material.dart';
22
import 'package:flutter_riverpod/flutter_riverpod.dart';
33
import 'package:go_router/go_router.dart';
44
import 'package:survey_flutter/gen/assets.gen.dart';
5-
import 'package:survey_flutter/screens/home/home_screen.dart';
6-
import 'package:survey_flutter/screens/login/login_screen.dart';
5+
import 'package:survey_flutter/screens/app_route.dart';
76
import 'package:survey_flutter/screens/splash/splash_view_model.dart';
87

98
class SplashScreen extends ConsumerStatefulWidget {
@@ -57,9 +56,9 @@ class _SplashScreenState extends ConsumerState<SplashScreen> {
5756
child: Assets.images.splashLogoWhite.image(),
5857
onEnd: () {
5958
if (_isLoggedIn == true) {
60-
context.go(routePathHomeScreen);
59+
context.go(AppRoute.home.path);
6160
} else {
62-
context.go(routePathLoginScreen);
61+
context.go(AppRoute.login.path);
6362
}
6463
},
6564
);

lib/screens/survey/survey_screen.dart

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ import 'package:survey_flutter/theme/app_constants.dart';
55
import 'package:survey_flutter/theme/primary_button_style.dart';
66
import 'package:survey_flutter/utils/build_context_ext.dart';
77

8-
const routePathSurveyScreen = '/survey';
98
const _buttonHeight = 56.0;
109

1110
class SurveyScreen extends StatelessWidget {
1211
final SurveyModel survey;
13-
SurveyScreen({required this.survey, super.key});
12+
SurveyScreen({
13+
super.key,
14+
required this.survey,
15+
});
1416

1517
late final _backgroundImage = FadeInImage.assetNetwork(
1618
placeholder: Assets.images.placeholder.path,
@@ -75,39 +77,35 @@ class SurveyScreen extends StatelessWidget {
7577
elevation: 0,
7678
),
7779
extendBodyBehindAppBar: true,
78-
body: LayoutBuilder(
79-
builder: (_, __) {
80-
return Stack(
81-
children: [
82-
_backgroundImage,
83-
_gradientOverlay,
84-
Container(
85-
padding: const EdgeInsets.only(
86-
bottom: Metrics.spacing20,
87-
left: Metrics.spacing20,
88-
right: Metrics.spacing20,
89-
),
90-
child: SafeArea(
91-
child: Column(
92-
crossAxisAlignment: CrossAxisAlignment.start,
80+
body: Stack(
81+
children: [
82+
_backgroundImage,
83+
_gradientOverlay,
84+
Container(
85+
padding: const EdgeInsets.only(
86+
bottom: Metrics.spacing20,
87+
left: Metrics.spacing20,
88+
right: Metrics.spacing20,
89+
),
90+
child: SafeArea(
91+
child: Column(
92+
crossAxisAlignment: CrossAxisAlignment.start,
93+
children: [
94+
_buildTitle(context),
95+
const SizedBox(height: Metrics.spacing16),
96+
_buildDescription(context),
97+
const Spacer(),
98+
Row(
9399
children: [
94-
_buildTitle(context),
95-
const SizedBox(height: Metrics.spacing16),
96-
_buildDescription(context),
97100
const Spacer(),
98-
Row(
99-
children: [
100-
const Spacer(),
101-
_buildButton(context),
102-
],
103-
),
101+
_buildButton(context),
104102
],
105103
),
106-
),
104+
],
107105
),
108-
],
109-
);
110-
},
106+
),
107+
),
108+
],
111109
),
112110
);
113111
}

0 commit comments

Comments
 (0)