热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java屏幕点击_如何在点击推送通知时打开特定屏幕

由于xqwzts方法适用于在App上接收消息是开放状态,下面的示例将导航到特定页面,[该守则仅来自消防局信息插件示例代码,并导航到一个名为

由于@xqwzts方法适用于在App上接收消息是开放状态,

下面的示例将导航到特定页面,

[该守则仅来自消防局信息插件示例代码,并导航到一个名为页面,我们通过火灾控制台发送的数据]

//eg:if you give /Nexpage3 in status field then it will navigate to Nextpage3 of your App

80a46d49-30c8-47f8-8f45-6ffe654ced3a.png

了解2件事,FCM通知有2个部分

1st Message Title firebase Cloud 消息传递页面中的部分名为 Notification Data [当应用程序被缩减或关闭时,它将显示为通知]

2nd Message Title seciton which is in the Bottom of th webpage is called Message Data ,[它将显示在内部应用程序中作为通知或警报对话符合您的愿望]

STEPS 创建一个虚拟项目然后使用firebase消息插件,并在该框中将BMW Cars作为主题并单击订阅

现在转到你的控制台,然后发送一条消息,其中包含以下格式,它必须包含 Id 和 Status 键,因为我们正在解析Id和状态键,以便显示带有状态键的Vlaue的NextPage,但如果你更喜欢像 Headers 或正文这样的字段,那么你可以这样做但确保在你的flutter代码中解析 Map 值 .

//THIS IS A LITTLE BIT MODIFIED VERSION OF Example Code given in Firebase

//Messagaing Plugin

//WHEN U PASTE THE CODE IN UR VSCODE OR ANDROID STUDIO PLEASE Format the

//Document because it is aligned in single lines

import 'dart:async';

import 'package:firebase_messaging/firebase_messaging.dart';

import 'package:flutter/material.dart';

void main() {

runApp(

new MaterialApp(

home: new PushMessagingExample(),

routes: {

"/Nexpage1":(BuildContext context)=> new Nexpage1(),

"/Nexpage2":(BuildContext context)=> new Nexpage2(),

"/Nexpage3":(BuildContext context)=> new Nexpage3(),

} ),);}

//INITIAL PARAMETERS

String _homeScreenText = "Waiting for token...";

bool _topicButtonsDisabled = false;

final FirebaseMessaging _firebaseMessaging = new FirebaseMessaging();

final TextEditingController _topicController = new TextEditingController(text: 'topic');

final Map _items = {};

Item _itemForMessage(Map message) {

final String itemId = message['id'];

final Item item = _items.putIfAbsent(itemId, () => new Item(itemId: itemId))..status = message['status'];

return item;

}

//MAIN CLASS WHICH IS THE HOMEPAGE

class PushMessagingExample extends StatefulWidget {

@override

_PushMessagingExampleState createState() => new _PushMessagingExampleState();

}

class _PushMessagingExampleState extends State {

void _navigateToItemDetail(Map message) {

final String pagechooser= message['status'];

Navigator.pushNamed(context, pagechooser);

}

//CLEAR TOPIC

void _clearTopicText() {setState(() {_topicController.text = "";_topicButtonsDisabled = true;});}

//DIALOGUE

void _showItemDialog(Map message) {showDialog(context: context,builder: (_) => _buildDialog(context, _itemForMessage(message)),).then((bool shouldNavigate) {if (shouldNavigate == true) {_navigateToItemDetail(message);}});}

//WIDGET WHICH IS GOING TO BE CALLED IN THE ABOVE DIALOGUE

Widget _buildDialog(BuildContext context, Item item) {return new AlertDialog(content: new Text("Item ${item.itemId} has been updated"),actions: [new FlatButton(child: const Text('CLOSE'),onPressed: () {Navigator.pop(context, false);},),new FlatButton(child: const Text('SHOW'),onPressed: () {Navigator.pop(context, true);},),]);}

@override

void initState() {

super.initState();

_firebaseMessaging.configure(

onLaunch: (Map message) async { _navigateToItemDetail(message);},

onResume: (Map message) async { _navigateToItemDetail(message);},

onMessage: (Map message) async {_showItemDialog(message);},);

//GETTING TOKEN FOR TESTING MANUALY

_firebaseMessaging.getToken().then((String token) {assert(token != null);setState(() {_homeScreenText = "Push Messaging token: $token";});print(_homeScreenText);});}

@override

Widget build(BuildContext context) {

return new Scaffold(

appBar: new AppBar( title: const Text('Push Messaging Demo'),),

body: new Material(

child: new Column(

children: [

new Center(

child: new Text(_homeScreenText),

),

new Row(children: [

new Expanded(

child: new TextField(

controller: _topicController,

onChanged: (String v) {

setState(() {

_topicButtonsDisabled = v.isEmpty;

});

}),

),

new FlatButton(

child: const Text("subscribe"),

onPressed: _topicButtonsDisabled

? null

: () {

_firebaseMessaging

.subscribeToTopic(_topicController.text);

_clearTopicText();

},

),

new FlatButton(child: const Text("unsubscribe"),

onPressed: _topicButtonsDisabled? null: () { _firebaseMessaging.unsubscribeFromTopic(_topicController.text);

_clearTopicText();},),

])],),));}}

//THREE DUMMY CLASSES FOR TESTING PURPOSE

//PAGE1

class Nexpage1 extends StatefulWidget { @override _Nexpage1State createState() => _Nexpage1State();}

class _Nexpage1State extends State { @override Widget build(BuildContext context) { return Scaffold(body: new Center(child: new Text(" Page1"),));}}

//PAGE2

class Nexpage2 extends StatefulWidget { @override _Nexpage2State createState() => _Nexpage2State();}

class _Nexpage2State extends State { @override Widget build(BuildContext context) { return Scaffold( body: Center(child: new Text("2pending"),) ); }}

//PAGE3

class Nexpage3 extends StatefulWidget { @override _Nexpage3State createState() => _Nexpage3State();}

class _Nexpage3State extends State { @override Widget build(BuildContext context) { return Scaffold( body: Center(child: new Text("3connected"),) ); }}

//THIS IS THE CLASS WHICH IS USED TO PARSE THE INFORMATION

class Item {

Item({this.itemId});

final String itemId;

StreamController _controller = new StreamController.broadcast();

Stream get onChanged => _controller.stream;

String _status;

String get status => _status;

set status(String value) {

_status = value;

_controller.add(this);

}

static final Map> routes = >{};

Route get route {

final String routeName = '/detail/$itemId';

return routes.putIfAbsent(

routeName,

() => new MaterialPageRoute(

settings: new RouteSettings(name: routeName),

builder: (BuildContext context) => new Nexpage3(),

),

);

}

}



推荐阅读
author-avatar
和谐啄木鸟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有