feat: environment widgets layout redesign with always-visible widgets
Build and Push / release (push) Successful in 3s
Build and Push / build (push) Successful in 3m11s

- Desktop: 4-in-a-row layout (30/20/20/30 distribution)
- Tablet: 2x2 grid layout
- Mobile: Stacked vertically
- All widgets show "No data available" state instead of being hidden
- Sun position calculates from clock, defaults to 6am/6pm
- Environment refresh changed from 5min to 1 hour

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Jeroen Schweitzer
2026-01-07 11:21:48 +01:00
co-authored by Claude Opus 4.5
parent fffc3d5baf
commit d200cad8be
9 changed files with 276 additions and 45 deletions
@@ -89,7 +89,8 @@ void main() {
expect(find.text('Air Quality'), findsOneWidget);
});
testWidgets('hides Air Quality widget when no data', (tester) async {
testWidgets('shows Air Quality widget with no data state when data unavailable',
(tester) async {
await setLargeWindowSize(tester);
harness.givenAuthenticatedUser();
harness.givenQuickLinks();
@@ -99,8 +100,9 @@ void main() {
await tester.pumpWidget(harness.wrap(const FrontHallPage()));
await tester.pumpAndSettle();
// Air Quality widget should not be present
expect(find.byType(AirQualityWidget), findsNothing);
// Air Quality widget should still be present, showing "no data" state
expect(find.byType(AirQualityWidget), findsOneWidget);
expect(find.text('Air Quality'), findsOneWidget);
});
testWidgets('calls environment API on mount', (tester) async {