Eliminar creche_app/lib/core/routes.dart

This commit is contained in:
Alberto 2026-03-11 19:19:23 +00:00
parent 6aa489548b
commit a427ad4ab8
1 changed files with 0 additions and 104 deletions

View File

@ -1,104 +0,0 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'auth_provider.dart';
import '../features/auth/login_screen.dart';
import '../features/auth/waiting_approval_screen.dart';
import '../features/splash/splash_screen.dart';
import '../features/home/home_dashboard.dart';
import '../features/children/children_list_screen.dart';
import '../features/children/child_detail_screen.dart';
import '../features/diary/new_diary_screen.dart';
import '../features/diary/diary_history_screen.dart';
import '../features/attendance/attendance_screen.dart';
import '../features/payments/payments_screen.dart';
import '../features/announcements/announcements_screen.dart';
import '../features/chat/chat_list_screen.dart';
import '../features/chat/chat_screen.dart';
import '../features/profile/profile_screen.dart';
import '../features/users/users_management_screen.dart';
import '../features/settings/settings_screen.dart';
import '../features/medication/medication_screen.dart';
import '../features/menu/menu_screen.dart';
const _adminRoles = ['principal', 'admin'];
const _staffRoles = ['principal', 'admin', 'teacher', 'staff'];
const _allRoles = ['principal', 'admin', 'teacher', 'staff', 'parent'];
final goRouterProvider = Provider<GoRouter>((ref) {
return GoRouter(
initialLocation: '/splash',
redirect: (context, state) {
final session = Supabase.instance.client.auth.currentSession;
final publicPaths = ['/login', '/splash', '/waiting'];
final isPublic = publicPaths.any((p) => state.fullPath?.startsWith(p) ?? false);
if (session == null && !isPublic) return '/login';
return null;
},
routes: [
GoRoute(path: '/splash', builder: (_, __) => const SplashScreen()),
GoRoute(path: '/login', builder: (_, __) => const LoginScreen()),
GoRoute(path: '/waiting', builder: (_, __) => const WaitingApprovalScreen()),
GoRoute(path: '/home', builder: (_, __) => const HomeDashboard()),
GoRoute(path: '/profile', builder: (_, __) => const ProfileScreen()),
// Todos (incluindo encarregados)
GoRoute(path: '/chat', builder: (_, __) => const _Guard(roles: _allRoles, child: ChatListScreen())),
GoRoute(path: '/chat/:userId', builder: (_, state) => _Guard(
roles: _allRoles, child: ChatScreen(toUserId: state.pathParameters['userId']!))),
GoRoute(path: '/menu', builder: (_, __) => const _Guard(roles: _allRoles, child: MenuScreen())),
GoRoute(path: '/medication', builder: (_, __) => const _Guard(roles: _allRoles, child: MedicationScreen())),
GoRoute(path: '/announcements', builder: (_, __) => const _Guard(roles: _allRoles, child: AnnouncementsScreen())),
// Staff (educadoras, auxiliares, admins)
GoRoute(path: '/children', builder: (_, __) => const _Guard(roles: _staffRoles, child: ChildrenListScreen())),
GoRoute(path: '/child/:id', builder: (_, state) => _Guard(
roles: _staffRoles, child: ChildDetailScreen(id: state.pathParameters['id']!))),
GoRoute(path: '/new-diary', builder: (_, state) => _Guard(
roles: _staffRoles, child: NewDiaryScreen(childId: state.uri.queryParameters['childId']))),
GoRoute(path: '/diary-history/:childId', builder: (_, state) => _Guard(
roles: _staffRoles, child: DiaryHistoryScreen(childId: state.pathParameters['childId']!))),
GoRoute(path: '/attendance', builder: (_, __) => const _Guard(roles: _staffRoles, child: AttendanceScreen())),
// Admin / Principal apenas
GoRoute(path: '/payments', builder: (_, __) => const _Guard(roles: _adminRoles, child: PaymentsScreen())),
GoRoute(path: '/users', builder: (_, __) => const _Guard(roles: _adminRoles, child: UsersManagementScreen())),
GoRoute(path: '/settings', builder: (_, __) => const _Guard(roles: _adminRoles, child: SettingsScreen())),
],
);
});
class _Guard extends ConsumerWidget {
final List<String> roles;
final Widget child;
const _Guard({required this.roles, required this.child});
@override
Widget build(BuildContext context, WidgetRef ref) {
final async = ref.watch(currentProfileProvider);
return async.when(
data: (profile) {
if (profile != null && roles.contains(profile.role)) return child;
return Scaffold(
backgroundColor: const Color(0xFF0D1117),
body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center, children: [
const Icon(Icons.lock_outline, color: Color(0xFFE74C3C), size: 64),
const SizedBox(height: 16),
const Text('Acesso Não Autorizado',
style: TextStyle(color: Colors.white, fontSize: 18, fontWeight: FontWeight.bold)),
const SizedBox(height: 8),
Text('A tua função não tem permissão para esta área.',
style: TextStyle(color: Colors.white.withOpacity(0.4), fontSize: 13)),
const SizedBox(height: 24),
TextButton(onPressed: () => context.go('/home'),
child: const Text('← Voltar ao início', style: TextStyle(color: Color(0xFF4FC3F7)))),
])),
);
},
loading: () => const Scaffold(backgroundColor: Color(0xFF0D1117),
body: Center(child: CircularProgressIndicator(color: Color(0xFF4FC3F7)))),
error: (_, __) => const Scaffold(body: Center(child: Text('Erro'))),
);
}
}