owned this note
owned this note
Published
Linked with GitHub
# Flutter 好用package - flutter_local_notifications 介紹
## flutter_local_notifications
顯示通知訊息,通常搭配 firebase 做使用,在安著手機雖然收得到通知但當你正在使用 APP 時通知是不會顯示; IOS 手機上則是會依據設定正常顯示,為處理此狀況故安裝此套件做使用,此情況在[官網](https://firebase.flutter.dev/docs/messaging/notifications/#foreground-notifications)有進行描述並推薦此套件進行使用。
```
flutter pub add flutter_local_notifications
```
[官網](https://pub.dev/packages/flutter_local_notifications)
### 程式範例
```dart
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
class NotificationService {
static final NotificationService _notificationService =
NotificationService._internal();
factory NotificationService() {
return _notificationService;
}
NotificationService._internal();
static const channelId = '1';
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
static const AndroidNotificationDetails _androidNotificationDetails =
AndroidNotificationDetails(
channelId,
"推播通知",
playSound: true,
priority: Priority.high,
importance: Importance.high,
);
static const DarwinNotificationDetails _iOSNotificationDetails =
DarwinNotificationDetails();
final NotificationDetails notificationDetails = const NotificationDetails(
android: _androidNotificationDetails,
iOS: _iOSNotificationDetails,
);
Future<void> init() async {
const AndroidInitializationSettings androidInitializationSettings =
AndroidInitializationSettings('@mipmap/launcher_icon');
const DarwinInitializationSettings iOSInitializationSettings =
DarwinInitializationSettings(
defaultPresentAlert: false,
defaultPresentBadge: false,
defaultPresentSound: false,
);
const InitializationSettings initializationSettings =
InitializationSettings(
android: androidInitializationSettings,
iOS: iOSInitializationSettings,
);
await flutterLocalNotificationsPlugin.initialize(
initializationSettings,
);
}
Future<void> requestIOSPermissions() async {
await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
IOSFlutterLocalNotificationsPlugin>()
?.requestPermissions(
alert: true,
badge: true,
sound: true,
);
}
Future<void> showNotification(int id, String title, String body) async {
await flutterLocalNotificationsPlugin.show(
id,
title,
body,
notificationDetails,
);
}
Future<void> cancelNotification(int id) async {
await flutterLocalNotificationsPlugin.cancel(id);
}
Future<void> cancelAllNotifications() async {
await flutterLocalNotificationsPlugin.cancelAll();
}
}
```
###### tags: `flutter` `firebase`