Files
prosappweb/lib/ui/shared/widgets/navbar_avatar.dart
T
Lizandro GuarnizoandClaude Sonnet 4.6 aeeeeb47fb fix: soporte siempre visible + perfil mejorado
- Setting: lee support_title/description/days/hours/email/phone
- SettingsProvider: fallback a Setting vacio si no hay datos en DB
- SupportView: guard para settings null
- Avatar: ui-avatars.com como imagen por defecto (con nombre)
- Perfil: seccion correo como ExpansionTile (acordeon)
  paso 1: email+contrasena+confirmar → Enviar codigo
  paso 2: ingresar codigo de 6 digitos → Verificar (verde)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-27 09:53:38 -05:00

40 lines
1.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:prosapp_web_app/providers/auth_provider.dart';
import 'package:prosapp_web_app/router/router.dart';
import 'package:prosapp_web_app/services/navigation_service.dart';
import 'package:provider/provider.dart';
class NavbarAvatar extends StatelessWidget {
const NavbarAvatar({super.key});
@override
Widget build(BuildContext context) {
final user = Provider.of<AuthProvider>(context).user!;
final hasPicture = user.picture != null && user.picture!.isNotEmpty;
final encoded = Uri.encodeComponent(user.name.isEmpty ? 'U' : user.name);
final fallbackUrl =
'https://ui-avatars.com/api/?name=$encoded&background=42A4EF&color=fff&size=80&bold=true&rounded=true';
final imageUrl = hasPicture ? user.picture! : fallbackUrl;
return MouseRegion(
cursor: SystemMouseCursors.click,
child: GestureDetector(
onTap: () => NavigationService.replaceTo(Flurorouter.profileRoute),
child: SizedBox(
width: 36,
height: 36,
child: ClipOval(
child: Image.network(
imageUrl,
fit: BoxFit.cover,
errorBuilder: (_, __, ___) =>
Image.network(fallbackUrl, fit: BoxFit.cover),
),
),
),
),
);
}
}