Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

107 linhas
3.3 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. final Status checkLogin = await authState.authLog();
  61. context.goNamed('navigate', pathParameters: {'tab': '0'});
  62. } else {
  63. context.goNamed('login');
  64. }
  65. } else {
  66. context.goNamed('login');
  67. }
  68. });
  69. }
  70. Future<void> requestNotificationPermission() async {
  71. NotificationSettings settings = await messaging.requestPermission(
  72. alert: true,
  73. announcement: false,
  74. badge: true,
  75. carPlay: false,
  76. criticalAlert: false,
  77. provisional: false,
  78. sound: true,
  79. );
  80. if (settings.authorizationStatus == AuthorizationStatus.authorized) {
  81. // print('User granted permission');
  82. } else {
  83. // print('User declined or has not granted permission');
  84. }
  85. }
  86. Future<void> getToken() async {
  87. await messaging.getToken();
  88. }
  89. void setupMessageListener() {
  90. FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  91. // print('Message received: ${message.notification?.title}');
  92. // print('Message body: ${message.notification?.body}');
  93. // You can use a Dialog or Toast to display the message here
  94. });
  95. }
  96. }