cofounderella/lib/main.dart

108 lines
3.7 KiB
Dart
Raw Permalink Normal View History

import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:shared_preferences/shared_preferences.dart';
2024-05-15 13:35:01 +02:00
import '../constants.dart';
import '../services/auth/auth_gate.dart';
import '../themes/theme_provider.dart';
2024-04-29 14:36:25 +02:00
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:provider/provider.dart';
2024-04-29 14:36:25 +02:00
import 'firebase_options.dart';
2024-06-07 16:58:29 +02:00
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';
import 'settings/settings_provider.dart';
2024-04-29 14:36:25 +02:00
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 onlySameCountry = prefs.getBool(Constants.prefKeySameCountry) ?? false;
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()?.requestNotificationsPermission();
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('@mipmap/ic_launcher');
const InitializationSettings initializationSettings =
InitializationSettings(android: initializationSettingsAndroid);
2024-07-12 22:32:07 +02:00
await flutterLocalNotificationsPlugin.initialize(initializationSettings,
onDidReceiveNotificationResponse: (NotificationResponse response) {
// Handle the notification tap
if (response.payload != null) {
Navigator.push(
navigatorKey.currentState!.context,
MaterialPageRoute(
builder: (BuildContext context) => UserProfilePage(
userId: response.payload,
titleText: 'Your new Match',
),
),
);
}
});
// create notification channel
const channel = AndroidNotificationChannel(
'new_match_info_channel_id',
'New Match Info Channel',
);
flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()
?.createNotificationChannel(channel);
// 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),
ChangeNotifierProvider(
create: (context) =>
SettingsProvider(showSameCountry: onlySameCountry),
),
],
child: const MyApp(),
),
);
2024-04-29 14:36:25 +02:00
}
// Global key for navigation
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
2024-04-29 14:36:25 +02:00
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
2024-05-05 10:26:49 +02:00
title: Constants.appTitle,
theme: Provider.of<ThemeProvider>(context).themeData,
navigatorKey: navigatorKey,
2024-04-29 14:36:25 +02:00
home: const AuthGate(),
2024-06-07 16:58:29 +02:00
routes: {
'/discover': (context) => const UserMatchingPage(),
'/favorites': (context) => const LikedUsersPage(),
'/chats': (context) => ConversationsPage(),
'/profile': (context) => const UserProfilePage(),
},
2024-04-29 14:36:25 +02:00
);
}
}