Energymedia content manager base creada

This commit is contained in:
Abraham
2026-01-10 21:49:15 -08:00
parent 9adadbd354
commit 1a1049b653
3 changed files with 159 additions and 34 deletions

View File

@@ -1,10 +1,13 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:nethive_neo/providers/visual_state_provider.dart';
import 'package:nethive_neo/providers/user_provider.dart';
import 'package:nethive_neo/pages/videos/premium_dashboard_page.dart';
import 'package:nethive_neo/pages/videos/gestor_videos_page.dart';
import 'package:nethive_neo/theme/theme.dart';
import 'package:nethive_neo/helpers/globals.dart';
import 'package:gap/gap.dart';
import 'package:go_router/go_router.dart';
class VideosLayout extends StatefulWidget {
const VideosLayout({Key? key}) : super(key: key);
@@ -224,6 +227,12 @@ class _VideosLayoutState extends State<VideosLayout> {
},
),
),
// Botón de Logout
Container(
padding: const EdgeInsets.fromLTRB(16, 8, 16, 16),
child: _buildLogoutButton(),
),
],
),
);
@@ -496,6 +505,12 @@ class _VideosLayoutState extends State<VideosLayout> {
},
),
),
// Botón de Logout en drawer
Container(
padding: const EdgeInsets.fromLTRB(16, 8, 16, 16),
child: _buildLogoutButton(),
),
],
),
);
@@ -545,6 +560,123 @@ class _VideosLayoutState extends State<VideosLayout> {
),
);
}
Widget _buildLogoutButton() {
return MouseRegion(
cursor: SystemMouseCursors.click,
child: Material(
color: Colors.transparent,
child: InkWell(
onTap: () async {
final userState = Provider.of<UserState>(context, listen: false);
// Mostrar diálogo de confirmación
final confirm = await showDialog<bool>(
context: context,
builder: (context) => AlertDialog(
backgroundColor: AppTheme.of(context).secondaryBackground,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
),
title: Text(
'¿Cerrar Sesión?',
style: AppTheme.of(context).title3.override(
fontFamily: 'Poppins',
color: AppTheme.of(context).primaryText,
fontWeight: FontWeight.bold,
),
),
content: Text(
'¿Estás seguro de que deseas cerrar sesión?',
style: AppTheme.of(context).bodyText1.override(
fontFamily: 'Poppins',
color: AppTheme.of(context).secondaryText,
),
),
actions: [
TextButton(
onPressed: () => Navigator.of(context).pop(false),
child: Text(
'Cancelar',
style: TextStyle(
color: AppTheme.of(context).secondaryText,
fontFamily: 'Poppins',
),
),
),
Container(
decoration: BoxDecoration(
gradient: const LinearGradient(
colors: [
Color(0xFFFF2D2D),
Color(0xFFFF7A3D),
],
),
borderRadius: BorderRadius.circular(8),
),
child: TextButton(
onPressed: () => Navigator.of(context).pop(true),
child: const Text(
'Cerrar Sesión',
style: TextStyle(
color: Colors.white,
fontFamily: 'Poppins',
fontWeight: FontWeight.bold,
),
),
),
),
],
),
);
if (confirm == true) {
// Cerrar sesión
await supabase.auth.signOut();
userState.logout();
// Navegar al login
if (mounted) {
context.go('/login');
}
}
},
borderRadius: BorderRadius.circular(12),
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 16),
decoration: BoxDecoration(
color: AppTheme.of(context).error.withOpacity(0.1),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: AppTheme.of(context).error.withOpacity(0.3),
width: 1,
),
),
child: Row(
children: [
Icon(
Icons.logout,
color: AppTheme.of(context).error,
size: 24,
),
const Gap(16),
Expanded(
child: Text(
'Cerrar Sesión',
style: AppTheme.of(context).bodyText1.override(
fontFamily: 'Poppins',
color: AppTheme.of(context).error,
fontWeight: FontWeight.w500,
),
),
),
],
),
),
),
),
);
}
}
class MenuItem {