此博文要实现的通知栏的消息推送如下图所示:
通知栏的消息推送可简单分为本地消息推送和网络消息推送。
这里主要介绍的是本地消息推送。
使用的package是官方发布的Flutter_local_notifications,版本是3.0.3,官方地址如下:
https://pub.flutter-io.cn/packages/flutter_local_notifications
下面介绍其简单的使用方法:
1、首先获取package:
在pubspec.yaml中添加
dependencies:
Flutter_local_notifications: ^0.4.4+2
执行package get。
2、添加安卓权限:
在安卓文件夹中的app\src\profile\AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
进行初始化:
final FlutterlocalnotificationsPlugin FlutterlocalnotificationsPlugin = FlutterlocalnotificationsPlugin();
@override
void initState() {
super.initState();
var android = new AndroidInitializationSettings('@mipmap/ic_launcher');
final InitializationSettings initializationSettings = InitializationSettings(android: android);
FlutterlocalnotificationsPlugin.initialize(initializationSettings,);
}
Future<void> _showNotification() async {
const AndroidNotificationDetails androidplatformChannelSpecifics =
AndroidNotificationDetails(
'your channel id', 'your channel name', 'your channel description',
importance: Importance.max,
priority: Priority.high,
ticker: 'ticker');
const NotificationDetails platformChannelSpecifics = NotificationDetails(android: androidplatformChannelSpecifics);
await FlutterlocalnotificationsPlugin.show(0, 'plain title', 'plain body', platformChannelSpecifics,payload: 'item x');
}
上边的 ‘your channel id’, ‘your channel name’, ‘your channel description’ 是需要修改的,id是一个应用可以有多个通知;name将在通知设置告诉用户是何种通知;description是该通知的描述。
plain title是通知的标题,也需要按需修改,plain body是通知的内容,按需修改。
3、调用通知:
onpressed: () async {
await _showNotification();
}
4、通知栏通知点击后的需要执行的操作:
修改初始化时的该句参数如下:
await FlutterlocalnotificationsPlugin.initialize(initializationSettings,
onSelectNotification: selectNotification);
- 需要注意的是使用await后就不能存放到 void initState() {} 函数中了,需要单独领出来。
同时实现对应函数:
Future selectNotification(String payload) async {
if (payload != null) {
debugPrint('notification payload: $payload');
}
await Navigator.push(
context,
MaterialPageRoute<void>(builder: (context) => SecondScreen(payload)),
);
}
更多细节及更多实现形式请参阅官方页面如上连接。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。