replace: swap prosappweb content for prosapp_web_app (more complete version)

prosapp_web_app has chat, dashboard, calendar, support, 13 providers and
Fluro URL routing. Keep Dockerfile + nginx.conf from previous prosappweb.
Upgrade google_fonts 6.2.1 → 8.1.0 (Dart 3.12 compat fix).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-06-18 15:26:32 -05:00
co-authored by Claude Sonnet 4.6
parent 74a4f41902
commit 15175c1b91
334 changed files with 12914 additions and 25727 deletions
+39
View File
@@ -0,0 +1,39 @@
import 'package:prosapp_web_app/providers/auth_provider.dart';
import 'package:prosapp_web_app/ui/views/dashboard_view.dart';
import 'package:prosapp_web_app/ui/views/login_view.dart';
import 'package:prosapp_web_app/ui/views/phone_login_view.dart';
import 'package:prosapp_web_app/ui/views/register_view.dart';
import 'package:fluro/fluro.dart';
import 'package:provider/provider.dart';
class AdminHandlers {
static Handler phone = Handler(handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
if (authProvider.authStatus == AuthStatus.notAuthenticated) {
return const PhoneLoginView();
} else {
return const DashboardView();
}
});
static Handler login = Handler(handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
if (authProvider.authStatus == AuthStatus.notAuthenticated) {
return const LoginView();
} else {
return const DashboardView();
}
});
static Handler register = Handler(handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
if (authProvider.authStatus == AuthStatus.notAuthenticated) {
return const RegisterView();
} else {
return const DashboardView();
}
});
}
+404
View File
@@ -0,0 +1,404 @@
import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'package:prosapp_web_app/providers/auth_provider.dart';
import 'package:prosapp_web_app/providers/sidemenu_provider.dart';
import 'package:prosapp_web_app/router/router.dart';
import 'package:prosapp_web_app/ui/views/calendar_view.dart';
import 'package:prosapp_web_app/ui/views/chat_view.dart';
import 'package:prosapp_web_app/ui/views/email_view.dart';
import 'package:prosapp_web_app/ui/views/phone_view.dart';
import 'package:prosapp_web_app/ui/views/professional_calendar_view.dart';
import 'package:prosapp_web_app/ui/views/dashboard_view.dart';
import 'package:prosapp_web_app/ui/views/login_view.dart';
import 'package:prosapp_web_app/ui/views/no_page_found_view.dart';
import 'package:prosapp_web_app/ui/views/professional_profile_view.dart';
import 'package:prosapp_web_app/ui/views/professionals_view.dart';
import 'package:prosapp_web_app/ui/views/profile_view.dart';
import 'package:prosapp_web_app/ui/views/rating_view.dart';
import 'package:prosapp_web_app/ui/views/request_professional_view.dart';
import 'package:prosapp_web_app/ui/views/schedule_view.dart';
import 'package:prosapp_web_app/ui/views/service_view.dart';
import 'package:prosapp_web_app/ui/views/services_history_view.dart';
import 'package:prosapp_web_app/ui/views/services_requests_view.dart';
import 'package:prosapp_web_app/ui/views/services_view.dart';
import 'package:prosapp_web_app/ui/views/support_view.dart';
import 'package:provider/provider.dart';
class DashboardHandlers {
static Handler dashboard = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.dashboardRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const DashboardView();
} else {
return const LoginView();
}
},
);
static Handler support = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.supportRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const SupportView();
} else {
return const LoginView();
}
},
);
// users
static Handler profile = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.profileRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const ProfileView();
} else {
return const LoginView();
}
},
);
static Handler phone = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.phoneRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const PhoneView();
} else {
return const LoginView();
}
},
);
static Handler email = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.emailRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const EmailView();
} else {
return const LoginView();
}
},
);
static Handler professionals = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.professionalsRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const ProfessionalsView();
} else {
return const LoginView();
}
},
);
static Handler userServices = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.userServicesRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const ServicesView(type: 'user');
} else {
return const LoginView();
}
},
);
static Handler professionalServices = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.professionalServicesRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const ServicesView(type: 'professional');
} else {
return const LoginView();
}
},
);
static Handler userService = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.userServiceRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
if (params['uid']?.first != null) {
return ServiceView(type: 'user', serviceId: params['uid']!.first);
} else {
// return const NoPageFoundView();
return Center(child: Text('No se encontró el servicio.'));
}
} else {
return const LoginView();
}
},
);
static Handler professionalService = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.professionalServiceRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
if (params['uid']?.first != null) {
return ServiceView(
type: 'professional', serviceId: params['uid']!.first);
} else {
return Center(child: Text('No se encontró el servicio.'));
// return const NoPageFoundView();
}
} else {
return const LoginView();
}
},
);
static Handler userRating = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.userRatingRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
if (params['serviceId']?.first != null &&
params['professionalId']?.first != null) {
final serviceId = params['serviceId']!.first;
final professionalId = params['professionalId']!.first;
return RatingView(
type: 'user',
serviceId: serviceId,
professionalId: professionalId);
} else {
return const NoPageFoundView();
}
} else {
return const LoginView();
}
},
);
static Handler professionalRating = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.professionalRatingRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
if (params['serviceId']?.first != null &&
params['userId']?.first != null) {
final serviceId = params['serviceId']!.first;
final userId = params['userId']!.first;
return RatingView(
type: 'professional',
serviceId: serviceId,
professionalId: userId);
} else {
return const NoPageFoundView();
}
} else {
return const LoginView();
}
},
);
static Handler userChat = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.userChatRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
if (params['serviceId']?.first != null &&
params['professionalId']?.first != null) {
final serviceId = params['serviceId']!.first;
final professionalId = params['professionalId']!.first;
return ChatView(
type: 'user',
serviceId: serviceId,
professionalId: professionalId);
} else {
return const NoPageFoundView();
}
} else {
return const LoginView();
}
},
);
static Handler professionalChat = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.professionalChatRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
if (params['serviceId']?.first != null &&
params['userId']?.first != null) {
final serviceId = params['serviceId']!.first;
final userId = params['userId']!.first;
return ChatView(
type: 'professional',
serviceId: serviceId,
professionalId: userId);
} else {
return const NoPageFoundView();
}
} else {
return const LoginView();
}
},
);
static Handler userServicesHistory = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.userServicesHistoryRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const ServicesHistoryView(type: 'user');
} else {
return const LoginView();
}
},
);
static Handler professionalServicesRequests = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.professionalServicesRequestsRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const ServicesRequestsView();
} else {
return const LoginView();
}
},
);
static Handler professionalServicesHistory = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.professionalServicesHistoryRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const ServicesHistoryView(type: 'professional');
} else {
return const LoginView();
}
},
);
static Handler requestProfessional = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.requestProfessionalRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const RequestProfessionalView();
} else {
return const LoginView();
}
},
);
// static Handler servicesHistory = Handler(
// handlerFunc: (context, params) {
// final authProvider = Provider.of<AuthProvider>(context!);
// Provider.of<SideMenuProvider>(context, listen: false)
// .setCurrentPageUrl(Flurorouter.servicesRoute);
// if (authProvider.authStatus == AuthStatus.authenticated) {
// if (params['type']?.first != null &&
// (params['type']?.first == 'user' ||
// params['type']?.first == 'professional')) {
// return ServicesHistoryView(type: params['type']!.first);
// } else {
// return const NoPageFoundView();
// }
// } else {
// return const LoginView();
// }
// },
// );
// professionals
static Handler professionalProfile = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.professionalProfileRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const ProfessionalProfileView();
} else {
return const LoginView();
}
},
);
static Handler professionalSchedule = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.professionalProfileRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const ScheduleView();
} else {
return const LoginView();
}
},
);
static Handler calendar = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.calendarRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
if (params['uid']?.first != null) {
return CalendarView(professionalId: params['uid']!.first);
} else {
return const NoPageFoundView();
}
} else {
return const LoginView();
}
},
);
static Handler professionalCalendar = Handler(
handlerFunc: (context, params) {
final authProvider = Provider.of<AuthProvider>(context!);
Provider.of<SideMenuProvider>(context, listen: false)
.setCurrentPageUrl(Flurorouter.professionalCalendarRoute);
if (authProvider.authStatus == AuthStatus.authenticated) {
return const ProfessionalCalendarView();
} else {
return const LoginView();
}
},
);
}
+15
View File
@@ -0,0 +1,15 @@
import 'package:prosapp_web_app/providers/sidemenu_provider.dart';
import 'package:prosapp_web_app/ui/views/no_page_found_view.dart';
import 'package:fluro/fluro.dart';
import 'package:provider/provider.dart';
class NoPageFoundHandlers {
static Handler noPageFound = Handler(
handlerFunc: (context, params) {
Provider.of<SideMenuProvider>(context!, listen: false)
.setCurrentPageUrl('/404');
return const NoPageFoundView();
},
);
}
+196
View File
@@ -0,0 +1,196 @@
import 'package:prosapp_web_app/router/admin_handlers.dart';
import 'package:prosapp_web_app/router/dashboard_handlers.dart';
import 'package:prosapp_web_app/router/no_page_found_handlers.dart';
import 'package:fluro/fluro.dart';
class Flurorouter {
static final FluroRouter router = FluroRouter();
static String rootRoute = "/";
// Auth Router
static String phoneLoginRoute = "/auth/phone_login";
static String loginRoute = "/auth/login";
static String registerRoute = "/auth/register";
// Dashboard
static String dashboardRoute = "/dashboard";
static String supportRoute = "/dashboard/support";
// Users
static String profileRoute = "/dashboard/profile";
static String phoneRoute = "/dashboard/phone";
static String emailRoute = "/dashboard/email";
static String userServicesRoute = "/dashboard/user/services";
static String userServicesHistoryRoute = "/dashboard/user/services/history";
static String userServiceRoute = "/dashboard/user/service/:uid";
static String calendarRoute = "/dashboard/calendar/:uid";
static String requestProfessionalRoute = "/dashboard/request/professional";
static String userRatingRoute = "/dashboard/user/service/:serviceId/rating/:professionalId";
static String professionalRatingRoute = "/dashboard/professional/service/:serviceId/rating/:userId";
static String userChatRoute = "/dashboard/user/service/:serviceId/chat/:professionalId";
static String professionalChatRoute = "/dashboard/professional/service/:serviceId/chat/:userId";
// Professionals
static String professionalProfileRoute = "/dashboard/professional/profile";
static String professionalScheduleRoute = "/dashboard/professional/schedule";
static String professionalServicesRoute = "/dashboard/professional/services";
static String professionalServicesRequestsRoute =
"/dashboard/professional/requests";
static String professionalServicesHistoryRoute =
"/dashboard/professional/services/history";
static String professionalServiceRoute =
"/dashboard/professional/service/:uid";
static String professionalsRoute = "/dashboard/professionals";
static String professionalCalendarRoute = "/dashboard/professional/calendar";
static void configureRoutes() {
// Auth Routes
router.define(
rootRoute,
handler: AdminHandlers.phone,
transitionType: TransitionType.none,
);
router.define(
phoneLoginRoute,
handler: AdminHandlers.phone,
transitionType: TransitionType.none,
);
router.define(
loginRoute,
handler: AdminHandlers.login,
transitionType: TransitionType.none,
);
router.define(
registerRoute,
handler: AdminHandlers.register,
transitionType: TransitionType.none,
);
// Dashboard Routes
router.define(
dashboardRoute,
handler: DashboardHandlers.dashboard,
transitionType: TransitionType.none,
);
router.define(
supportRoute,
handler: DashboardHandlers.support,
transitionType: TransitionType.none,
);
// users
router.define(
profileRoute,
handler: DashboardHandlers.profile,
transitionType: TransitionType.none,
);
router.define(
phoneRoute,
handler: DashboardHandlers.phone,
transitionType: TransitionType.none,
);
router.define(
emailRoute,
handler: DashboardHandlers.email,
transitionType: TransitionType.none,
);
router.define(
professionalsRoute,
handler: DashboardHandlers.professionals,
transitionType: TransitionType.none,
);
router.define(
userServicesRoute,
handler: DashboardHandlers.userServices,
transitionType: TransitionType.none,
);
router.define(
userServicesHistoryRoute,
handler: DashboardHandlers.userServicesHistory,
transitionType: TransitionType.none,
);
router.define(
userServiceRoute,
handler: DashboardHandlers.userService,
transitionType: TransitionType.none,
);
router.define(
professionalServiceRoute,
handler: DashboardHandlers.professionalService,
transitionType: TransitionType.none,
);
router.define(
userRatingRoute,
handler: DashboardHandlers.userRating,
transitionType: TransitionType.none,
);
router.define(
professionalRatingRoute,
handler: DashboardHandlers.professionalRating,
transitionType: TransitionType.none,
);
router.define(
userChatRoute,
handler: DashboardHandlers.userChat,
transitionType: TransitionType.none,
);
router.define(
professionalChatRoute,
handler: DashboardHandlers.professionalChat,
transitionType: TransitionType.none,
);
router.define(
calendarRoute,
handler: DashboardHandlers.calendar,
transitionType: TransitionType.none,
);
router.define(
requestProfessionalRoute,
handler: DashboardHandlers.requestProfessional,
transitionType: TransitionType.none,
);
// profesionals
router.define(
professionalProfileRoute,
handler: DashboardHandlers.professionalProfile,
transitionType: TransitionType.none,
);
router.define(
professionalScheduleRoute,
handler: DashboardHandlers.professionalSchedule,
transitionType: TransitionType.none,
);
router.define(
professionalServicesRoute,
handler: DashboardHandlers.professionalServices,
transitionType: TransitionType.none,
);
router.define(
professionalServicesRequestsRoute,
handler: DashboardHandlers.professionalServicesRequests,
transitionType: TransitionType.none,
);
router.define(
professionalServicesHistoryRoute,
handler: DashboardHandlers.professionalServicesHistory,
transitionType: TransitionType.none,
);
router.define(
professionalCalendarRoute,
handler: DashboardHandlers.professionalCalendar,
transitionType: TransitionType.none,
);
// 404
router.notFoundHandler = NoPageFoundHandlers.noPageFound;
}
}