notification_util.dart 3.6 KB

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