main function Null safety Main
안드로이드만 해당합니다. iOS는 휴대폰 자체적으로 알림을 받습니다. 앱이 종료되었을때 알림 이벤트를 수신하기위해 추가한 코드인데 flutterfire 버전이 변경되면서 이 코드가 없어도 알림을 수신하게 됩니다.
Implementation
// Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
// LogManager().addLog("${Flavor.PROD.name}) receive push message on backround: ${message.data}");
// await Firebase.initializeApp();
// NotificationService().firebaseMessagingBackgroundHandler(message);
// }
/// {@category Main}
Future<void> main() async {
/// 상용 환경으로 할당합니다.
AppConfig.appFlavor = Flavor.PROD;
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
/// _firebaseMessagingBackgroundHandler 주석을 참고하세요.
// try {
// FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
// } catch (e) {
// LogManager().addLog(e.toString());
// }
/// 앱이 실행중이고 앱 화면을 보고있을때에 알림이 오는 이벤트를 리스닝합니다.
/// 이 이벤트는 안드로이드에서만 실행됩니다. iOS에서는 fire되지 않습니다.
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
LogManager().addLog("receive push message on foreground: ${message.data}");
NotificationService().firebaseMessagingForegroundHandler(message);
});
runApp(
MultiProvider(
/// 프로바이더들을 정의합니다. 가독성과 관리의 용이함을 위해 아래와같이 분류합니다.
providers: [
/// 데이터들을 저장하는 프로바이더들은 이곳에 정의합니다.
ChangeNotifierProvider(create: (_) => FarmState()),
ChangeNotifierProvider(create: (_) => SensorState()),
ChangeNotifierProvider(create: (_) => GatewayState()),
ChangeNotifierProvider(create: (_) => ReportState()),
ChangeNotifierProvider(create: (_) => CowState()),
ChangeNotifierProvider(create: (_) => CowGroupState()),
ChangeNotifierProvider(create: (_) => UserState()),
/// 뷰모델 프로바이더들은 이곳에 정의합니다.
ChangeNotifierProvider(create: (_) => FarmLoadingScreenVM()),
ChangeNotifierProvider(create: (_) => CowCurrentStatusScreenVM()),
ChangeNotifierProvider(create: (_) => HomeScreenVM()),
ChangeNotifierProvider(create: (_) => SettingsScreenVM()),
ChangeNotifierProvider(create: (_) => CowSettingsScreenVM()),
ChangeNotifierProvider(create: (_) => FarmInfoScreenVM()),
ChangeNotifierProvider(create: (_) => ChatScreenVM()),
ChangeNotifierProvider(create: (_) => DiseaseObservationCreateScreenVM()),
ChangeNotifierProvider(create: (_) => DiseaseObservationListScreenVM()),
/// 그 외 기타 프로바이더들은 이곳에 정의합니다.
ChangeNotifierProvider(create: (_) => AppState()),
ChangeNotifierProvider(create: (_) => ScrollState()),
],
/// AppEntry는 최상위 위젯입니다.
child: AppEntry(),
),
);
}