Skip to content

Commit d54c8e9

Browse files
authored
feat: add Unknown view to Web template (#8)
* Add UI constants * Add UnknownView * Redirect to UnknownView when route was not find * Compile templates
1 parent c84deca commit d54c8e9

11 files changed

+640
-107
lines changed

lib/src/templates/app/web/lib/app/app.dart.stk

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:{{packageName}}/{{{bottomSheetsPath}}}/notice/notice_sheet.dart'
22
import 'package:{{packageName}}/{{{dialogsPath}}}/info_alert/info_alert_dialog.dart';
33
import 'package:{{packageName}}/{{{viewImportPath}}}/home/home_view.dart';
44
import 'package:{{packageName}}/{{{viewImportPath}}}/startup/startup_view.dart';
5+
import 'package:{{packageName}}/{{{viewImportPath}}}/unknown/unknown_view.dart';
56
import 'package:stacked/stacked_annotations.dart';
67
import 'package:stacked_services/stacked_services.dart';
78
// @stacked-import
@@ -11,6 +12,11 @@ import 'package:stacked_services/stacked_services.dart';
1112
CustomRoute(page: StartupView, initial: true),
1213
CustomRoute(page: HomeView),
1314
// @stacked-route
15+
16+
CustomRoute(page: UnknownView, path: '/404'),
17+
18+
/// When none of the above routes match, redirect to UnknownView
19+
RedirectRoute(path: '*', redirectTo: '/404'),
1420
],
1521
dependencies: [
1622
LazySingleton(classType: BottomSheetService),

lib/src/templates/app/web/lib/ui/common/app_colors.dart.stk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import 'package:flutter/material.dart';
22

33
const Color kcPrimaryColor = Color(0xFF9600FF);
44
const Color kcPrimaryColorDark = Color(0xFF300151);
5+
const Color kcBlack = Color(0xFF000000);
56
const Color kcDarkGreyColor = Color(0xFF1A1B1E);
67
const Color kcMediumGrey = Color(0xFF474A54);
78
const Color kcLightGrey = Color.fromARGB(255, 187, 187, 187);
89
const Color kcVeryLightGrey = Color(0xFFE3E3E3);
10+
const Color kcWhite = Color(0xFFFFFFFF);
911
const Color kcBackgroundColor = kcDarkGreyColor;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import 'package:flutter/material.dart';
2+
3+
TextStyle get ktsHeading1 => const TextStyle(
4+
fontSize: 80,
5+
height: 0.95,
6+
fontWeight: FontWeight.w800,
7+
);
8+
9+
TextStyle get ktsHeading2 => const TextStyle(
10+
fontSize: 40,
11+
height: 0.95,
12+
fontWeight: FontWeight.w800,
13+
);
14+
15+
TextStyle get ktsBodyRegular => const TextStyle(
16+
fontSize: 15,
17+
);
18+
19+
TextStyle get ktsBodyLarge => const TextStyle(
20+
fontSize: 20,
21+
);
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:responsive_builder/responsive_builder.dart';
3+
import 'package:stacked/stacked.dart';
4+
5+
import 'unknown_view.desktop.dart';
6+
import 'unknown_view.tablet.dart';
7+
import 'unknown_view.mobile.dart';
8+
import 'unknown_viewmodel.dart';
9+
10+
class UnknownView extends StackedView<UnknownViewModel> {
11+
const UnknownView({super.key});
12+
13+
@override
14+
Widget builder(
15+
BuildContext context,
16+
UnknownViewModel viewModel,
17+
Widget? child,
18+
) {
19+
return ScreenTypeLayout.builder(
20+
mobile: (_) => const UnknownViewMobile(),
21+
tablet: (_) => const UnknownViewTablet(),
22+
desktop: (_) => const UnknownViewDesktop(),
23+
);
24+
}
25+
26+
@override
27+
UnknownViewModel viewModelBuilder(
28+
BuildContext context,
29+
) =>
30+
UnknownViewModel();
31+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import 'package:{{packageName}}/ui/common/app_colors.dart';
2+
import 'package:{{packageName}}/ui/common/app_styles.dart';
3+
import 'package:{{packageName}}/ui/common/ui_helpers.dart';
4+
import 'package:flutter/material.dart';
5+
import 'package:stacked/stacked.dart';
6+
7+
import 'unknown_viewmodel.dart';
8+
9+
class UnknownViewDesktop extends ViewModelWidget<UnknownViewModel> {
10+
const UnknownViewDesktop({super.key});
11+
12+
@override
13+
Widget build(BuildContext context, UnknownViewModel viewModel) {
14+
return Scaffold(
15+
backgroundColor: kcBackgroundColor,
16+
body: Center(
17+
child: Column(
18+
mainAxisAlignment: MainAxisAlignment.center,
19+
children: [
20+
Text(
21+
'404',
22+
style: ktsHeading1.copyWith(color: kcWhite, letterSpacing: 20.0),
23+
),
24+
verticalSpaceSmall,
25+
Text(
26+
'PAGE NOT FOUND',
27+
style: ktsBodyLarge.copyWith(
28+
color: kcWhite,
29+
letterSpacing: 20.0,
30+
wordSpacing: 10.0,
31+
),
32+
),
33+
],
34+
),
35+
),
36+
);
37+
}
38+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import 'package:{{packageName}}/ui/common/app_colors.dart';
2+
import 'package:{{packageName}}/ui/common/app_styles.dart';
3+
import 'package:{{packageName}}/ui/common/ui_helpers.dart';
4+
import 'package:flutter/material.dart';
5+
import 'package:stacked/stacked.dart';
6+
7+
import 'unknown_viewmodel.dart';
8+
9+
class UnknownViewMobile extends ViewModelWidget<UnknownViewModel> {
10+
const UnknownViewMobile({super.key});
11+
12+
@override
13+
Widget build(BuildContext context, UnknownViewModel viewModel) {
14+
return Scaffold(
15+
backgroundColor: kcBackgroundColor,
16+
body: Center(
17+
child: Column(
18+
mainAxisAlignment: MainAxisAlignment.center,
19+
children: [
20+
Text(
21+
'404',
22+
style: ktsHeading1.copyWith(color: kcWhite, letterSpacing: 20.0),
23+
),
24+
verticalSpaceSmall,
25+
Text(
26+
'PAGE NOT FOUND',
27+
style: ktsBodyLarge.copyWith(
28+
color: kcWhite,
29+
letterSpacing: 20.0,
30+
wordSpacing: 10.0,
31+
),
32+
),
33+
],
34+
),
35+
),
36+
);
37+
}
38+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import 'package:{{packageName}}/ui/common/app_colors.dart';
2+
import 'package:{{packageName}}/ui/common/app_styles.dart';
3+
import 'package:{{packageName}}/ui/common/ui_helpers.dart';
4+
import 'package:flutter/material.dart';
5+
import 'package:stacked/stacked.dart';
6+
7+
import 'unknown_viewmodel.dart';
8+
9+
class UnknownViewTablet extends ViewModelWidget<UnknownViewModel> {
10+
const UnknownViewTablet({super.key});
11+
12+
@override
13+
Widget build(BuildContext context, UnknownViewModel viewModel) {
14+
return Scaffold(
15+
backgroundColor: kcBackgroundColor,
16+
body: Center(
17+
child: Column(
18+
mainAxisAlignment: MainAxisAlignment.center,
19+
children: [
20+
Text(
21+
'404',
22+
style: ktsHeading1.copyWith(color: kcWhite, letterSpacing: 20.0),
23+
),
24+
verticalSpaceSmall,
25+
Text(
26+
'PAGE NOT FOUND',
27+
style: ktsBodyLarge.copyWith(
28+
color: kcWhite,
29+
letterSpacing: 20.0,
30+
wordSpacing: 10.0,
31+
),
32+
),
33+
],
34+
),
35+
),
36+
);
37+
}
38+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import 'package:stacked/stacked.dart';
2+
3+
class UnknownViewModel extends BaseViewModel {}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:{{packageName}}/{{{relativeLocatorFilePath}}}';
3+
4+
import '../helpers/test_helpers.dart';
5+
6+
void main() {
7+
group('UnknownViewModel Tests -', () {
8+
setUp(() => registerServices());
9+
tearDown(() => locator.reset());
10+
});
11+
}

0 commit comments

Comments
 (0)