feat: ignis app v1.0.0 -- управление WiZ лампами

This commit is contained in:
Artem Kokos
2026-03-28 18:55:54 +07:00
commit 688139a75a
143 changed files with 6464 additions and 0 deletions

111
lib/main.dart Normal file
View File

@@ -0,0 +1,111 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'providers/providers.dart';
import 'screens/homes_screen.dart';
import 'screens/remote_screen.dart';
void main() {
runApp(const ProviderScope(child: IgnisApp()));
}
class IgnisApp extends StatelessWidget {
const IgnisApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Ignis',
debugShowCheckedModeBanner: false,
theme: ThemeData.dark(useMaterial3: true).copyWith(
scaffoldBackgroundColor: const Color(0xFF0E0E0E),
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.deepOrange,
brightness: Brightness.dark,
),
appBarTheme: const AppBarTheme(
backgroundColor: Color(0xFF1A1A1A),
elevation: 0,
centerTitle: true,
),
cardTheme: CardThemeData(
color: const Color(0xFF1E1E1E),
elevation: 2,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
),
sliderTheme: const SliderThemeData(
trackHeight: 4,
thumbShape: RoundSliderThumbShape(enabledThumbRadius: 8),
),
),
home: const MainGate(),
);
}
}
/// Стартовый экран -- проверяет наличие домов и перенаправляет
class MainGate extends ConsumerStatefulWidget {
const MainGate({super.key});
@override
ConsumerState<MainGate> createState() => _MainGateState();
}
class _MainGateState extends ConsumerState<MainGate> {
@override
void initState() {
super.initState();
_bootstrap();
}
Future<void> _bootstrap() async {
try {
// Загружаем список домов
await ref.read(homesProvider.notifier).load();
await ref.read(currentHomeProvider.notifier).load();
if (!mounted) return;
final home = ref.read(currentHomeProvider);
if (home != null) {
// Есть дом -- идём на пульт управления
await ref.read(groupsProvider.notifier).initAndRefresh();
if (mounted) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (_) => const RemoteScreen()),
);
}
} else {
// Нет домов -- на экран управления домами
if (mounted) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (_) => const HomesScreen()),
);
}
}
} catch (e) {
debugPrint("Ошибка бутстрапа: $e");
if (mounted) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (_) => const HomesScreen()),
);
}
}
}
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(color: Colors.deepOrange),
SizedBox(height: 20),
Text("Загрузка...", style: TextStyle(color: Colors.white54)),
],
),
),
);
}
}