Files
2026-07-11 21:51:34 -05:00

77 lines
2.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mirror_ui/mirror_ui.dart';
import '../providers/ha_provider.dart';
class WeatherPickerScreen extends ConsumerStatefulWidget {
final String? selectedEntityId;
const WeatherPickerScreen({super.key, this.selectedEntityId});
@override
ConsumerState<WeatherPickerScreen> createState() => _WeatherPickerScreenState();
}
class _WeatherPickerScreenState extends ConsumerState<WeatherPickerScreen> {
String? _selected;
@override
void initState() {
super.initState();
_selected = widget.selectedEntityId;
}
@override
Widget build(BuildContext context) {
final entitiesAsync = ref.watch(haEntitiesProvider);
return Scaffold(
appBar: AppBar(
title: const Text('Select Weather Entity'),
backgroundColor: MirrorTheme.background,
actions: [
TextButton(
onPressed: _selected != null ? () => Navigator.of(context).pop(_selected) : null,
child: const Text('Done'),
),
],
),
backgroundColor: MirrorTheme.background,
body: entitiesAsync.when(
loading: () => const Center(child: CircularProgressIndicator()),
error: (e, _) => Center(child: Text('Error: $e')),
data: (state) {
if (state.error != null) {
return Center(child: Text(state.error!));
}
final weatherEntities = state.entities
.where((e) => e.entityId.startsWith('weather.'))
.toList();
if (weatherEntities.isEmpty) {
return const Center(
child: Text('No weather entities found in Home Assistant'),
);
}
return ListView.builder(
padding: const EdgeInsets.all(12),
itemCount: weatherEntities.length,
itemBuilder: (context, index) {
final entity = weatherEntities[index];
final name =
(entity.attributes['friendly_name'] as String?) ?? entity.entityId;
return RadioListTile<String>(
title: Text(name),
subtitle: Text(entity.entityId),
value: entity.entityId,
groupValue: _selected,
activeColor: MirrorTheme.accent,
onChanged: (value) => setState(() => _selected = value),
);
},
);
},
),
);
}
}