cofounderella/lib/main.dart

76 lines
2.6 KiB
Dart

import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../constants.dart';
import '../services/auth/auth_gate.dart';
import '../themes/theme_provider.dart';
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:provider/provider.dart';
import 'firebase_options.dart';
import 'pages/conversations_page.dart';
import 'pages/liked_users_page.dart';
import 'pages/user_matching_page.dart';
import 'pages/user_profile_page.dart';
import 'services/swipe_stream_service.dart';
void main() async {
// Firebase stuff
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Init SharedPreferences
final prefs = await SharedPreferences.getInstance();
final isDarkMode = prefs.getBool(Constants.prefKeyThemeDarkMode) ?? false;
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('@mipmap/ic_launcher');
const InitializationSettings initializationSettings =
InitializationSettings(android: initializationSettingsAndroid);
await flutterLocalNotificationsPlugin.initialize(initializationSettings);
// Initialize the singleton instance with a dummy userId.
// The actual userId is set later in the HomePage.
SwipeStreamService()
.initialize('dummy_initial_user_id', flutterLocalNotificationsPlugin);
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) => ThemeProvider(initialIsDarkMode: isDarkMode)),
Provider<FlutterLocalNotificationsPlugin>.value(
value: flutterLocalNotificationsPlugin),
],
child: const MyApp(),
),
);
}
// Global key for navigation
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: Constants.appTitle,
theme: Provider.of<ThemeProvider>(context).themeData,
navigatorKey: navigatorKey,
home: const AuthGate(),
routes: {
'/discover': (context) => const UserMatchingPage(),
'/favorites': (context) => const LikedUsersPage(),
'/chats': (context) => ConversationsPage(),
'/profile': (context) => const UserProfilePage(),
},
);
}
}