chore: release v1.5.0
feat: add dynamic environment widgets Add live weather, sun position, and forecast widgets to Front Hall dashboard, powered by data from the Qdrant volatile collection via core-api. New widgets: - SunPositionWidget: Animated arc showing sun/moon position with gradient colors - ForecastWidget: Multi-day weather outlook - Updated WeatherWidget and AirQualityWidget to accept API data Infrastructure: - Environment datasource calling GET /tools/environment - Environment provider with 5-minute auto-refresh - Freezed models for environment data Tests: - 12 widget tests for environment section - Updated existing tests with givenEnvironment() harness method 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.5
parent
ea6914b5f4
commit
fffc3d5baf
@@ -0,0 +1,38 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:tatlock_ui/core/api/api_client.dart';
|
||||
import 'package:tatlock_ui/features/front_hall/data/models/environment_model.dart';
|
||||
|
||||
part 'environment_datasource.g.dart';
|
||||
|
||||
/// Data source for environment data operations.
|
||||
///
|
||||
/// Fetches weather, forecast, sun times, and air quality from Core API.
|
||||
class EnvironmentDatasource {
|
||||
EnvironmentDatasource(this._dio);
|
||||
|
||||
final Dio _dio;
|
||||
|
||||
static const _basePath = '/tools/environment';
|
||||
|
||||
/// Gets current environment data.
|
||||
///
|
||||
/// Returns weather, forecast, sun times, and optionally air quality.
|
||||
Future<EnvironmentData> getEnvironment() async {
|
||||
final response = await _dio.get<Map<String, dynamic>>(_basePath);
|
||||
final data = response.data;
|
||||
|
||||
if (data == null) {
|
||||
throw Exception('Failed to fetch environment data');
|
||||
}
|
||||
|
||||
return EnvironmentData.fromJson(data);
|
||||
}
|
||||
}
|
||||
|
||||
/// Provides the environment datasource.
|
||||
@riverpod
|
||||
EnvironmentDatasource environmentDatasource(Ref ref) {
|
||||
final dio = ref.watch(coreApiClientProvider);
|
||||
return EnvironmentDatasource(dio);
|
||||
}
|
||||
Reference in New Issue
Block a user