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:
co-authored by
Claude Sonnet 4.6
parent
74a4f41902
commit
15175c1b91
+92
-104
@@ -1,46 +1,81 @@
|
||||
import 'package:firebase_core/firebase_core.dart';
|
||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:intl/date_symbol_data_local.dart';
|
||||
import 'package:prosappco/src/authentication/authentication_repository.dart';
|
||||
import 'package:prosappco/src/presentation/screens/service_web.dart';
|
||||
import 'package:prosappco/src/providers/user_provider.dart';
|
||||
import 'package:prosappco/src/presentation/screens/calendar.dart';
|
||||
import 'package:prosappco/src/presentation/screens/city.dart';
|
||||
import 'package:prosappco/src/presentation/screens/login/login.dart';
|
||||
import 'package:prosappco/src/presentation/screens/login/login_email.dart';
|
||||
import 'package:prosappco/src/presentation/screens/my_services.dart';
|
||||
import 'package:prosappco/src/presentation/screens/my_services_pro.dart';
|
||||
import 'package:prosappco/src/presentation/screens/new_number.dart';
|
||||
import 'package:prosappco/src/presentation/screens/new_password.dart';
|
||||
import 'package:prosappco/src/presentation/screens/profession.dart';
|
||||
import 'package:prosappco/src/presentation/screens/professional_profile.dart';
|
||||
import 'package:prosappco/src/presentation/screens/professional_revision.dart';
|
||||
import 'package:prosappco/src/presentation/screens/profile/profile.dart';
|
||||
import 'package:prosappco/src/presentation/screens/profile/profile_pro.dart';
|
||||
import 'package:prosappco/src/presentation/screens/register/register.dart';
|
||||
import 'package:prosappco/src/presentation/screens/request_sent.dart';
|
||||
import 'package:prosappco/src/presentation/screens/reset_password/reset_password.dart';
|
||||
import 'package:prosappco/src/presentation/screens/map/service.dart';
|
||||
import 'package:prosappco/src/presentation/screens/solicitudes.dart';
|
||||
import 'package:flutter/foundation.dart' show kIsWeb;
|
||||
import 'package:prosapp_web_app/providers/auth_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/calendar_services_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/chat_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/cities_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/professional_detail_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/professional_form_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/professional_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/professionals_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/professions_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/profile_form_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/score_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/services_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/settings_provider.dart';
|
||||
import 'package:prosapp_web_app/providers/sidemenu_provider.dart';
|
||||
import 'package:prosapp_web_app/router/router.dart';
|
||||
import 'package:prosapp_web_app/services/local_storage.dart';
|
||||
import 'package:prosapp_web_app/services/navigation_service.dart';
|
||||
import 'package:prosapp_web_app/services/notifications_service.dart';
|
||||
import 'package:prosapp_web_app/ui/layouts/auth/auth_layout.dart';
|
||||
import 'package:prosapp_web_app/ui/layouts/dashboard/dashboard_layout.dart';
|
||||
import 'package:prosapp_web_app/ui/layouts/splash/splash_layout.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:prosappco/src/utils/app_navigator.dart';
|
||||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
// Trigger singleton init which schedules _checkSession after first frame
|
||||
AuthenticationRepository.instance;
|
||||
await dotenv.load(fileName: ".env");
|
||||
|
||||
await initializeDateFormatting('es_MX', null);
|
||||
await Firebase.initializeApp(
|
||||
options: FirebaseOptions(
|
||||
apiKey: dotenv.env['API_KEY']!,
|
||||
authDomain: dotenv.env['AUTH_DOMAIN'],
|
||||
projectId: dotenv.env['PROJECT_ID']!,
|
||||
storageBucket: dotenv.env['STORAGE_BUCKET'],
|
||||
messagingSenderId: dotenv.env['MESSAGING_SENDER_ID']!,
|
||||
appId: dotenv.env['APP_ID']!,
|
||||
measurementId: dotenv.env['MEASUREMENT_ID'],
|
||||
),
|
||||
);
|
||||
|
||||
SystemChrome.setPreferredOrientations([
|
||||
DeviceOrientation.portraitUp,
|
||||
DeviceOrientation.portraitDown,
|
||||
]);
|
||||
await LocalStorage.configurePrefs();
|
||||
|
||||
runApp(const MyApp());
|
||||
await initializeDateFormatting('es_ES', null);
|
||||
|
||||
Flurorouter.configureRoutes();
|
||||
|
||||
runApp(const AppState());
|
||||
}
|
||||
|
||||
class AppState extends StatelessWidget {
|
||||
const AppState({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(lazy: false, create: (_) => AuthProvider()),
|
||||
ChangeNotifierProvider(lazy: false, create: (_) => SideMenuProvider()),
|
||||
ChangeNotifierProvider(lazy: false, create: (_) => ProfessionalProvider()),
|
||||
ChangeNotifierProvider(create: (_) => SettingsProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ProfileFormProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ProfessionalFormProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ProfessionalsProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ServicesProvider()),
|
||||
ChangeNotifierProvider(create: (_) => CalendarServicesProvider()),
|
||||
ChangeNotifierProvider(create: (_) => CitiesProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ProfessionsProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ProfessionalDetailProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ScoreProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ChatProvider()),
|
||||
],
|
||||
child: const MyApp(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
@@ -48,79 +83,32 @@ class MyApp extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(create: (_) => UserProvider()),
|
||||
],
|
||||
child: MaterialApp(
|
||||
navigatorKey: appNavigatorKey,
|
||||
theme: ThemeData(fontFamily: 'Poppins'),
|
||||
debugShowCheckedModeBanner: false,
|
||||
localizationsDelegates: const [
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
],
|
||||
supportedLocales: const [Locale('es', 'US')],
|
||||
title: 'ProsApp',
|
||||
initialRoute: '/',
|
||||
routes: {
|
||||
'/': (context) => const LoginScreen(),
|
||||
'/splash': (context) => const SplashScreen(),
|
||||
'/login': (context) => const LoginEmailScreen(),
|
||||
'/profile': (context) => const ProfileScreen(),
|
||||
'/register': (context) => const RegisterScreen(),
|
||||
'/city': (context) => const CityScreen(),
|
||||
'/profession': (context) => const ProfessionScreen(),
|
||||
'/newNumber': (context) => const NewNumberScreen(),
|
||||
'/profesionalRevision': (context) => const ProfessionalRevisionScreen(),
|
||||
'/profesionalProfile': (context) => const ProfessionalProfileScreen(),
|
||||
'/solicitudEnviada': (context) => const RequestSentScreen(),
|
||||
'/nuevaPassword': (context) => NewPasswordScreen(),
|
||||
'/servicio': (context) => const ServiceScreen(),
|
||||
'/servicioWeb': (context) => const ServiceWebScreen(),
|
||||
'/profilePro': (context) => const ProfileProScreen(),
|
||||
'/calendar': (context) => const CalendarScreen(),
|
||||
'/solicitud': (context) => SolicitudScreen(),
|
||||
'/misserviciospro': (context) => MyServicesProScreen(),
|
||||
'/misservicios': (context) => MyServicesScreen(),
|
||||
'/resetpassword': (context) => const ResetPasswordScreen(),
|
||||
},
|
||||
onGenerateRoute: (settings) {
|
||||
throw Exception('Ruta desconocida: ${settings.name}');
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
return MaterialApp(
|
||||
debugShowCheckedModeBanner: false,
|
||||
title: 'ProsApp',
|
||||
initialRoute: '/',
|
||||
onGenerateRoute: Flurorouter.router.generator,
|
||||
navigatorKey: NavigationService.navigatorKey,
|
||||
scaffoldMessengerKey: NotificationsService.messengerKey,
|
||||
builder: (_, child) {
|
||||
final authProvider = Provider.of<AuthProvider>(context);
|
||||
|
||||
class SplashScreen extends StatefulWidget {
|
||||
const SplashScreen({super.key});
|
||||
if (authProvider.authStatus == AuthStatus.checking) {
|
||||
return const SplashLayout();
|
||||
}
|
||||
|
||||
@override
|
||||
State<SplashScreen> createState() => _SplashScreenState();
|
||||
}
|
||||
|
||||
class _SplashScreenState extends State<SplashScreen> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
if (kIsWeb) {
|
||||
Future.delayed(const Duration(seconds: 3), () {
|
||||
Navigator.pushReplacement(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => const LoginScreen()),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.blue,
|
||||
body: Center(
|
||||
child: kIsWeb ? Image.asset('/images/splash.png') : const LoginScreen(),
|
||||
if (authProvider.authStatus == AuthStatus.authenticated) {
|
||||
return DashboardLayout(child: child!);
|
||||
} else {
|
||||
return AuthLayout(child: child!);
|
||||
}
|
||||
},
|
||||
theme: ThemeData.light().copyWith(
|
||||
scrollbarTheme: const ScrollbarThemeData().copyWith(
|
||||
thumbColor: WidgetStateProperty.all(
|
||||
Colors.grey.withOpacity(0.5),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user