Injected DeviceLocationBloc into AnalyticsPage.

This commit is contained in:
Faris Armoush
2025-06-01 10:50:51 +03:00
parent 4ebe65f820
commit 2c4da63266
2 changed files with 24 additions and 5 deletions

View File

@ -1,5 +1,7 @@
import 'package:dio/dio.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/analytics/modules/air_quality/blocs/device_location/device_location_bloc.dart';
import 'package:syncrow_web/pages/analytics/modules/air_quality/blocs/range_of_aqi/range_of_aqi_bloc.dart'; import 'package:syncrow_web/pages/analytics/modules/air_quality/blocs/range_of_aqi/range_of_aqi_bloc.dart';
import 'package:syncrow_web/pages/analytics/modules/analytics/blocs/analytics_date_picker_bloc/analytics_date_picker_bloc.dart'; import 'package:syncrow_web/pages/analytics/modules/analytics/blocs/analytics_date_picker_bloc/analytics_date_picker_bloc.dart';
import 'package:syncrow_web/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_bloc.dart'; import 'package:syncrow_web/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_bloc.dart';
@ -16,6 +18,7 @@ import 'package:syncrow_web/pages/analytics/modules/occupancy/blocs/occupancy_he
import 'package:syncrow_web/pages/analytics/services/analytics_devices/analytics_devices_service_delagate.dart'; import 'package:syncrow_web/pages/analytics/services/analytics_devices/analytics_devices_service_delagate.dart';
import 'package:syncrow_web/pages/analytics/services/analytics_devices/remote_energy_management_analytics_devices_service.dart'; import 'package:syncrow_web/pages/analytics/services/analytics_devices/remote_energy_management_analytics_devices_service.dart';
import 'package:syncrow_web/pages/analytics/services/analytics_devices/remote_occupancy_analytics_devices_service.dart'; import 'package:syncrow_web/pages/analytics/services/analytics_devices/remote_occupancy_analytics_devices_service.dart';
import 'package:syncrow_web/pages/analytics/services/device_location/remote_device_location_service.dart';
import 'package:syncrow_web/pages/analytics/services/energy_consumption_by_phases/remote_energy_consumption_by_phases_service.dart'; import 'package:syncrow_web/pages/analytics/services/energy_consumption_by_phases/remote_energy_consumption_by_phases_service.dart';
import 'package:syncrow_web/pages/analytics/services/energy_consumption_per_device/remote_energy_consumption_per_device_service.dart'; import 'package:syncrow_web/pages/analytics/services/energy_consumption_per_device/remote_energy_consumption_per_device_service.dart';
import 'package:syncrow_web/pages/analytics/services/occupacy/remote_occupancy_service.dart'; import 'package:syncrow_web/pages/analytics/services/occupacy/remote_occupancy_service.dart';
@ -101,6 +104,13 @@ class _AnalyticsPageState extends State<AnalyticsPage> {
FakeRangeOfAqiService(), FakeRangeOfAqiService(),
), ),
), ),
BlocProvider(
create: (context) => DeviceLocationBloc(
RemoteDeviceLocationService(
Dio(BaseOptions(baseUrl: 'https://api.openweathermap.org/data/2.5')),
),
),
),
], ],
child: const AnalyticsPageForm(), child: const AnalyticsPageForm(),
); );

View File

@ -9,6 +9,7 @@ class RemoteDeviceLocationService implements DeviceLocationService {
final Dio _dio; final Dio _dio;
static final _openWeatherApiKey = dotenv.env['OPEN_WEATHER_API_KEY']!; static final _openWeatherApiKey = dotenv.env['OPEN_WEATHER_API_KEY']!;
@override @override
Future<DeviceLocationInfo> get(GetDeviceLocationDataParam param) async { Future<DeviceLocationInfo> get(GetDeviceLocationDataParam param) async {
try { try {
@ -31,8 +32,12 @@ class RemoteDeviceLocationService implements DeviceLocationService {
} }
Future<double?> _getAirQualityData(GetDeviceLocationDataParam param) async { Future<double?> _getAirQualityData(GetDeviceLocationDataParam param) async {
final response = await _dio.get( final response = await _dio.get<Map<String, dynamic>>(
'https://api.openweathermap.org/data/2.5/air_pollution', '/air_pollution/history',
options: Options(
method: 'GET',
responseType: ResponseType.json,
),
queryParameters: { queryParameters: {
'lat': param.latitude, 'lat': param.latitude,
'lon': param.longitude, 'lon': param.longitude,
@ -40,7 +45,7 @@ class RemoteDeviceLocationService implements DeviceLocationService {
}, },
); );
final data = response.data as Map<String, dynamic>; final data = response.data ?? {};
final list = data['list'] as List<dynamic>; final list = data['list'] as List<dynamic>;
if (list.isEmpty) return null; if (list.isEmpty) return null;
@ -53,8 +58,12 @@ class RemoteDeviceLocationService implements DeviceLocationService {
final start = DateTime(now.year, now.month, now.day); final start = DateTime(now.year, now.month, now.day);
final end = DateTime(now.year, now.month, now.day, 23, 59, 59); final end = DateTime(now.year, now.month, now.day, 23, 59, 59);
try { try {
final response = await _dio.get( final response = await _dio.get<Map<String, dynamic>>(
'https://api.openweathermap.org/data/2.5/weather', '/weather',
options: Options(
method: 'GET',
responseType: ResponseType.json,
),
queryParameters: { queryParameters: {
'lat': param.latitude, 'lat': param.latitude,
'lon': param.longitude, 'lon': param.longitude,