108 lines
3.1 KiB
Dart
108 lines
3.1 KiB
Dart
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
|
import 'package:http/http.dart' as http;
|
|
import 'dart:convert';
|
|
|
|
class LocalNotifications {
|
|
static Future<void> requestPermissionLocalNotifications() async {
|
|
final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
|
|
|
|
await flutterLocalNotificationsPlugin
|
|
.resolvePlatformSpecificImplementation<
|
|
AndroidFlutterLocalNotificationsPlugin>()
|
|
?.requestPermission();
|
|
}
|
|
|
|
static Future<void> initializeLocalNotifications() async {
|
|
final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
|
|
|
|
const initializationSettingsAndroid =
|
|
AndroidInitializationSettings('app_icon');
|
|
|
|
const DarwinInitializationSettings initializationSettingsIOS =
|
|
DarwinInitializationSettings(
|
|
requestAlertPermission: true,
|
|
requestBadgePermission: true,
|
|
requestSoundPermission: true,
|
|
);
|
|
|
|
const initializationSettings = InitializationSettings(
|
|
android: initializationSettingsAndroid,
|
|
iOS: initializationSettingsIOS,
|
|
);
|
|
|
|
await flutterLocalNotificationsPlugin.initialize(
|
|
initializationSettings,
|
|
);
|
|
}
|
|
|
|
static void showLocalNotification({
|
|
required int id,
|
|
String? title,
|
|
String? body,
|
|
String? data,
|
|
}) {
|
|
const androidDetails = AndroidNotificationDetails(
|
|
'channel_id',
|
|
'channel_name',
|
|
importance: Importance.max,
|
|
priority: Priority.high,
|
|
playSound: true,
|
|
sound: RawResourceAndroidNotificationSound('notification'),
|
|
);
|
|
|
|
|
|
// IOSNotificationDetails --> DarwinNotificationDetails
|
|
const DarwinNotificationDetails iOSNotificationDetails =
|
|
DarwinNotificationDetails(
|
|
presentAlert: true,
|
|
presentBadge: true,
|
|
presentSound: true,
|
|
);
|
|
const NotificationDetails notificationDetails = NotificationDetails(
|
|
android: androidDetails, iOS: iOSNotificationDetails);
|
|
|
|
final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
|
|
|
|
flutterLocalNotificationsPlugin.show(
|
|
id,
|
|
title,
|
|
body,
|
|
notificationDetails,
|
|
payload: data,
|
|
);
|
|
}
|
|
|
|
static Future<void> sendPushNotification(
|
|
String token, String title, String body) async {
|
|
try {
|
|
http.Response response = await http.post(
|
|
Uri.parse('https://fcm.googleapis.com/fcm/send'),
|
|
headers: <String, String>{
|
|
'Content-Type': 'application/json; charset=UTF-8',
|
|
'Authorization':
|
|
'key=AAAAORdR-xU:APA91bF_wblg86jHAC-uexrXPHavYRlk5wge1Gf46m56V4J2D2L37Cp_hf46JZUzpvsWPSpqc5ewHelKI9LTifUG_s2mciMI6e5VLKo7E1R8btbNo7iaM9do2ctoyHKUm1atlZBdKaN2',
|
|
},
|
|
body: jsonEncode(
|
|
<String, dynamic>{
|
|
'notification': <String, dynamic>{
|
|
'body': body,
|
|
'title': title,
|
|
|
|
},
|
|
'priority': 'high',
|
|
'data': <String, dynamic>{
|
|
'click_action': 'FLUTTER_NOTIFICATION_CLICK',
|
|
'id': '1',
|
|
'status': 'done',
|
|
},
|
|
'to': token,
|
|
},
|
|
),
|
|
);
|
|
response;
|
|
} catch (e) {
|
|
rethrow;
|
|
}
|
|
}
|
|
}
|