热门标签 | 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(),

),

);

}

}



推荐阅读
  • 使用Flutternewintegration_test进行示例集成测试?回答首先在dev下的p ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • 数组的排序:数组本身有Arrays类中的sort()方法,这里写几种常见的排序方法。(1)冒泡排序法publicstaticvoidmain(String[]args ... [详细]
  • 面向对象之3:封装的总结及实现方法
    本文总结了面向对象中封装的概念和好处,以及在Java中如何实现封装。封装是将过程和数据用一个外壳隐藏起来,只能通过提供的接口进行访问。适当的封装可以提高程序的理解性和维护性,增强程序的安全性。在Java中,封装可以通过将属性私有化并使用权限修饰符来实现,同时可以通过方法来访问属性并加入限制条件。 ... [详细]
  • Flutter App 中创建模块并且依赖 Flutter
    在FlutterApp中打开对应的Android工程;并且向Android原生工程添加一个AndroidModule模块,并且在工程根settings. ... [详细]
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社区 版权所有