Flutter桌面应用如何实现消息通知
在开发Flutter桌面应用时,如何实现消息通知功能?目前官方文档主要针对移动端,桌面端的通知支持不太清晰。是否有成熟的插件或方案可以实现类似系统托盘通知的效果?具体需要哪些依赖和权限配置?在Windows、macOS和Linux上的实现方式是否有差异?希望有实际经验的开发者能分享具体代码示例或最佳实践。
2 回复
Flutter桌面应用可通过以下方式实现消息通知:
- 使用系统原生API(Windows用win32,macOS用macOS,Linux用dart_udev)。
- 集成第三方库如flutter_local_notifications,支持跨平台。
- 调用系统托盘通知,结合tray_manager等插件。 需注意不同平台的权限配置。
更多关于Flutter桌面应用如何实现消息通知的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter桌面应用中实现消息通知,可以通过以下方式:
1. 使用系统原生通知
Windows平台
import 'package:win32/win32.dart';
void showWindowsNotification(String title, String message) {
final hwnd = GetConsoleWindow();
final toast = ToastNotificationManager.createToastNotifier();
final xml = '''
<toast>
<visual>
<binding template="ToastGeneric">
<text>$title</text>
<text>$message</text>
</binding>
</visual>
</toast>
''';
final document = Windows.Data.Xml.Dom.XmlDocument()
..loadXml(xml);
toast.show(document);
}
macOS平台
import 'dart:io';
void showMacNotification(String title, String message) {
Process.run('osascript', [
'-e',
'display notification "$message" with title "$title"'
]);
}
Linux平台
import 'dart:io';
void showLinuxNotification(String title, String message) {
Process.run('notify-send', [title, message]);
}
2. 使用跨平台插件
推荐使用 flutter_local_notifications 插件:
dependencies:
flutter_local_notifications: ^16.3.0
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
final FlutterLocalNotificationsPlugin notificationsPlugin =
FlutterLocalNotificationsPlugin();
Future<void> initNotifications() async {
const initializationSettings = InitializationSettings(
linux: LinuxInitializationSettings(
defaultActionName: 'Open notification',
),
);
await notificationsPlugin.initialize(initializationSettings);
}
Future<void> showNotification(String title, String body) async {
const notificationDetails = NotificationDetails(
linux: LinuxNotificationDetails(
urgency: LinuxNotificationUrgency.normal,
),
);
await notificationsPlugin.show(
0,
title,
body,
notificationDetails,
);
}
3. 完整示例
class NotificationService {
static final _notifications = FlutterLocalNotificationsPlugin();
static Future<void> initialize() async {
const settings = InitializationSettings(
linux: LinuxInitializationSettings(
defaultActionName: 'Open',
),
);
await _notifications.initialize(settings);
}
static Future<void> showNotification({
required String title,
required String body,
}) async {
const details = NotificationDetails(
linux: LinuxNotificationDetails(
urgency: LinuxNotificationUrgency.normal,
),
);
await _notifications.show(
DateTime.now().millisecondsSinceEpoch ~/ 1000,
title,
body,
details,
);
}
}
使用方式:
// 初始化
await NotificationService.initialize();
// 显示通知
await NotificationService.showNotification(
title: '新消息',
body: '您有一条新消息待查看',
);
注意事项:
- 不同平台的通知样式和行为可能有所差异
- 需要处理用户点击通知后的回调
- 在Linux上可能需要安装
libnotify库 - 测试时请确保在对应的桌面平台上运行
推荐使用 flutter_local_notifications 插件,它提供了统一的API并处理了平台差异。

