900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Flutter使用flutter_local_notifications插件实现手机定时推送本地通知

Flutter使用flutter_local_notifications插件实现手机定时推送本地通知

时间:2019-06-21 23:47:46

相关推荐

Flutter使用flutter_local_notifications插件实现手机定时推送本地通知

1.初始化flutter_local_notifications插件。

final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =FlutterLocalNotificationsPlugin();Future<void> initializeNotifications() async {const AndroidInitializationSettings initializationSettingsAndroid =AndroidInitializationSettings("@mipmap/ic_launcher");const InitializationSettings initializationSettings = InitializationSettings(android: initializationSettingsAndroid);await flutterLocalNotificationsPlugin.initialize(initializationSettings);}

2.在main函数中调用初始化操作

Future<void> main() async {//初始化操作WidgetsFlutterBinding.ensureInitialized();initializeNotifications();tz.initializeTimeZones();//获取当前设备所处时区final String currentTimeZone = await FlutterTimezone.getLocalTimezone();Tool.currentTimeZone=currentTimeZone;runApp(const MyApp();}

3.写一个NotificationHelper类

import 'package:flutter/cupertino.dart';import 'package:flutter_local_notifications/flutter_local_notifications.dart';import 'package:timezone/timezone.dart' as tz;import '../main.dart';import '../tools/tool.dart';class NotificationHelper extends StatefulWidget {String name;String body;int hour;int min;int id;NotificationHelper({super.key,required this.name,required this.body,required this.hour,required this.min,required this.id});Future<void> scheduleNotification() async {const AndroidNotificationDetails androidPlatformChannelSpecifics =AndroidNotificationDetails('channel_id','channel_name','channel_description',importance: Importance.max,priority: Priority.high,);const NotificationDetails platformChannelSpecifics =NotificationDetails(android: androidPlatformChannelSpecifics);final now = DateTime.now();//推送的时间final scheduledDate = DateTime(now.year, now.month, now.day, hour, min);await flutterLocalNotificationsPlugin.zonedSchedule(//id唯一id,name,type,//计算推送时间_nextInstanceOfTime(scheduledDate),platformChannelSpecifics,androidAllowWhileIdle: true,uiLocalNotificationDateInterpretation:UILocalNotificationDateInterpretation.absoluteTime,//每周重复一次// matchDateTimeComponents: DateTimeComponents.dayOfWeekAndTime//每天重复一次//matchDateTimeComponents: DateTimeComponents.time//每个月重复一次//matchDateTimeComponents: DateTimeComponents.dayOfMonthAndTime);//每年重复一次//matchDateTimeComponents: DateTimeComponents.dateAndTime);}tz.TZDateTime _nextInstanceOfTime(DateTime scheduledTime) {//获取手机当前时区的时间tz.TZDateTime now = tz.TZDateTime.now(tz.getLocation(Tool.currentTimeZone));tz.TZDateTime scheduledDate = tz.TZDateTime(tz.getLocation(Tool.currentTimeZone),now.year,now.month,now.day,scheduledTime.hour,scheduledTime.minute,);if (scheduledDate.isBefore(now)) {scheduledDate = scheduledDate.add(const Duration(days:1));}return scheduledDate;}@overrideState<StatefulWidget> createState() {// TODO: implement createStatethrow UnimplementedError();}}

4.调用

NotificationHelper(name: xx,body:xx,hour: xx,min: xx,id: xx,).scheduleNotification();

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。