feat: Add FAQ screen and navigation, implement authentication-gated access for home screen features, and dynamically render header menu options based on authentication status.

This commit is contained in:
pradeepkumar
2026-03-07 23:28:21 +05:30
parent ef0fe593ab
commit bdb7b04fbf
6 changed files with 717 additions and 55 deletions

View File

@@ -154,7 +154,10 @@ class _MenuDrawer extends ConsumerWidget {
context,
icon: Icons.help_outline,
label: "FAQ's",
onTap: () => Navigator.pop(context),
onTap: () {
Navigator.pop(context);
context.push('/faq');
},
),
_buildMenuItem(
context,
@@ -165,55 +168,128 @@ class _MenuDrawer extends ConsumerWidget {
const SizedBox(height: 16),
const Divider(color: AppColors.divider, height: 1),
const SizedBox(height: 16),
_buildMenuItem(
context,
icon: Icons.person_outline,
label: 'Account Settings',
onTap: () => Navigator.pop(context),
),
_buildMenuItem(
context,
icon: Icons.notifications_outlined,
label: 'Notification Settings',
onTap: () => Navigator.pop(context),
),
const SizedBox(height: 16),
const Divider(color: AppColors.divider, height: 1),
const SizedBox(height: 24),
// Log Out button
SizedBox(
width: double.infinity,
child: OutlinedButton.icon(
onPressed: () {
Navigator.pop(context);
ref.read(authProvider.notifier).logout();
},
icon: const Icon(
Icons.logout,
color: AppColors.accentOrange,
size: 20,
),
label: const Text(
'Log Out',
style: TextStyle(
fontFamily: 'Fractul',
fontSize: 16,
fontWeight: FontWeight.w700,
if (ref.watch(authProvider).status ==
AuthStatus.authenticated) ...[
_buildMenuItem(
context,
icon: Icons.person_outline,
label: 'Account Settings',
onTap: () => Navigator.pop(context),
),
_buildMenuItem(
context,
icon: Icons.notifications_outlined,
label: 'Notification Settings',
onTap: () => Navigator.pop(context),
),
const SizedBox(height: 16),
const Divider(color: AppColors.divider, height: 1),
const SizedBox(height: 24),
// Log Out button
SizedBox(
width: double.infinity,
child: OutlinedButton.icon(
onPressed: () {
Navigator.pop(context);
ref.read(authProvider.notifier).logout();
},
icon: const Icon(
Icons.logout,
color: AppColors.accentOrange,
size: 20,
),
),
style: OutlinedButton.styleFrom(
padding: const EdgeInsets.symmetric(vertical: 16),
side: const BorderSide(
color: AppColors.accentOrange,
width: 1.5,
label: const Text(
'Log Out',
style: TextStyle(
fontFamily: 'Fractul',
fontSize: 16,
fontWeight: FontWeight.w700,
color: AppColors.accentOrange,
),
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15),
style: OutlinedButton.styleFrom(
padding:
const EdgeInsets.symmetric(vertical: 16),
side: const BorderSide(
color: AppColors.accentOrange,
width: 1.5,
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15),
),
),
),
),
),
] else ...[
// Login button
SizedBox(
width: double.infinity,
child: ElevatedButton.icon(
onPressed: () {
Navigator.pop(context);
context.push('/login');
},
icon: const Icon(
Icons.login,
color: Colors.white,
size: 20,
),
label: const Text(
'Log In',
style: TextStyle(
fontFamily: 'Fractul',
fontSize: 16,
fontWeight: FontWeight.w700,
color: Colors.white,
),
),
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.accentOrange,
padding:
const EdgeInsets.symmetric(vertical: 16),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15),
),
),
),
),
const SizedBox(height: 12),
// Sign Up button
SizedBox(
width: double.infinity,
child: OutlinedButton.icon(
onPressed: () {
Navigator.pop(context);
context.push('/signup');
},
icon: const Icon(
Icons.person_add_outlined,
color: AppColors.accentOrange,
size: 20,
),
label: const Text(
'Sign Up',
style: TextStyle(
fontFamily: 'Fractul',
fontSize: 16,
fontWeight: FontWeight.w700,
color: AppColors.accentOrange,
),
),
style: OutlinedButton.styleFrom(
padding:
const EdgeInsets.symmetric(vertical: 16),
side: const BorderSide(
color: AppColors.accentOrange,
width: 1.5,
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15),
),
),
),
),
],
],
),
),