feat: Phase 1 critical gaps — gamification API, Razorpay checkout, Google OAuth, notifications

- Fix gamification endpoints to use Node.js server (app.eventifyplus.com)
- Replace 6 mock gamification methods with real API calls (dashboard, leaderboard, shop, redeem, submit)
- Add booking models, service, payment service (Razorpay), checkout provider
- Add 3-step CheckoutScreen with Razorpay native modal integration
- Add Google OAuth login (Flutter + Django backend)
- Add full notifications system (Django model + 3 endpoints + Flutter UI)
- Register CheckoutProvider, NotificationProvider in main.dart MultiProvider
- Wire notification bell in HomeScreen app bar
- Add razorpay_flutter ^1.3.7 and google_sign_in ^6.2.2 packages
This commit is contained in:
2026-04-04 15:46:53 +05:30
parent bc12fe70aa
commit 8955febd00
24 changed files with 1663 additions and 164 deletions

View File

@@ -2,17 +2,24 @@
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:provider/provider.dart';
import 'screens/home_screen.dart';
import 'screens/home_desktop_screen.dart';
import 'screens/login_screen.dart';
import 'screens/desktop_login_screen.dart';
import 'screens/responsive_layout.dart'; // keep this path if your file is under lib/screens/
import 'screens/responsive_layout.dart';
import 'core/theme_manager.dart';
import 'core/analytics/posthog_service.dart';
import 'features/auth/providers/auth_provider.dart';
import 'features/gamification/providers/gamification_provider.dart';
import 'features/booking/providers/checkout_provider.dart';
import 'features/notifications/providers/notification_provider.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await ThemeManager.init(); // load saved theme preference
await PostHogService.instance.init();
// Increase image cache for smoother scrolling and faster re-renders
PaintingBinding.instance.imageCache.maximumSize = 500;
@@ -90,18 +97,26 @@ class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ValueListenableBuilder<ThemeMode>(
valueListenable: ThemeManager.themeMode,
builder: (context, mode, _) {
return MaterialApp(
title: 'Event App',
debugShowCheckedModeBanner: false,
theme: _lightTheme(),
darkTheme: _darkTheme(),
themeMode: mode,
home: const StartupScreen(),
);
},
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => AuthProvider()),
ChangeNotifierProvider(create: (_) => GamificationProvider()),
ChangeNotifierProvider(create: (_) => CheckoutProvider()),
ChangeNotifierProvider(create: (_) => NotificationProvider()),
],
child: ValueListenableBuilder<ThemeMode>(
valueListenable: ThemeManager.themeMode,
builder: (context, mode, _) {
return MaterialApp(
title: 'Event App',
debugShowCheckedModeBanner: false,
theme: _lightTheme(),
darkTheme: _darkTheme(),
themeMode: mode,
home: const StartupScreen(),
);
},
),
);
}
}