Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 当应用程序位于前台时,无法获取要显示的onMessage_Firebase_Flutter_Notifications_Firebase Cloud Messaging - Fatal编程技术网

Firebase 当应用程序位于前台时,无法获取要显示的onMessage

Firebase 当应用程序位于前台时,无法获取要显示的onMessage,firebase,flutter,notifications,firebase-cloud-messaging,Firebase,Flutter,Notifications,Firebase Cloud Messaging,我正在写一个应用程序,你可以按下一个按钮,它将发送一个“帮助”通知给每一个应用程序(这将是一个大约100人的封闭组)。我需要弹出通知,无论该应用程序处于何种状态,我有onResume和onLaunch排序,但我无法让它在应用程序位于前台时显示通知。有很多屏幕,我需要通知显示在任何屏幕上的用户 我试过很多教程,但就是不能让它工作。我在主页上的initState中有代码 void main() { SystemChrome.setPreferredOrientations([DeviceOrie

我正在写一个应用程序,你可以按下一个按钮,它将发送一个“帮助”通知给每一个应用程序(这将是一个大约100人的封闭组)。我需要弹出通知,无论该应用程序处于何种状态,我有onResume和onLaunch排序,但我无法让它在应用程序位于前台时显示通知。有很多屏幕,我需要通知显示在任何屏幕上的用户

我试过很多教程,但就是不能让它工作。我在主页上的initState中有代码

void main() {
  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
  FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =                    FlutterLocalNotificationsPlugin();
  @override
  void initState() {
super.initState();

var initializationSettingsAndroid =
new AndroidInitializationSettings('@mipmap/ic_launcher');
var initializationSettingsIOS = IOSInitializationSettings();
var initializationSettings = InitializationSettings(
    initializationSettingsAndroid, initializationSettingsIOS);
flutterLocalNotificationsPlugin.initialize(initializationSettings,
    onSelectNotification: onSelectNotification);

_firebaseMessaging.configure(
  onMessage: (Map<String, dynamic> message) async {
    print("onMessage: $message");

    showDialog(
      context: context,
      builder: (context) =>
          AlertDialog(
            content: ListTile(
              title: Text(message['notification']['title']),
              subtitle: Text(message['notification']['body']),
            ),
            actions: <Widget>[
              FlatButton(
                child: Text('Ok'),
                onPressed: () => Navigator.of(context).pop(),
              ),
            ],
          ),
    );
  },
  onLaunch: (Map<String, dynamic> message) async {
    print("onLaunch: $message");
    showDialog(
      context: context,
      builder: (context) =>
          AlertDialog(
            content: ListTile(
              title: Text(message['notification']['title']),
              subtitle: Text(message['notification']['body']),
            ),
            actions: <Widget>[
              FlatButton(
                child: Text('Ok'),
                onPressed: () => Navigator.of(context).pop(),
              ),
            ],
          ),
    );
  },
  onResume: (Map<String, dynamic> message) async {
    print("onResume: $message");
    showDialog(
      context: context,
      builder: (context) =>
          AlertDialog(
            content: ListTile(
              title: Text(message['notification']['title']),
              subtitle: Text(message['notification']['body']),
            ),
            actions: <Widget>[
              FlatButton(
                child: Text('Ok'),
                onPressed: () => Navigator.of(context).pop(),
              ),
            ],
          ),
    );
  },
);
Future onSelectNotification(String payload) async {
if (payload != null) {
  debugPrint('notification payload: ' + payload);
  var androidPlatformChannelSpecifics = AndroidNotificationDetails(
      'your channel id', 'your channel name', 'your channel description',
      importance: Importance.Max, priority: Priority.High,ticker:'ticker');
  var iOSPlatformChannelSpecifics = IOSNotificationDetails();
  var platformChannelSpecifics = NotificationDetails(
      androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
  await flutterLocalNotificationsPlugin.show(
      0, 'plain title', 'plain body', platformChannelSpecifics,
      payload: 'item x');
}
  }
    //  @override
  Widget build(BuildContext context) {
return MaterialApp(
  title: 'Benidorm or Bust',
  theme: ThemeData.dark().copyWith(
    primaryColor: Color(0xFF0A0E21),
    scaffoldBackgroundColor: Color(0xFF0A0E21),
  ),
  initialRoute: '/',
  routes: {
    '/': (context) => MyHomePage(),
    '/setup': (context) => Setup(),
    '/dayinit': (context) => Dayinit(),
    '/day1': (context) => Day1(),
    '/day2': (context) => Day2(),
    '/day3': (context) => Day3(),
    '/day4': (context) => Day4(),
    '/day5': (context) => Day5(),
    '/CheckList': (context) => CheckList(),
    '/eveinit': (context) => Eveinit(),
    'eve1eve': (context) => Eve1Eve(),

    // 'push':(context)=> Push(),
  },
);
  }

}
void main(){
SystemChrome.setPreferredOrientations([DeviceOrientation.GraphicUp]);
runApp(MyApp());
}
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
FirebaseMessaging_FirebaseMessaging=FirebaseMessaging();
flatterLocalNotificationsPlugin flatterLocalNotificationsPlugin=flatterLocalNotificationsPlugin();
@凌驾
void initState(){
super.initState();
var初始化设置和ROID=
新的AndroidInitializationSettings(“@mipmap/ic_launcher”);
var initializationSettingsIOS=IOSInitializationSettings();
var initializationSettings=初始化设置(
初始化设置和ROID,初始化设置SIOS);
FlatterLocalNotificationsPlugin.initialize(初始化设置,
onSelectNotification:onSelectNotification);
_firebaseMessaging.configure(
onMessage:(映射消息)异步{
打印(“onMessage:$message”);
显示对话框(
上下文:上下文,
生成器:(上下文)=>
警报对话框(
内容:ListTile(
标题:文本(消息['notification']['title']),
字幕:文本(消息['notification']['body']),
),
行动:[
扁平按钮(
子项:文本('Ok'),
onPressed:()=>Navigator.of(context.pop(),
),
],
),
);
},
onLaunch:(映射消息)异步{
打印(“onLaunch:$message”);
显示对话框(
上下文:上下文,
生成器:(上下文)=>
警报对话框(
内容:ListTile(
标题:文本(消息['notification']['title']),
字幕:文本(消息['notification']['body']),
),
行动:[
扁平按钮(
子项:文本('Ok'),
onPressed:()=>Navigator.of(context.pop(),
),
],
),
);
},
onResume:(映射消息)异步{
打印(“onResume:$message”);
显示对话框(
上下文:上下文,
生成器:(上下文)=>
警报对话框(
内容:ListTile(
标题:文本(消息['notification']['title']),
字幕:文本(消息['notification']['body']),
),
行动:[
扁平按钮(
子项:文本('Ok'),
onPressed:()=>Navigator.of(context.pop(),
),
],
),
);
},
);
未来onSelectNotification(字符串负载)异步{
如果(有效负载!=null){
debugPrint('通知有效负载:'+有效负载);
var androidPlatformChannelSpecifics=AndroidNotificationDetails(
“您的频道id”、“您的频道名称”、“您的频道描述”,
重要性:重要性。最大,优先级:优先级。高,股票代码:'ticker');
var iOSPlatformChannelSpecifics=ioNotificationDetails();
var platformChannelSpecifics=通知详细信息(
androidPlatformChannelSpecifics、iOSPlatformChannelSpecifics);
等待本地通知。显示(
0,“普通标题”,“普通正文”,平台通道详细信息,
有效载荷:“项目x”);
}
}
//@覆盖
小部件构建(构建上下文){
返回材料PP(
标题:“贝尼多姆还是半身像”,
主题:ThemeData.dark().copyWith(
primaryColor:Color(0xFF0A0E21),
脚手架背景颜色:颜色(0xFF0A0E21),
),
initialRoute:“/”,
路线:{
“/”:(上下文)=>MyHomePage(),
“/setup”:(上下文)=>setup(),
“/dayinit”:(上下文)=>dayinit(),
“/day1”:(上下文)=>day1(),
“/day2”:(上下文)=>day2(),
“/day3”:(上下文)=>day3(),
“/day4”:(上下文)=>day4(),
“/day5”:(上下文)=>day5(),
“/CheckList”:(上下文)=>CheckList(),
“/eveinit”:(上下文)=>eveinit(),
“eve1eve”:(上下文)=>eve1eve(),
//“推送”:(上下文)=>push(),
},
);
}
}

我没有收到任何错误,只是什么都没有发生。

我面临同样的问题,只要将Firebase相关代码从“应用程序”MyApp移动到MyHomePage小部件。在MyHomePage中,它将具有适当的上下文。 我用这个作为例子