Waaaay big enchancements
This commit is contained in:
@@ -5,6 +5,9 @@ import '../widgets/group_card.dart';
|
||||
import 'homes_screen.dart';
|
||||
import 'group_edit_screen.dart';
|
||||
import 'schedules_screen.dart';
|
||||
import 'stats_screen.dart';
|
||||
import 'event_log_screen.dart';
|
||||
import 'api_keys_screen.dart';
|
||||
|
||||
/// Основной экран пульта управления.
|
||||
/// Показывает группы текущего дома с управлением.
|
||||
@@ -26,6 +29,7 @@ class _RemoteScreenState extends ConsumerState<RemoteScreen> {
|
||||
|
||||
Future<void> _bootstrap() async {
|
||||
await ref.read(groupsProvider.notifier).initAndRefresh();
|
||||
await ref.read(authInfoProvider.notifier).load();
|
||||
if (mounted) setState(() => _loading = false);
|
||||
}
|
||||
|
||||
@@ -33,6 +37,8 @@ class _RemoteScreenState extends ConsumerState<RemoteScreen> {
|
||||
Widget build(BuildContext context) {
|
||||
final groups = ref.watch(groupsProvider);
|
||||
final currentHome = ref.watch(currentHomeProvider);
|
||||
final authInfo = ref.watch(authInfoProvider);
|
||||
final isAdmin = authInfo?['is_admin'] == true;
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
@@ -53,13 +59,68 @@ class _RemoteScreenState extends ConsumerState<RemoteScreen> {
|
||||
MaterialPageRoute(builder: (_) => const GroupEditScreen()),
|
||||
),
|
||||
),
|
||||
// Расписания
|
||||
IconButton(
|
||||
icon: const Icon(Icons.schedule),
|
||||
tooltip: 'Расписания',
|
||||
onPressed: () => Navigator.of(context).push(
|
||||
MaterialPageRoute(builder: (_) => const SchedulesScreen()),
|
||||
),
|
||||
// Меню
|
||||
PopupMenuButton<String>(
|
||||
icon: const Icon(Icons.more_vert),
|
||||
onSelected: (value) {
|
||||
switch (value) {
|
||||
case 'schedules':
|
||||
Navigator.of(context).push(
|
||||
MaterialPageRoute(builder: (_) => const SchedulesScreen()),
|
||||
);
|
||||
break;
|
||||
case 'stats':
|
||||
Navigator.of(context).push(
|
||||
MaterialPageRoute(builder: (_) => const StatsScreen()),
|
||||
);
|
||||
break;
|
||||
case 'log':
|
||||
Navigator.of(context).push(
|
||||
MaterialPageRoute(builder: (_) => const EventLogScreen()),
|
||||
);
|
||||
break;
|
||||
case 'api_keys':
|
||||
Navigator.of(context).push(
|
||||
MaterialPageRoute(builder: (_) => const ApiKeysScreen()),
|
||||
);
|
||||
break;
|
||||
}
|
||||
},
|
||||
itemBuilder: (context) => [
|
||||
const PopupMenuItem(
|
||||
value: 'schedules',
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.schedule),
|
||||
title: Text('Расписания'),
|
||||
contentPadding: EdgeInsets.zero,
|
||||
),
|
||||
),
|
||||
const PopupMenuItem(
|
||||
value: 'stats',
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.bar_chart),
|
||||
title: Text('Статистика'),
|
||||
contentPadding: EdgeInsets.zero,
|
||||
),
|
||||
),
|
||||
const PopupMenuItem(
|
||||
value: 'log',
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.list_alt),
|
||||
title: Text('Лог событий'),
|
||||
contentPadding: EdgeInsets.zero,
|
||||
),
|
||||
),
|
||||
if (isAdmin)
|
||||
const PopupMenuItem(
|
||||
value: 'api_keys',
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.vpn_key),
|
||||
title: Text('API-ключи'),
|
||||
contentPadding: EdgeInsets.zero,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user