You are on page 1of 3

import 'package:auto_route/auto_route.

dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get_it/get_it.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:injectable/injectable.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sayapatri/core/routes/app_router.gr.dart';

import 'config/app_config.dart';
import 'config/app_env.dart';
import 'config/app_theme.dart';
import 'core/injection/injection.dart';
import 'core/routes/auth_guard.dart';

Future<void> _firebaseMessagingBackgroundHaldler(RemoteMessage message) async {


await Firebase.initializeApp();
if (kDebugMode) {
print('Handling a background message ${message.messageId}');
}
}

const AndroidNotificationChannel channel = AndroidNotificationChannel(


'high_importance_channel', 'High Importance Notification',
description: 'This chanel is used for important notification.',
importance: Importance.high);

final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =


FlutterLocalNotificationsPlugin();

void main() async {


WidgetsFlutterBinding.ensureInitialized();
EasyLoading.instance.backgroundColor = Colors.orangeAccent;
EasyLoading.instance.userInteractions = false;
EasyLoading.instance.dismissOnTap = false;
await AppEnv().injectFlavor();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHaldler);

await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()
?.createNotificationChannel(channel);

final storage = await HydratedStorage.build(


storageDirectory: await getTemporaryDirectory(),
);
GetIt.I<AppConfig>().initialize(
appName: 'Sayapatri',
baseUrl: 'https://rfid.goswivt.com/api/v1',
flavorName: Environment.prod);

runApp(const MyApp());
//for testing
// runApp(
// DevicePreview(
// enabled: !kReleaseMode,
// builder: (context) => MyApp(),
// ),
// );
}

class MyApp extends StatefulWidget {


const MyApp({Key? key}) : super(key: key);

@override
State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {


@override
void initState() {
super.initState();
var initializationSettingsAndroid =
const AndroidInitializationSettings('@mipmap/ic_launcher');
// var initializationSettings =
// InitializationSettings(android: initializationSettingsAndroid);
// flutterLocalNotificationsPlugin.initialize(initializationSettings,
// onSelectNotification: (String? payload) {
// if (payload != null) OpenFile.open(payload);
// });

FirebaseMessaging.onMessage.listen((RemoteMessage message) {
RemoteNotification? notification = message.notification;
AndroidNotification? android = message.notification?.android;
if (notification != null && android != null) {
flutterLocalNotificationsPlugin.show(
notification.hashCode,
notification.title,
notification.body,
NotificationDetails(
android: AndroidNotificationDetails(
channel.id,
channel.name,
channelDescription: channel.description,
// TODO add a proper drawable resource to android, for now using
// one that already exists in example app.
icon: 'launch_background',
),
),
);
}
});
}

final _appRouter = AppRouter(authGuard: getIt<AuthGuard>());

@override
Widget build(BuildContext context) {
return MaterialApp(
useInheritedMediaQuery: true,
debugShowCheckedModeBanner: false,
//for testing
// locale: DevicePreview.locale(context),
// theme: AppTheme.lightTheme,

builder: (context, child) {


//Disables device rotation to landscape.
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
return FlutterEasyLoading(
child: ScreenUtilInit(
designSize: const Size(428,
926), // The [Size] of the device in the design draft, in dp
builder: (_, __) => MaterialApp.router(
debugShowCheckedModeBanner: false,
theme: AppTheme.lightTheme,
themeMode: ThemeMode.light,
routeInformationParser: _appRouter.defaultRouteParser(),
routerDelegate: AutoRouterDelegate(_appRouter)),
),
);
},
);
}
}

You might also like