Skip to content

Commit 9bf9bac

Browse files
committed
fetch week and day data for correct lat and long
1 parent d757e19 commit 9bf9bac

File tree

10 files changed

+115
-102
lines changed

10 files changed

+115
-102
lines changed

lib/main.dart

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:weather/pages/day.dart';
55
import 'package:weather/pages/map.dart';
66
import 'package:weather/pages/week.dart';
77
import 'package:weather/providers/brightness_mode.dart';
8+
import 'package:weather/utils/init.dart';
89
import 'package:weather/utils/theme_data.dart';
910

1011
void main() {
@@ -22,14 +23,27 @@ class WeatherApp extends ConsumerWidget {
2223

2324
@override
2425
Widget build(BuildContext context, WidgetRef ref) {
25-
return MaterialApp(
26-
title: 'Weather App',
27-
theme: getThemeData(ref.watch(brightness)),
28-
initialRoute: initialRoute,
29-
routes: {
30-
'/week': (_) => const WeekPage(),
31-
'/day': (_) => const DayPage(),
32-
'/map': (_) => const MapPage(),
26+
final initInfo = ref.watch(initInfoFutureProvider);
27+
28+
return initInfo.when(
29+
loading: () => const CircularProgressIndicator(),
30+
error: (err, stack) => Text('Error: $err'),
31+
data: (config) {
32+
return ProviderScope(
33+
overrides: [
34+
initInfoProvider.overrideWithValue(config),
35+
],
36+
child: MaterialApp(
37+
title: 'Weather App',
38+
theme: getThemeData(ref.watch(brightness)),
39+
initialRoute: initialRoute,
40+
routes: {
41+
'/week': (_) => const WeekPage(),
42+
'/day': (_) => const DayPage(),
43+
'/map': (_) => const MapPage(),
44+
},
45+
),
46+
);
3347
},
3448
);
3549
}

lib/pages/chart.dart

Lines changed: 0 additions & 46 deletions
This file was deleted.

lib/pages/day.dart

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_riverpod/flutter_riverpod.dart';
3+
import 'package:weather/providers/services/google_places.dart';
34
import 'package:weather/providers/services/open_mateo.dart';
5+
import 'package:weather/services/google_places/data.dart';
46
import 'package:weather/services/open_mateo/data.dart';
7+
import 'package:weather/utils/init.dart';
58
import 'package:weather/widgets/common/hours_row.dart';
69
import 'package:weather/widgets/common/layout/layout.dart';
710
import 'package:weather/widgets/day/day_details_card/day_details_card.dart';
@@ -12,11 +15,22 @@ class DayPage extends ConsumerWidget {
1215
@override
1316
Widget build(BuildContext context, WidgetRef ref) {
1417
final openMateoService = ref.read(openMateoServiceProvider);
18+
final googlePlacesService = ref.read(googlePlacesServiceProvider);
19+
final position = ref.read(initInfoProvider).position;
1520

1621
return Layout(
1722
title: 'Day at a Glance',
1823
child: FutureBuilder(
19-
future: openMateoService.fetchHourly(),
24+
future: Future.wait([
25+
openMateoService.fetchHourly(
26+
position.latitude,
27+
position.longitude,
28+
),
29+
googlePlacesService.fetchNearbyLocalities(
30+
position.latitude,
31+
position.longitude,
32+
),
33+
]),
2034
builder: (context, snapshot) {
2135
if (snapshot.connectionState == ConnectionState.waiting) {
2236
return const Center(
@@ -30,14 +44,21 @@ class DayPage extends ConsumerWidget {
3044
);
3145
}
3246

33-
final hourlyData = snapshot.data as Map<String, HourlyData>;
47+
final hourlyData = snapshot.data?[0] as Map<String, HourlyData>;
48+
final localities = snapshot.data?[1] as List<Place>;
49+
50+
final localityName =
51+
localities.isNotEmpty && localities.first.displayName != null
52+
? localities.first.displayName?.text
53+
: 'Unknown';
3454

3555
return Column(
3656
mainAxisSize: MainAxisSize.min,
3757
children: <Widget>[
3858
Expanded(
3959
child: DayDetailsCard(
4060
hourlyData: hourlyData,
61+
localityName: localityName!,
4162
),
4263
),
4364
const SizedBox(height: 20),

lib/pages/week.dart

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
22
import 'package:flutter_riverpod/flutter_riverpod.dart';
33
import 'package:weather/providers/services/open_mateo.dart';
44
import 'package:weather/services/open_mateo/data.dart';
5+
import 'package:weather/utils/init.dart';
56
import 'package:weather/widgets/common/hours_row.dart';
67
import 'package:weather/widgets/common/layout/layout.dart';
78
import 'package:weather/widgets/week/days_column.dart';
@@ -12,13 +13,20 @@ class WeekPage extends ConsumerWidget {
1213
@override
1314
Widget build(BuildContext context, WidgetRef ref) {
1415
final openMateoService = ref.read(openMateoServiceProvider);
16+
final position = ref.read(initInfoProvider).position;
1517

1618
return Layout(
1719
title: 'Weekly Forecast',
1820
child: FutureBuilder(
1921
future: Future.wait([
20-
openMateoService.fetchHourly(),
21-
openMateoService.fetchDaily(),
22+
openMateoService.fetchHourly(
23+
position.latitude,
24+
position.longitude,
25+
),
26+
openMateoService.fetchDaily(
27+
position.latitude,
28+
position.longitude,
29+
),
2230
]),
2331
builder: (context, snapshot) {
2432
if (snapshot.connectionState == ConnectionState.waiting) {

lib/services/open_mateo/open_mateo.dart

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,14 @@ class OpenMateoService {
88

99
OpenMateoService(this.dio);
1010

11-
Future<Map<String, HourlyData>> fetchHourly() async {
12-
final response = await dio.get(openMateoUrlBuilder.getHourlyDataUrl());
11+
Future<Map<String, HourlyData>> fetchHourly(
12+
double latitude,
13+
double longitude,
14+
) async {
15+
final response = await dio.get(
16+
openMateoUrlBuilder.getHourlyDataUrl(latitude, longitude),
17+
);
18+
1319
final data = HourlyForecastResponse.fromJson(response.data);
1420

1521
final result = <String, HourlyData>{};
@@ -25,8 +31,16 @@ class OpenMateoService {
2531
return result;
2632
}
2733

28-
Future<Map<String, DailyData>> fetchDaily() async {
29-
final response = await dio.get(openMateoUrlBuilder.getDailyDataUrl());
34+
Future<Map<String, DailyData>> fetchDaily(
35+
double latitude,
36+
double longitude,
37+
) async {
38+
final response = await dio.get(
39+
openMateoUrlBuilder.getDailyDataUrl(
40+
latitude,
41+
longitude,
42+
),
43+
);
3044

3145
final data = DailyForecastResponse.fromJson(response.data);
3246

lib/services/open_mateo/open_mateo_url.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,25 @@ class OpenMateoUrlBuilder {
2424
path: '/v1/forecast',
2525
);
2626

27-
String getHourlyDataUrl() {
27+
String getHourlyDataUrl(double latitude, double longitude) {
2828
final (start, end) = _getTodayTimeRange();
2929
return uri.replace(
3030
queryParameters: {
31-
'latitude': '40.66',
32-
'longitude': '-73.95742972837749',
31+
'latitude': latitude.toString(),
32+
'longitude': longitude.toString(),
3333
'hourly': 'temperature_2m,weather_code',
3434
'start_hour': start,
3535
'end_hour': end,
3636
},
3737
).toString();
3838
}
3939

40-
String getDailyDataUrl() {
40+
String getDailyDataUrl( double latitude, double longitude) {
4141
final (start, end) = _getWeekDateRange();
4242
return uri.replace(
4343
queryParameters: {
44-
'latitude': '52.52',
45-
'longitude': '13.41',
44+
'latitude': latitude.toString(),
45+
'longitude': longitude.toString(),
4646
'daily': 'temperature_2m_min,temperature_2m_max,weather_code',
4747
'start_date': start,
4848
'end_date': end,

lib/utils/init.dart

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import 'package:flutter_riverpod/flutter_riverpod.dart';
2+
import 'package:geolocator/geolocator.dart';
3+
import 'package:weather/providers/services/location.dart';
4+
5+
class InitInfo {
6+
final Position position;
7+
8+
InitInfo({required this.position});
9+
}
10+
11+
final initInfoFutureProvider = FutureProvider<InitInfo>((ref) async {
12+
final locationService = ref.read(locationServiceProvider);
13+
14+
final position = await locationService.getCurrentPosition();
15+
16+
return InitInfo(
17+
position: position,
18+
);
19+
});
20+
21+
final initInfoProvider = Provider<InitInfo>((ref) {
22+
throw UnimplementedError();
23+
});

lib/widgets/common/layout/layout.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class _MapIconButton extends ConsumerWidget {
1010
return IconButton(
1111
icon: const Icon(Icons.map_outlined),
1212
onPressed: () {
13-
Navigator.pushNamed(context, '/map2');
13+
Navigator.pushNamed(context, '/map');
1414
},
1515
tooltip: 'Open Map',
1616
);

lib/widgets/day/day_details_card/day_details_card.dart

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ import 'package:weather/services/open_mateo/data.dart';
33
import 'package:weather/widgets/chart/hourly_weather_chart.dart';
44

55
class DayDetailsCard extends StatelessWidget {
6+
final String localityName;
67
final Map<String, HourlyData> hourlyData;
78

89
const DayDetailsCard({
910
super.key,
1011
required this.hourlyData,
12+
required this.localityName,
1113
});
1214

1315
@override
@@ -34,10 +36,10 @@ class DayDetailsCard extends StatelessWidget {
3436
Row(
3537
mainAxisAlignment: MainAxisAlignment.spaceBetween,
3638
children: [
37-
const _Location(),
39+
_Location(localityName: localityName),
3840
Text(
39-
'Today 00:32 PM',
40-
style: Theme.of(context).textTheme.bodySmall,
41+
'Today ${TimeOfDay.now().format(context)}',
42+
style: Theme.of(context).textTheme.bodyMedium,
4143
)
4244
],
4345
),
@@ -136,7 +138,9 @@ class _WeatherConditionsRow extends StatelessWidget {
136138
}
137139

138140
class _Location extends StatelessWidget {
139-
const _Location();
141+
final String localityName;
142+
143+
const _Location({required this.localityName});
140144

141145
@override
142146
Widget build(BuildContext context) {
@@ -147,7 +151,10 @@ class _Location extends StatelessWidget {
147151
Icons.place_outlined,
148152
size: Theme.of(context).textTheme.titleMedium?.fontSize,
149153
),
150-
Text('Gotham', style: Theme.of(context).textTheme.bodyMedium),
154+
Text(
155+
localityName,
156+
style: Theme.of(context).textTheme.bodyMedium,
157+
),
151158
],
152159
);
153160
}

lib/widgets/day/details.dart

Lines changed: 0 additions & 28 deletions
This file was deleted.

0 commit comments

Comments
 (0)