Skip to content

Commit 8e2b9e6

Browse files
committed
✨ Adds favorites page in home page.
1 parent 370e1c6 commit 8e2b9e6

File tree

6 files changed

+87
-56
lines changed

6 files changed

+87
-56
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import '../../widget/gradient_scaffold.dart';
2+
import 'favorite.dart';
3+
4+
class FavoritesListPage extends GradientScaffold {
5+
const FavoritesListPage({super.key})
6+
: super(
7+
body: const Favorites(),
8+
title: 'Favorites',
9+
);
10+
}

lib/feature/home/home.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,13 @@ class _HomePageAppBar extends StatelessWidget {
7474
width: 15,
7575
),
7676
InkWellButton(
77-
onTap: () {}, // TODO: Add callback
77+
onTap: () => context.navigateTo(
78+
routeConfig: FavoritesPath.list(),
79+
),
7880
radius: BorderRadius.circular(100.0),
7981
hoverColor: CustomTheme.instance.primaryTextColor.withOpacity(0.2),
8082
child: Icon(
81-
WorldClock.exchange,
83+
Icons.bookmark_outline,
8284
size: 30,
8385
color: CustomTheme.instance.primaryTextColor,
8486
),
Lines changed: 6 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,9 @@
11
part of 'timezones.dart';
22

3-
class TimezoneListPage extends StatelessWidget {
4-
const TimezoneListPage({Key? key}) : super(key: key);
5-
6-
@override
7-
Widget build(BuildContext context) {
8-
return Scaffold(
9-
backgroundColor: CustomTheme.instance.backgroundColor,
10-
extendBody: true,
11-
extendBodyBehindAppBar: true,
12-
body: Column(
13-
crossAxisAlignment: CrossAxisAlignment.start,
14-
children: [
15-
Container(
16-
decoration: BoxDecoration(
17-
// color: CustomTheme.instance.backgroundColor,
18-
gradient: LinearGradient(
19-
colors: [
20-
CustomTheme.instance.backgroundColor,
21-
Colors.transparent,
22-
],
23-
),
24-
),
25-
// padding: EdgeInsets.only(bottom: 10),
26-
child: Row(
27-
children: [
28-
InkWellButton(
29-
onTap: context.previousPage,
30-
radius: BorderRadius.circular(100.0),
31-
hoverColor:
32-
CustomTheme.instance.primaryTextColor.withOpacity(0.2),
33-
child: Icon(
34-
Icons.chevron_left,
35-
size: 40,
36-
color: CustomTheme.instance.primaryTextColor,
37-
),
38-
),
39-
Text(
40-
'All Timezones',
41-
style: CustomTheme.instance.timezoneTitleStyle,
42-
),
43-
],
44-
),
45-
),
46-
const Expanded(
47-
child: TimezoneList(),
48-
),
49-
],
50-
),
51-
);
52-
}
3+
class TimezoneListPage extends GradientScaffold {
4+
const TimezoneListPage({super.key})
5+
: super(
6+
body: const TimezoneList(),
7+
title: 'All timezones',
8+
);
539
}

lib/feature/timezones/timezones.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@ import 'package:flutter_spinkit/flutter_spinkit.dart';
44
import '../../app_services.dart';
55
import '../../gen/assets.gen.dart';
66
import '../../models/hive_timezone/hive_timezone.dart';
7-
import '../../service/extension.dart';
8-
import '../../service/hive/hive_main.dart';
97
import '../../service/theme/theme.dart';
108
import '../../service/timezone.dart';
11-
import '../../widget/buttons.dart';
9+
import '../../widget/gradient_scaffold.dart';
1210
import '../../widget/location_tile/location_tile.dart';
1311
import '../../widget/location_tile/location_tile_expansion_settings.dart';
1412

lib/service/navigation_service/world_clock_router_delegate.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'dart:collection';
33
import 'package:flutter/material.dart';
44

55
import '../../feature/error_404.dart';
6+
import '../../feature/favorites/favorites_list_page.dart';
67
import '../../feature/home/home.dart';
78
import '../../feature/responsive_home_page.dart';
89
import '../../feature/timezones/timezone_details.dart';
@@ -103,7 +104,7 @@ class WorldClockRouterDelegate extends RouterDelegate<WorldClockRouteConfig>
103104
_getPage(
104105
path.timezone == null
105106
? const WebHomePage(
106-
widget: TimezoneListPage(),
107+
widget: FavoritesListPage(),
107108
index: 0,
108109
)
109110
: TimezoneDetails(

lib/widget/gradient_scaffold.dart

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import 'package:flutter/material.dart';
2+
3+
import '../service/extension.dart';
4+
import '../service/theme/theme.dart';
5+
import 'buttons.dart';
6+
7+
class GradientScaffold extends StatelessWidget {
8+
const GradientScaffold({
9+
super.key,
10+
required this.body,
11+
required this.title,
12+
});
13+
14+
final String title;
15+
final Widget body;
16+
17+
@override
18+
Widget build(BuildContext context) {
19+
return Scaffold(
20+
backgroundColor: CustomTheme.instance.backgroundColor,
21+
extendBody: true,
22+
extendBodyBehindAppBar: true,
23+
body: Column(
24+
crossAxisAlignment: CrossAxisAlignment.start,
25+
children: [
26+
Container(
27+
decoration: BoxDecoration(
28+
// color: CustomTheme.instance.backgroundColor,
29+
gradient: LinearGradient(
30+
colors: [
31+
CustomTheme.instance.backgroundColor,
32+
Colors.transparent,
33+
],
34+
),
35+
),
36+
// padding: EdgeInsets.only(bottom: 10),
37+
child: Row(
38+
children: [
39+
InkWellButton(
40+
onTap: context.previousPage,
41+
radius: BorderRadius.circular(100.0),
42+
hoverColor:
43+
CustomTheme.instance.primaryTextColor.withOpacity(0.2),
44+
child: Icon(
45+
Icons.chevron_left,
46+
size: 40,
47+
color: CustomTheme.instance.primaryTextColor,
48+
),
49+
),
50+
Text(
51+
title,
52+
style: CustomTheme.instance.timezoneTitleStyle,
53+
),
54+
],
55+
),
56+
),
57+
Expanded(
58+
child: body,
59+
),
60+
],
61+
),
62+
);
63+
}
64+
}

0 commit comments

Comments
 (0)