25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

106 lines
3.2 KiB

  1. import 'package:firebase_messaging/firebase_messaging.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:go_router/go_router.dart';
  4. import 'package:provider/provider.dart';
  5. import 'package:qadirneyriz/config/config.dart';
  6. import 'package:qadirneyriz/global/global_state/global_state.dart';
  7. import 'package:qadirneyriz/main.dart';
  8. import 'package:qadirneyriz/screens/auth/state/state.dart';
  9. import 'package:qadirneyriz/setting/setting.dart';
  10. import 'package:qadirneyriz/utils/enums/status.dart';
  11. import 'package:qadirneyriz/widgets/custom_background.dart';
  12. import 'package:qadirneyriz/widgets/loading_widget.dart';
  13. class SplashScreen extends StatefulWidget {
  14. const SplashScreen({super.key});
  15. @override
  16. State<SplashScreen> createState() => _SplashScreenState();
  17. }
  18. class _SplashScreenState extends State<SplashScreen> {
  19. late AuthState authState;
  20. late GlobalState globalState;
  21. @override
  22. void initState() {
  23. authState = Provider.of<AuthState>(context, listen: false);
  24. globalState = Provider.of<GlobalState>(context, listen: false);
  25. super.initState();
  26. checkUser(authState: authState, globalState: globalState);
  27. }
  28. @override
  29. Widget build(BuildContext context) {
  30. return Consumer<AuthState>(
  31. builder: (context, value, child) {
  32. return Scaffold(
  33. body: CustomBackground(
  34. child: Column(
  35. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  36. children: [
  37. Spacer(),
  38. LoadingWidget(
  39. color: config.ui.mainGreen,
  40. size: 30,
  41. ),
  42. ],
  43. ),
  44. ),
  45. );
  46. },
  47. );
  48. }
  49. void checkUser(
  50. {required AuthState authState, required GlobalState globalState}) async {
  51. await requestNotificationPermission();
  52. getToken();
  53. setupMessageListener();
  54. String token = setting.userLocalDb.getUser().token ?? '';
  55. Future.delayed(const Duration(seconds: 4), () async {
  56. final Status logoImagesStatus = await globalState.getLogoImages();
  57. if (token != '') {
  58. final Status checkLogin = await authState.CheckLogin();
  59. if (checkLogin == Status.ready) {
  60. context.goNamed('navigate', pathParameters: {'tab': '0'});
  61. } else {
  62. context.goNamed('login');
  63. }
  64. } else {
  65. context.goNamed('login');
  66. }
  67. });
  68. }
  69. Future<void> requestNotificationPermission() async {
  70. NotificationSettings settings = await messaging.requestPermission(
  71. alert: true,
  72. announcement: false,
  73. badge: true,
  74. carPlay: false,
  75. criticalAlert: false,
  76. provisional: false,
  77. sound: true,
  78. );
  79. if (settings.authorizationStatus == AuthorizationStatus.authorized) {
  80. // print('User granted permission');
  81. } else {
  82. // print('User declined or has not granted permission');
  83. }
  84. }
  85. Future<void> getToken() async {
  86. await messaging.getToken();
  87. }
  88. void setupMessageListener() {
  89. FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  90. // print('Message received: ${message.notification?.title}');
  91. // print('Message body: ${message.notification?.body}');
  92. // You can use a Dialog or Toast to display the message here
  93. });
  94. }
  95. }