notification_util.dart 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import 'package:custom_notification/custom_notification.dart';
  2. import 'package:electronic_assistant/module/talk/view.dart';
  3. import 'package:flutter_local_notifications/flutter_local_notifications.dart';
  4. import 'package:get/get_utils/src/platform/platform.dart';
  5. class NotificationUtil {
  6. NotificationUtil._();
  7. static String formatDuration(double seconds) {
  8. final duration = Duration(seconds: seconds.toInt());
  9. final hours = duration.inHours.toString().padLeft(2, '0');
  10. final minutes = (duration.inMinutes % 60).toString().padLeft(2, '0');
  11. final secs = (duration.inSeconds % 60).toString().padLeft(2, '0');
  12. return '$hours:$minutes:$secs';
  13. }
  14. static void showRecordNotification(
  15. int notificationId, bool isRecording, double recordDuration,
  16. {required String channelId, required String channelName}) {
  17. if (GetPlatform.isAndroid) {
  18. CustomNotification.showRecordNotification(
  19. notificationId, isRecording, formatDuration(recordDuration),
  20. channelId: channelId, channelName: channelName);
  21. }
  22. }
  23. static int _analyseNotificationId = 2000;
  24. static int getAnalyseNotificationId() {
  25. return _analyseNotificationId++;
  26. }
  27. static void showAnalyseSuccessNotification(String talkId) async {
  28. final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
  29. FlutterLocalNotificationsPlugin();
  30. const AndroidInitializationSettings initializationSettingsAndroid =
  31. AndroidInitializationSettings('@mipmap/ic_launcher');
  32. DarwinInitializationSettings initializationSettingsIOS =
  33. DarwinInitializationSettings(
  34. requestSoundPermission: true,
  35. requestBadgePermission: true,
  36. requestAlertPermission: true,
  37. onDidReceiveLocalNotification:
  38. (int id, String? title, String? body, String? payload) async {
  39. if (payload != null) {
  40. TalkPage.startById(payload);
  41. }
  42. });
  43. InitializationSettings initializationSettings = InitializationSettings(
  44. android: initializationSettingsAndroid,
  45. iOS: initializationSettingsIOS,
  46. );
  47. await flutterLocalNotificationsPlugin.initialize(
  48. initializationSettings,
  49. onDidReceiveNotificationResponse:
  50. (NotificationResponse notificationResponse) async {
  51. if (notificationResponse.payload != null) {
  52. TalkPage.startById(notificationResponse.payload!);
  53. }
  54. },
  55. );
  56. const AndroidNotificationDetails androidPlatformChannelSpecifics =
  57. AndroidNotificationDetails(
  58. 'talk_analyse_success',
  59. '谈话分析通知',
  60. channelDescription: '谈话分析成功',
  61. importance: Importance.max,
  62. priority: Priority.high,
  63. );
  64. // ios的通知
  65. const String darwinNotificationCategoryPlain = 'plainCategory';
  66. const DarwinNotificationDetails iOSPlatformChannelSpecifics =
  67. DarwinNotificationDetails(
  68. categoryIdentifier: darwinNotificationCategoryPlain,
  69. );
  70. const NotificationDetails platformChannelSpecifics = NotificationDetails(
  71. android: androidPlatformChannelSpecifics,
  72. iOS: iOSPlatformChannelSpecifics);
  73. await flutterLocalNotificationsPlugin.show(
  74. getAnalyseNotificationId(),
  75. '小听谈话分析完成',
  76. '老板,谈话分析已完成,快点击查看吧。',
  77. platformChannelSpecifics,
  78. payload: talkId,
  79. );
  80. }
  81. // static void showAnalyseResultNotification(
  82. // int notificationId, bool isSuccess, String talkId,
  83. // {required String channelId, required String channelName}) {
  84. // CustomNotification.showAnalyseResultNotification(
  85. // notificationId, isSuccess, talkId,
  86. // channelId: channelId, channelName: channelName);
  87. // }
  88. }