Initial commit: Eventify frontend

This commit is contained in:
Rishad7594
2026-01-31 15:23:18 +05:30
commit b41cf6cc58
193 changed files with 12401 additions and 0 deletions

149
lib/main.dart Normal file
View File

@@ -0,0 +1,149 @@
// lib/main.dart
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.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 'core/theme_manager.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await ThemeManager.init(); // load saved theme preference
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// Breakpoint used across app: >= => desktop/tablet UI, < => mobile UI
static const double desktopBreakpoint = 820;
// Optional: reuse your branded blue swatch if you prefer; simplified here.
static const MaterialColor primarySwatch = MaterialColor(
0xFF0B63D6,
<int, Color>{
50: Color(0xFFEAF4FF),
100: Color(0xFFD6EBFF),
200: Color(0xFFADD6FF),
300: Color(0xFF85C1FF),
400: Color(0xFF4FA6FF),
500: Color(0xFF0B63D6),
600: Color(0xFF0959C0),
700: Color(0xFF074EA6),
800: Color(0xFF05358D),
900: Color(0xFF04256E),
},
);
ThemeData _lightTheme() {
return ThemeData(
brightness: Brightness.light,
primarySwatch: primarySwatch,
scaffoldBackgroundColor: const Color(0xFFF7F5FB),
appBarTheme: const AppBarTheme(
backgroundColor: Colors.white,
foregroundColor: Colors.black87,
elevation: 0,
),
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF0B63D6),
foregroundColor: Colors.white,
),
),
cardColor: Colors.white,
useMaterial3: false,
);
}
ThemeData _darkTheme() {
// Basic dark theme based on your sample — tweak colors as desired
return ThemeData(
brightness: Brightness.dark,
primarySwatch: primarySwatch,
scaffoldBackgroundColor: const Color(0xFF0B1220),
appBarTheme: const AppBarTheme(
backgroundColor: Color(0xFF0B1220),
foregroundColor: Colors.white,
elevation: 0,
),
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(backgroundColor: const Color(0xFF0B63D6)),
),
cardColor: const Color(0xFF0E1620),
textTheme: ThemeData.dark().textTheme,
useMaterial3: false,
);
}
@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(),
);
},
);
}
}
class StartupScreen extends StatefulWidget {
const StartupScreen({Key? key}) : super(key: key);
@override
State<StartupScreen> createState() => _StartupScreenState();
}
class _StartupScreenState extends State<StartupScreen> {
bool? _loggedIn;
@override
void initState() {
super.initState();
_loadLoginState();
}
Future<void> _loadLoginState() async {
final prefs = await SharedPreferences.getInstance();
final hasEmail = prefs.getString('email') != null && prefs.getString('email')!.isNotEmpty;
setState(() => _loggedIn = hasEmail);
}
@override
Widget build(BuildContext context) {
// While we check local storage show a loader
if (_loggedIn == null) {
return const Scaffold(
body: Center(child: CircularProgressIndicator()),
);
}
// Use LayoutBuilder so we can inspect the actual window width and choose the proper login/home variant.
return LayoutBuilder(builder: (context, constraints) {
final width = constraints.maxWidth;
final isDesktop = width >= MyApp.desktopBreakpoint;
// If the user is already logged in, show responsive home (mobile or desktop)
if (_loggedIn == true) {
return ResponsiveLayout(
mobile: HomeScreen(),
desktop: const HomeDesktopScreen(),
);
}
// Not logged in → show login appropriate for the window size
return isDesktop ? const DesktopLoginScreen() : const LoginScreen();
});
}
}