Flutter-Firebase Messaging Snackbar不显示 [英] Flutter - Firebase Messaging Snackbar not showing

查看:58
本文介绍了Flutter-Firebase Messaging Snackbar不显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是问题所在:应用程序在前台或后台(或已终止)都收到了应用程序发出的通知,但使用该应用程序时用于通知的小吃栏不起作用.我是新手,所以也许我犯了一些大错误.

This is the problem: notification is received by the app both with app in foreground or background (or terminated) but the snackbar for notification when the app is used doesn't work. I'm new in flutter so maybe I did some huge mistake.

我在下面显示我的代码.如果您想了解更多信息,请询问并感谢您的帮助!

I am showing my code below. If you want more information just ask and thanks for the help!

    // Import Package
    import 'dart:io';
    import 'package:app_gap_go/pages/admin/modifySingleMeeting.dart';
    import 'package:cloud_firestore/cloud_firestore.dart';
    import 'package:firebase_auth/firebase_auth.dart';
    import 'package:firebase_messaging/firebase_messaging.dart';
    import 'package:flutter/material.dart';
    // import 'package:flutter/rendering.dart';

    // Import Other Package
    import 'package:provider/provider.dart';

    // Import Pagine
    import './pages/wrapper.dart';
    import './pages/setting/settings.dart';
    import './pages/riunioni/riunioni.dart';
    import './pages/auth/register.dart';
    import './pages/admin/pannelloAdmin.dart';
    import './pages/admin/modifyMeetings.dart';

    // Import Utility
    import 'utility/themeData.dart';

    // Import Services
    import './services/authService.dart';

    // Import Models
    import './models/user.dart';

    void main() {
      // debugPaintSizeEnabled = true;   
      // debugPaintBaselinesEnabled = true;
      // debugPaintPointersEnabled = true; 
      runApp(MyApp());
    }

    class MyApp extends StatefulWidget {
      @override
      State<StatefulWidget> createState() {
        return _MyAppState();
      }
    }

    class _MyAppState extends State<MyApp> {
      final FirebaseMessaging _fcm = new FirebaseMessaging();
      final Firestore _db = Firestore.instance;
      final FirebaseAuth _auth = FirebaseAuth.instance;
      GlobalKey<ScaffoldState> scaffoldState = new GlobalKey<ScaffoldState>();

      // Request and save token
      Future _saveDeviceToken() async {
        String fcmToken = await _fcm.getToken();
        FirebaseUser user = await _auth.currentUser();
        if (fcmToken != null) {
          var tokenRef = _db
              .collection('utenti')
              .document(user.uid)
              .collection('tokens')
              .document(fcmToken);
          await tokenRef.setData({
            'token': fcmToken,
            'createdAt': FieldValue.serverTimestamp(),
            'platform': Platform.operatingSystem,
          });
        }
      }

      @override
      void initState() {
        _fcm.configure(
          onMessage: (Map<String, dynamic> message) async {
            print("onMessage: $message");

            final snackbar = SnackBar(
              content: Text(message['notification']['title']),
              action: SnackBarAction(
                label: 'Go',
                onPressed: () => null,
              ),
            );
            scaffoldState.currentState.showSnackBar(snackbar);
          },
          onResume: (Map<String, dynamic> message) async {
            print("onResume: $message");
          },
          onLaunch: (Map<String, dynamic> message) async {
            print("onLaunch: $message");
          },
        );
        if(Platform.isIOS) {
          _fcm.onIosSettingsRegistered.listen((data) {
            _saveDeviceToken();
          });
          _fcm.requestNotificationPermissions(IosNotificationSettings());
        } else {
          _saveDeviceToken();
        }
        _fcm.subscribeToTopic('meetings');
        super.initState();
      }

      @override
      Widget build(BuildContext context) {
        return StreamProvider<User>.value(
          key: scaffoldState,
          value: AuthService().user,
          child: MaterialApp(
            title: "GapGo",
            theme: themeApp,
            routes: {
              '/': (BuildContext context) => Wrapper(),
              '/register': (BuildContext context) => Register(),
              '/settings': (BuildContext context) => Settings(),
              '/riunioni': (BuildContext context) => Riunioni(),
              '/adminPanel': (BuildContext context) => PannelloAdmin(),
              '/modifyMeetings': (BuildContext context) => ModifyMeetings(),
              '/modifySingleMeeting': (BuildContext context) =>
                  ModifySingleMeeting(),
            },
          ),
        );
      }
    // End State
    }

推荐答案

我确实遇到了相同的问题,我既不能使用对话框也不能使用SnackBar,问题实际上是由于导航器没有当前上下文路线这是我的解决方案.

I literally faced the same issue, i neither could use a dialog nor a SnackBar, the problem is actually from not having the current context of your navigator route, here is my solution.

这篇关于Flutter-Firebase Messaging Snackbar不显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆