feat: deploy infrastructure + disk/drive, calendar, presentation, workspaces, onboarding, demo user
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_animate/flutter_animate.dart';
|
||||
import '../providers/notification_provider.dart';
|
||||
import '../core/constants/app_constants.dart';
|
||||
|
||||
class Shell extends ConsumerWidget {
|
||||
final Widget child;
|
||||
|
||||
const Shell({super.key, required this.child});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final unreadCount = ref.watch(unreadCountProvider);
|
||||
final colorScheme = Theme.of(context).colorScheme;
|
||||
|
||||
final currentLocation = GoRouterState.of(context).matchedLocation;
|
||||
|
||||
int currentIndex = _navIndex(currentLocation);
|
||||
|
||||
return Scaffold(
|
||||
body: child,
|
||||
bottomNavigationBar: BottomNavigationBar(
|
||||
currentIndex: currentIndex,
|
||||
onTap: (index) => _onTap(context, index),
|
||||
items: [
|
||||
const BottomNavigationBarItem(
|
||||
icon: Icon(Icons.dashboard_outlined),
|
||||
activeIcon: Icon(Icons.dashboard),
|
||||
label: 'Дашборд',
|
||||
),
|
||||
const BottomNavigationBarItem(
|
||||
icon: Icon(Icons.lightbulb_outline),
|
||||
activeIcon: Icon(Icons.lightbulb),
|
||||
label: 'Идеи',
|
||||
),
|
||||
const BottomNavigationBarItem(
|
||||
icon: Icon(Icons.mic_outlined),
|
||||
activeIcon: Icon(Icons.mic),
|
||||
label: 'Голос',
|
||||
),
|
||||
const BottomNavigationBarItem(
|
||||
icon: Icon(Icons.notifications_outlined),
|
||||
activeIcon: Icon(Icons.notifications),
|
||||
label: 'Уведомления',
|
||||
),
|
||||
const BottomNavigationBarItem(
|
||||
icon: Icon(Icons.settings_outlined),
|
||||
activeIcon: Icon(Icons.settings),
|
||||
label: 'Настройки',
|
||||
),
|
||||
],
|
||||
),
|
||||
).animate().fadeIn(duration: 200.ms);
|
||||
}
|
||||
|
||||
int _navIndex(String location) {
|
||||
if (location.startsWith('/ideas')) return 1;
|
||||
if (location.startsWith('/voice')) return 2;
|
||||
if (location.startsWith('/notifications')) return 3;
|
||||
if (location.startsWith('/settings') ||
|
||||
location.startsWith('/admin') ||
|
||||
location.startsWith('/workspaces')) return 4;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void _onTap(BuildContext context, int index) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
context.go('/');
|
||||
case 1:
|
||||
context.go('/ideas');
|
||||
case 2:
|
||||
context.go('/voice');
|
||||
case 3:
|
||||
context.go('/notifications');
|
||||
case 4:
|
||||
context.go('/settings');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user