Co-authored-by: eddgranados12 <eddgranados12@users.noreply.github.com>
Co-authored-by: Azareth-Tr <Azareth-Tr@users.noreply.github.com> Co-authored-by: MENDOZA BALLARDO GAEL RICARDO <gael-meb123@users.noreply.github.com> vistas
This commit is contained in:
@@ -14,14 +14,9 @@ import 'package:recolecta_app/features/home/citizen_shell.dart';
|
||||
import 'package:recolecta_app/features/separation_guide/screens/category_detail_screen.dart';
|
||||
import 'package:recolecta_app/features/separation_guide/screens/separation_guide_screen.dart';
|
||||
import 'package:recolecta_app/core/services/auth_controller.dart';
|
||||
|
||||
// Mock Admin Screens
|
||||
class AdminDashboardScreen extends StatelessWidget {
|
||||
const AdminDashboardScreen({super.key});
|
||||
@override
|
||||
Widget build(BuildContext context) =>
|
||||
const Scaffold(body: Center(child: Text('Admin Dashboard')));
|
||||
}
|
||||
import '../../features/admin/screens/admin_dashboard_screen.dart';
|
||||
import '../../features/notifications/notifications_screen.dart';
|
||||
import '../../features/quiz/quiz_screen.dart';
|
||||
|
||||
class AdminRouteDetailScreen extends StatelessWidget {
|
||||
const AdminRouteDetailScreen({super.key, required this.routeId});
|
||||
@@ -142,6 +137,11 @@ final routerProvider = Provider<GoRouter>((ref) {
|
||||
),
|
||||
],
|
||||
),
|
||||
GoRoute(
|
||||
path: '/notifications',
|
||||
builder: (context, state) => const NotificationsScreen(),
|
||||
),
|
||||
GoRoute(path: '/quiz', builder: (context, state) => const QuizScreen()),
|
||||
],
|
||||
);
|
||||
});
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import '../models/auth_state.dart';
|
||||
@@ -14,28 +15,28 @@ class AuthController extends AsyncNotifier<AuthState> {
|
||||
if (session == null) {
|
||||
return const AuthState.unauthenticated();
|
||||
}
|
||||
|
||||
return AuthState.authenticated(
|
||||
final authState = AuthState.authenticated(
|
||||
token: session.token,
|
||||
userRole: session.userRole,
|
||||
routeId: session.routeId,
|
||||
);
|
||||
_subscribeIfCitizen(authState);
|
||||
return authState;
|
||||
}
|
||||
|
||||
Future<void> login({required String email, required String password}) async {
|
||||
state = const AsyncLoading<AuthState>();
|
||||
|
||||
try {
|
||||
final session = await ref
|
||||
.read(authServiceProvider)
|
||||
.login(email: email, password: password);
|
||||
state = AsyncData(
|
||||
AuthState.authenticated(
|
||||
token: session.token,
|
||||
userRole: session.userRole,
|
||||
routeId: session.routeId,
|
||||
),
|
||||
final authState = AuthState.authenticated(
|
||||
token: session.token,
|
||||
userRole: session.userRole,
|
||||
routeId: session.routeId,
|
||||
);
|
||||
_subscribeIfCitizen(authState);
|
||||
state = AsyncData(authState);
|
||||
} catch (error, stackTrace) {
|
||||
state = AsyncError<AuthState>(error, stackTrace);
|
||||
rethrow;
|
||||
@@ -48,18 +49,17 @@ class AuthController extends AsyncNotifier<AuthState> {
|
||||
required String password,
|
||||
}) async {
|
||||
state = const AsyncLoading<AuthState>();
|
||||
|
||||
try {
|
||||
final session = await ref
|
||||
.read(authServiceProvider)
|
||||
.register(email: email, phone: phone, password: password);
|
||||
state = AsyncData(
|
||||
AuthState.authenticated(
|
||||
token: session.token,
|
||||
userRole: session.userRole,
|
||||
routeId: session.routeId,
|
||||
),
|
||||
final authState = AuthState.authenticated(
|
||||
token: session.token,
|
||||
userRole: session.userRole,
|
||||
routeId: session.routeId,
|
||||
);
|
||||
_subscribeIfCitizen(authState);
|
||||
state = AsyncData(authState);
|
||||
} catch (error, stackTrace) {
|
||||
state = AsyncError<AuthState>(error, stackTrace);
|
||||
rethrow;
|
||||
@@ -67,7 +67,17 @@ class AuthController extends AsyncNotifier<AuthState> {
|
||||
}
|
||||
|
||||
Future<void> logout() async {
|
||||
final previousRouteId = state.value?.routeId;
|
||||
await ref.read(authServiceProvider).logout();
|
||||
if (previousRouteId != null) {
|
||||
FirebaseMessaging.instance.unsubscribeFromTopic('topic_$previousRouteId');
|
||||
}
|
||||
state = const AsyncData(AuthState.unauthenticated());
|
||||
}
|
||||
|
||||
void _subscribeIfCitizen(AuthState authState) {
|
||||
if (authState.userRole == 'citizen' && authState.routeId != null) {
|
||||
FirebaseMessaging.instance.subscribeToTopic('topic_${authState.routeId}');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user