flutter 通知栏消息推送

此博文要实现的通知栏的消息推送如下图所示:

在这里插入图片描述

通知栏的消息推送可简单分为本地消息推送和网络消息推送。
这里主要介绍的是本地消息推送。
使用的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)),
    );
}

更多细节及更多实现形式请参阅官方页面如上连接。

相关文章

这篇文章主要讲解了“FlutterComponent动画的显和隐怎么实现...
这篇文章主要讲解了“flutter微信聊天输入框功能如何实现”,...
本篇内容介绍了“Flutter之Navigator的高级用法有哪些”的有...
这篇文章主要介绍“Flutter怎么使用Android原生播放器”,在...
Flutter开发的android端如何修改APP名称,logo,版本号,具体...
Flutter路由管理初识路由概念一.路由管理1.1.Route1.2.Mater...