main function
Main function to initialize the app
Implementation
Future<void> main() async {
WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
/// GetX Local Storage
await GetStorage.init();
/// Await Splash until other items Load
FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
/// Initialize Firebase & Authentication Repository
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform)
.then((_) {
Get.put(AuthenticationRepository());
});
/// Ensure Firebase authentication is initialized before calling updateFcmTokenIfAuthenticated
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
/// Initialize Deep Links
await DeepLinkService.initDeepLinks();
/// Shared Preferences for Locale
final prefs = await SharedPreferences.getInstance();
final localeCode = prefs.getString('locale') ?? 'en';
/// Initialize Messaging & Local Notifications
// Android
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('@mipmap/launcher_icon');
// iOS TODO: Will not work without Developer Account because of APNS!!! So no push notifications on iOS!!!
const DarwinInitializationSettings initializationSettingsIOS =
DarwinInitializationSettings(
requestAlertPermission: true,
requestBadgePermission: true,
requestSoundPermission: true,
);
/// Initialize Flutter Local Notifications Plugin
final InitializationSettings initializationSettings = InitializationSettings(
android: initializationSettingsAndroid,
iOS: initializationSettingsIOS,
);
await flutterLocalNotificationsPlugin.initialize(initializationSettings);
// Register notification channel before any notifications are shown (Android)
const AndroidNotificationChannel channel = AndroidNotificationChannel(
'friend_request_channel',
'Friend Request Notifications',
description: 'Channel for friend request notifications',
importance: Importance.max,
);
await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()?.createNotificationChannel(channel);
/// Set preferred orientations to portrait only
/// This is important to ensure the app does not rotate
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
]).then((_) {
runApp(App(initialLocale: Locale(localeCode)));
});
/// Initialize Global Overlay
WidgetsBinding.instance.addPostFrameCallback((_) {
GlobalExerciseOverlay().init(Get.context!);
});
}