feat: add guest mode — browse events without login

New file: lib/core/auth/auth_guard.dart
  Static AuthGuard class with isGuest flag and requireLogin() helper
  that shows a login prompt bottom sheet when guests try protected actions.

login_screen.dart / desktop_login_screen.dart:
  Added "Continue as Guest" button below sign-up link.
  Sets AuthGuard.isGuest = true, then navigates to HomeScreen.

api_client.dart:
  _buildAuthBody() and GET auth check no longer throw when token is missing.
  If no token (guest), request proceeds without auth — backend decides.

home_screen.dart:
  Bottom nav guards: tapping Contribute (index 2) or Profile (index 3)
  as guest shows login prompt instead of navigating.

auth_service.dart:
  AuthGuard.setGuest(false) called on successful login AND register
  so guest flag is always cleared when user authenticates.

Guest CAN: browse home, calendar, search, filter, view event details.
Guest CANNOT: contribute, view profile, book events (prompts login).
This commit is contained in:
2026-03-20 22:40:50 +05:30
parent 0c4e62d00e
commit 1c73fb8d9d
6 changed files with 130 additions and 12 deletions

View File

@@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import '../features/auth/services/auth_service.dart';
import '../core/auth/auth_guard.dart';
import 'home_screen.dart';
class LoginScreen extends StatefulWidget {
@@ -509,6 +510,30 @@ class _LoginScreenState extends State<LoginScreen> {
],
),
),
const SizedBox(height: 16),
// Continue as Guest
Center(
child: GestureDetector(
onTap: () {
AuthGuard.setGuest(true);
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (_) => const HomeScreen()),
(route) => false,
);
},
child: const Text(
'Continue as Guest',
style: TextStyle(
color: _textMuted,
fontSize: 13,
decoration: TextDecoration.underline,
decorationColor: _textMuted,
),
),
),
),
],
),
),