main.dart 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // ignore_for_file: deprecated_member_use
  2. import 'dart:convert';
  3. import 'package:firebase_core/firebase_core.dart';
  4. import 'package:firebase_messaging/firebase_messaging.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:flutter_bloc/flutter_bloc.dart';
  7. import 'package:youtube/presentaion/cubit/auth/auth_cubit.dart';
  8. import 'package:youtube/presentaion/cubit/home/home_cubit.dart';
  9. import 'package:youtube/routes.dart';
  10. import 'package:youtube/services/fcm/firebase_notification_handler.dart';
  11. import 'package:youtube/shared/dio_helper.dart';
  12. import 'package:youtube/shared/network/cache_helper.dart';
  13. import 'package:youtube/shared/theme.dart';
  14. import 'shared/bloc_observer.dart';
  15. Future<void> main() async {
  16. WidgetsFlutterBinding.ensureInitialized();
  17. await CacheHelper.init();
  18. await Firebase.initializeApp();
  19. DioHelper.init();
  20. //Handle FCM background
  21. FirebaseMessaging.onBackgroundMessage(_backgroundHandler);
  22. BlocOverrides.runZoned(
  23. () => runApp(MyApp(
  24. appRouter: AppRouter(),
  25. )),
  26. blocObserver: AppBlocObserver());
  27. }
  28. class MyApp extends StatelessWidget {
  29. final AppRouter appRouter;
  30. const MyApp({Key? key, required this.appRouter}) : super(key: key);
  31. @override
  32. Widget build(BuildContext context) {
  33. return MultiBlocProvider(
  34. providers: [
  35. BlocProvider(
  36. create: (_) =>
  37. AuthCubit()..getUserData(uId: CacheHelper.getString(key: 'uId')),
  38. ),
  39. BlocProvider(
  40. create: (_) => HomeCubit()
  41. ..listenToInComingCalls()
  42. ..getUsersRealTime()
  43. ..getCallHistoryRealTime()
  44. ..initFcm(context)
  45. ..updateFcmToken(uId: CacheHelper.getString(key: 'uId')),
  46. ),
  47. ],
  48. child: MaterialApp(
  49. title: 'Firebase agora videochat',
  50. debugShowCheckedModeBanner: false,
  51. theme: appTheme,
  52. onGenerateRoute: appRouter.onGenerateRoute,
  53. ),
  54. );
  55. }
  56. }
  57. Future<void> _backgroundHandler(RemoteMessage message) async {
  58. await Firebase.initializeApp();
  59. await CacheHelper.init();
  60. if (message.data['type'] == 'call') {
  61. Map<String, dynamic> bodyMap = jsonDecode(message.data['body']);
  62. await CacheHelper.saveData(
  63. key: 'terminateIncomingCallData', value: jsonEncode(bodyMap));
  64. }
  65. FirebaseNotifications.showNotification(
  66. title: message.data['title'],
  67. body: message.data['body'],
  68. type: message.data['type']);
  69. }