feat: type remote device models
This commit is contained in:
@@ -1,13 +1,14 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import '../app/error_message.dart';
|
||||
import '../models/ignis_group.dart';
|
||||
import '../providers/providers.dart';
|
||||
import 'color_picker.dart';
|
||||
|
||||
/// Карточка одной группы ламп с управлением:
|
||||
/// вкл/выкл, яркость, температура, цвет, сцена.
|
||||
class GroupCard extends ConsumerStatefulWidget {
|
||||
final Map<String, dynamic> group;
|
||||
final IgnisGroup group;
|
||||
|
||||
const GroupCard({super.key, required this.group});
|
||||
|
||||
@@ -29,14 +30,15 @@ class _GroupCardState extends ConsumerState<GroupCard> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final g = widget.group;
|
||||
final id = g['id'].toString();
|
||||
final name = g['name'] ?? 'Без имени';
|
||||
final bool isOn = g['last_state']?['state'] ?? false;
|
||||
final int bri = g['last_state']?['brightness'] ?? 100;
|
||||
final int temp = g['last_state']?['temp'] ?? 4000;
|
||||
final int r = g['last_state']?['r'] ?? 255;
|
||||
final int gVal = g['last_state']?['g'] ?? 200;
|
||||
final int b = g['last_state']?['b'] ?? 100;
|
||||
final id = g.id;
|
||||
final name = g.name;
|
||||
final state = g.state;
|
||||
final bool isOn = state.isOn;
|
||||
final int bri = state.brightness;
|
||||
final int temp = state.temp;
|
||||
final int r = state.r;
|
||||
final int gVal = state.g;
|
||||
final int b = state.b;
|
||||
|
||||
ref.listen<GroupControlError?>(groupControlErrorProvider, (previous, next) {
|
||||
if (next == null || next.groupId != id) return;
|
||||
@@ -454,26 +456,13 @@ class _SceneSelectorState extends ConsumerState<_SceneSelector> {
|
||||
spacing: 8,
|
||||
runSpacing: 4,
|
||||
children: scenes.map((scene) {
|
||||
String sceneName;
|
||||
String sceneId;
|
||||
|
||||
if (scene is String) {
|
||||
sceneName = scene;
|
||||
sceneId = scene;
|
||||
} else if (scene is Map) {
|
||||
sceneName = (scene['name'] ?? scene['id'] ?? scene.toString())
|
||||
.toString();
|
||||
sceneId = (scene['id'] ?? scene['name'] ?? scene.toString())
|
||||
.toString();
|
||||
} else {
|
||||
sceneName = scene.toString();
|
||||
sceneId = scene.toString();
|
||||
}
|
||||
|
||||
return ActionChip(
|
||||
label: Text(sceneName, style: const TextStyle(fontSize: 12)),
|
||||
label: Text(
|
||||
scene.displayName,
|
||||
style: const TextStyle(fontSize: 12),
|
||||
),
|
||||
backgroundColor: Colors.white10,
|
||||
onPressed: () => _setScene(sceneId),
|
||||
onPressed: () => _setScene(scene.id),
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user