上海建材网站建设,深圳品牌vi设计,php网站开发套模板步骤,负面口碑营销案例前言
注#xff1a; 刚开始学习#xff0c;如果某些案例使用时遇到问题#xff0c;可以自行百度、查看官方案例、官方github。
简介 Flutter Local Notifications是一个用于在Flutter应用程序中显示本地通知的插件。它提供了一个简单而强大的方法来在设备上发送通知#…前言
注 刚开始学习如果某些案例使用时遇到问题可以自行百度、查看官方案例、官方github。
简介 Flutter Local Notifications是一个用于在Flutter应用程序中显示本地通知的插件。它提供了一个简单而强大的方法来在设备上发送通知以便用户可以在应用程序处于后台或设备锁定状态下接收到它们。
使用Flutter Local Notifications插件可以创建和安排各种类型的通知包括
即时通知立即显示的通知用于向用户传达重要消息或提醒。周期性通知可以按照指定的时间间隔重复显示的通知例如每天或每周的提醒。定时通知在特定日期和时间触发的通知用于安排未来事件或提醒。
通过使用Flutter Local Notifications可以自定义通知的外观和行为包括标题内容图标声音振动模式和点击操作。此外还可以处理用户与通知的交互例如当用户点击通知时执行特定的操作。
Flutter Local Notifications插件使用简单且易于集成到Flutter项目中。它提供了一组易于使用的API可以轻松创建和管理通知。此外它还兼容Android和iOS平台并且可以在两个平台上以相同的代码库进行操作。
官方地址 https://pub-web.flutter-io.cn/packages/flutter_local_notifications
备注 这里只学习关于安卓的基本使用
学习
准备
安装
flutter pub add flutter_local_notifications即时通知
通知辅助类 NotificationHelper
// 导入包
import package:flutter_local_notifications/flutter_local_notifications.dart;class NotificationHelper {// 使用单例模式进行初始化static final NotificationHelper _instance NotificationHelper._internal();factory NotificationHelper() _instance;NotificationHelper._internal();// FlutterLocalNotificationsPlugin是一个用于处理本地通知的插件它提供了在Flutter应用程序中发送和接收本地通知的功能。final FlutterLocalNotificationsPlugin _notificationsPlugin FlutterLocalNotificationsPlugin();// 初始化函数Futurevoid initialize() async {// AndroidInitializationSettings是一个用于设置Android上的本地通知初始化的类// 使用了app_icon作为参数这意味着在Android上应用程序的图标将被用作本地通知的图标。const AndroidInitializationSettings initializationSettingsAndroid AndroidInitializationSettings(mipmap/ic_launcher);// 15.1是DarwinInitializationSettings旧版本好像是IOSInitializationSettings有些例子中就是这个const DarwinInitializationSettings initializationSettingsIOS DarwinInitializationSettings();// 初始化const InitializationSettings initializationSettings InitializationSettings(android: initializationSettingsAndroid,iOS: initializationSettingsIOS);await _notificationsPlugin.initialize(initializationSettings);}// 显示通知Futurevoid showNotification({required String title, required String body}) async {// 安卓的通知// your channel id用于指定通知通道的ID。// your channel name用于指定通知通道的名称。// your channel description用于指定通知通道的描述。// Importance.max用于指定通知的重要性设置为最高级别。// Priority.high用于指定通知的优先级设置为高优先级。// ticker用于指定通知的提示文本即通知出现在通知中心的文本内容。const AndroidNotificationDetails androidNotificationDetails AndroidNotificationDetails(your.channel.id, your channel name,channelDescription: your channel description,importance: Importance.max,priority: Priority.high,ticker: ticker);// ios的通知const String darwinNotificationCategoryPlain plainCategory;const DarwinNotificationDetails iosNotificationDetails DarwinNotificationDetails(categoryIdentifier: darwinNotificationCategoryPlain, // 通知分类);// 创建跨平台通知const NotificationDetails platformChannelSpecifics NotificationDetails(android: androidNotificationDetails,iOS: iosNotificationDetails);// 发起一个通知await _notificationsPlugin.show(1,title,body,platformChannelSpecifics,);}
}使用
main() async {//用于确保Flutter的Widgets绑定已经初始化。WidgetsFlutterBinding.ensureInitialized();// 初始化通知帮助类NotificationHelper notificationHelper NotificationHelper();await notificationHelper.initialize();runApp(const MyApp());
}class SwitcherContainerState extends StateSwitcherContainer {final NotificationHelper _notificationHelper NotificationHelper();overrideWidget build(BuildContext context) {return Center(child: ElevatedButton(onPressed: () {_notificationHelper.showNotification(title: Hello,body: This is a notification!,);},child: const Text(发起通知)));}
}注意
一定要在main函数里进行初始化不然会报下面这个错误百度了半天最后发现是自己忘记了初始化 要开启应用的通知权限不然可能无法通知 周期性通知 // 周期性通知Futurevoid scheduleNotification({required int id,required String title,required String body,}) async {const AndroidNotificationDetails androidNotificationDetails AndroidNotificationDetails(your.channel.id, your channel name,channelDescription: your channel description,importance: Importance.max,priority: Priority.high,ticker: ticker);// ios的通知const String darwinNotificationCategoryPlain plainCategory;const DarwinNotificationDetails iosNotificationDetails DarwinNotificationDetails(categoryIdentifier: darwinNotificationCategoryPlain, // 通知分类);// 创建跨平台通知const NotificationDetails platformChannelSpecifics NotificationDetails(android: androidNotificationDetails, iOS: iosNotificationDetails);
// 发起通知await _notificationsPlugin.periodicallyShow(id, title, body, RepeatInterval.everyMinute, platformChannelSpecifics);}
}这里我设置的是每分钟通知一次注意假如你在1001发起了通知10:01不会有通知消息而是从10:02开发每隔一分钟发起一次通知。
定时通知
// 定时通知
Futurevoid zonedScheduleNotification({required int id,required String title,required String body,required DateTime scheduledDateTime}) async {const AndroidNotificationDetails androidNotificationDetails AndroidNotificationDetails(your.channel.id, your channel name,channelDescription: your channel description,importance: Importance.max,priority: Priority.high,ticker: ticker);// ios的通知const String darwinNotificationCategoryPlain plainCategory;const DarwinNotificationDetails iosNotificationDetails DarwinNotificationDetails(categoryIdentifier: darwinNotificationCategoryPlain, // 通知分类);// 创建跨平台通知const NotificationDetails platformChannelSpecifics NotificationDetails(android: androidNotificationDetails, iOS: iosNotificationDetails);// 发起通知await _notificationsPlugin.zonedSchedule(id, title, body,tz.TZDateTime.from(scheduledDateTime, tz.local), // 使用本地时区的时间platformChannelSpecifics,uiLocalNotificationDateInterpretation:UILocalNotificationDateInterpretation.absoluteTime, // 设置通知的触发时间是觉得时间);
}注意如下图参数scheduledDate是TZDateTime类型看了一下官方示例还需要下载timezone 库。 timezone 是一个用来处理时区信息的可以使得在不同平台上创建和处理日期时间对象更加方便和准确。
官方地址 https://pub-web.flutter-io.cn/packages/timezone
安装
flutter pub add timezone初始化 就在通知辅助类NotificationHelper的initialize函数里初始化一下就行
import package:timezone/timezone.dart as tz;
import package:timezone/data/latest.dart as tz;// 初始化tz
tz.initializeTimeZones();其他
除了上面三种外还有其他的通知形式比如以下内容没有测试
长文本
final androidPlatformChannelSpecifics AndroidNotificationDetails(channel_id,channel_name,channel_description,styleInformation: BigTextStyleInformation(大文本内容),
);大图片
final androidPlatformChannelSpecifics AndroidNotificationDetails(channel_id,channel_name,channel_description,styleInformation: BigPictureStyleInformation(FilePathAndroidBitmap(图片路径),largeIcon: FilePathAndroidBitmap(大图标路径),),
);还有一些比如媒体样式、带进度条的等都可以在AndroidNotificationDetails找到相应的参数。 对于IOS来说通知样式收到苹果的限制可以通过DarwinNotificationDetails的attachments参数来实现一些简单操作。