diff --git a/lib/main.dart b/lib/main.dart index 210c91c..68a86a9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -45,7 +45,7 @@ class AppState extends StatelessWidget { ChangeNotifierProvider(lazy: false, create: (_) => SideMenuProvider()), ChangeNotifierProvider(lazy: false, create: (_) => ProfessionalProvider()), ChangeNotifierProvider(lazy: false, create: (_) => ThemeProvider()), - ChangeNotifierProvider(create: (_) => SettingsProvider()), + ChangeNotifierProvider(lazy: false, create: (_) => SettingsProvider()), ChangeNotifierProvider(create: (_) => ProfileFormProvider()), ChangeNotifierProvider(create: (_) => ProfessionalFormProvider()), ChangeNotifierProvider(create: (_) => ProfessionalsProvider()), diff --git a/lib/models/profesional.dart b/lib/models/profesional.dart index 0fb761b..1b76d71 100644 --- a/lib/models/profesional.dart +++ b/lib/models/profesional.dart @@ -6,6 +6,8 @@ import 'package:prosapp_web_app/models/schedules_entity.dart'; class Profesional { final String id; final String identification; + final String rethusCode; + final bool rethusValidated; final String address; final String aditionalAddress; final String profession; @@ -25,6 +27,8 @@ class Profesional { const Profesional({ required this.id, required this.identification, + required this.rethusCode, + required this.rethusValidated, required this.address, required this.aditionalAddress, required this.profession, @@ -103,6 +107,8 @@ class Profesional { return Profesional( id: doc['id'] as String, identification: (doc['identification'] as String?) ?? '', + rethusCode: (doc['rethus_code'] as String?) ?? '', + rethusValidated: (doc['rethus_validated'] as bool?) ?? false, address: (doc['address'] as String?) ?? '', aditionalAddress: (doc['aditional_address'] as String?) ?? '', profession: (doc['profession'] as String?) ?? '', @@ -124,6 +130,8 @@ class Profesional { Profesional copyWith({ String? id, String? identification, + String? rethusCode, + bool? rethusValidated, String? address, String? aditionalAddress, String? profession, @@ -143,6 +151,8 @@ class Profesional { return Profesional( id: id ?? this.id, identification: identification ?? this.identification, + rethusCode: rethusCode ?? this.rethusCode, + rethusValidated: rethusValidated ?? this.rethusValidated, address: address ?? this.address, aditionalAddress: aditionalAddress ?? this.aditionalAddress, profession: profession ?? this.profession, @@ -167,6 +177,8 @@ class Profesional { return { 'id': id, 'identification': identification, + 'rethus_code': rethusCode, + 'rethus_validated': rethusValidated, 'address': address, 'aditional_address': aditionalAddress, 'profession': profession, diff --git a/lib/providers/professional_form_provider.dart b/lib/providers/professional_form_provider.dart index 08a26e8..8814a06 100644 --- a/lib/providers/professional_form_provider.dart +++ b/lib/providers/professional_form_provider.dart @@ -16,6 +16,7 @@ class ProfessionalFormProvider with ChangeNotifier { copyProfesionalWith({ String? id, String? identification, + String? rethusCode, String? address, String? aditionalAddress, String? profession, @@ -35,6 +36,7 @@ class ProfessionalFormProvider with ChangeNotifier { profesional = Profesional( id: id ?? profesional!.id, identification: identification ?? profesional!.identification, + rethusCode: rethusCode ?? profesional!.rethusCode, address: address ?? profesional!.address, aditionalAddress: aditionalAddress ?? profesional!.aditionalAddress, profession: profession ?? profesional!.profession, diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 6bb3862..078a841 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -13,7 +13,7 @@ class SettingsProvider extends ChangeNotifier { getSettings() async { try { - final data = await _api.get('/settings'); + final data = await _api.get('/settings').timeout(const Duration(seconds: 10)); if (data != null) { settings = Setting.fromDocument(data as Map); } diff --git a/lib/ui/shared/navbar.dart b/lib/ui/shared/navbar.dart index 233ebb1..552d1c7 100644 --- a/lib/ui/shared/navbar.dart +++ b/lib/ui/shared/navbar.dart @@ -38,6 +38,9 @@ class _NavbarState extends State { final iconColor = isDark ? Colors.white70 : const Color(0xFF475569); final bgColor = isDark ? const Color(0xFF1E293B) : Colors.white; + final hoverColor = isDark + ? Colors.white.withOpacity(0.08) + : const Color(0xFF42A4EF).withOpacity(0.08); final reputation = scoreProvider.reputation; final pendingCount = @@ -60,6 +63,7 @@ class _NavbarState extends State { if (size.width <= 700) IconButton( icon: Icon(Icons.menu, color: iconColor, size: 22), + hoverColor: hoverColor, onPressed: SideMenuProvider.openMenu, ), @@ -85,6 +89,7 @@ class _NavbarState extends State { // Toggle día/noche IconButton( tooltip: isDark ? 'Modo día' : 'Modo noche', + hoverColor: hoverColor, icon: Icon( isDark ? Icons.light_mode : Icons.dark_mode, color: isDark ? Colors.amber : iconColor, @@ -99,6 +104,7 @@ class _NavbarState extends State { children: [ IconButton( tooltip: 'Notificaciones', + hoverColor: hoverColor, icon: Icon( pendingCount > 0 ? Icons.notifications_active diff --git a/lib/ui/views/request_professional_view.dart b/lib/ui/views/request_professional_view.dart index 7752f74..e784c74 100644 --- a/lib/ui/views/request_professional_view.dart +++ b/lib/ui/views/request_professional_view.dart @@ -157,6 +157,19 @@ class _ProfileViewFormState extends State<_ProfileViewForm> { ), ), const SizedBox(height: 10), + TextFormField( + initialValue: professional!.rethusCode, + onChanged: (value) { + professionalFormProvider.copyProfesionalWith( + rethusCode: value); + }, + decoration: CustomInputs.formInputDecoration( + hint: 'Código RETHUS (opcional)', + label: 'Código RETHUS', + icon: Icons.health_and_safety_outlined, + ), + ), + const SizedBox(height: 10), ElevatedButton.icon( onPressed: () async { try { @@ -210,13 +223,7 @@ class _ProfileViewFormState extends State<_ProfileViewForm> { items: professions.map((Profession profession) { return DropdownMenuItem( value: profession.name, - child: Text( - profession.name, - style: const TextStyle( - color: Colors.black, - fontWeight: FontWeight.normal, - ), - ), + child: Text(profession.name), ); }).toList(), onChanged: (value) { diff --git a/lib/ui/views/support_view.dart b/lib/ui/views/support_view.dart index 0992b84..f583f35 100644 --- a/lib/ui/views/support_view.dart +++ b/lib/ui/views/support_view.dart @@ -1,3 +1,4 @@ +import 'package:prosapp_web_app/models/setting.dart'; import 'package:prosapp_web_app/providers/settings_provider.dart'; import 'package:prosapp_web_app/ui/cards/white_card.dart'; import 'package:flutter/material.dart'; @@ -54,15 +55,7 @@ class SupportView extends StatelessWidget { return Consumer( builder: (context, settingsProvider, child) { - if (settingsProvider.isLoading) { - return const Center(child: CircularProgressIndicator()); - } - - if (settingsProvider.settings == null) { - return const Center(child: Text('No se pudieron cargar los datos de soporte.')); - } - - final settings = settingsProvider.settings!; + final settings = settingsProvider.settings ?? Setting.fromDocument({}); return ListView( physics: const ClampingScrollPhysics(),