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

),

);

}

}



推荐阅读
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • Spring Cloud Config 使用 Vault 作为配置存储
    本文探讨了如何在Spring Cloud Config中集成HashiCorp Vault作为配置存储解决方案,基于Spring Cloud Hoxton.RELEASE及Spring Boot 2.2.1.RELEASE版本。文章还提供了详细的配置示例和实践建议。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • 本文详细介绍了如何在 Android 中使用值动画(ValueAnimator)来动态调整 ImageView 的高度,并探讨了相关的关键属性和方法,包括图片填充后的高度、原始图片高度、动画变化因子以及布局重置等。 ... [详细]
  • NB:我看到我的草稿中已有将近两年的教程,所以我决定将其发布。在本教程中,我将构建一个简单的reactJs应用程序,该应用程 ... [详细]
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社区 版权所有