notification_util.dart 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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(onDidReceiveLocalNotification:
  31. (int id, String? title, String? body, String? payload) async {
  32. if (payload != null) {
  33. TalkPage.startById(payload);
  34. }
  35. });
  36. InitializationSettings initializationSettings = InitializationSettings(
  37. android: initializationSettingsAndroid,
  38. iOS: initializationSettingsIOS,
  39. );
  40. await flutterLocalNotificationsPlugin.initialize(
  41. initializationSettings,
  42. onDidReceiveNotificationResponse:
  43. (NotificationResponse notificationResponse) async {
  44. if (notificationResponse.payload != null) {
  45. TalkPage.startById(notificationResponse.payload!);
  46. }
  47. },
  48. );
  49. const AndroidNotificationDetails androidPlatformChannelSpecifics =
  50. AndroidNotificationDetails(
  51. 'talk_analyse_success',
  52. '谈话分析通知',
  53. channelDescription: '谈话分析成功',
  54. importance: Importance.max,
  55. priority: Priority.high,
  56. );
  57. const DarwinNotificationDetails iOSPlatformChannelSpecifics =
  58. DarwinNotificationDetails(
  59. //TODO
  60. );
  61. const NotificationDetails platformChannelSpecifics = NotificationDetails(
  62. android: androidPlatformChannelSpecifics,
  63. iOS: iOSPlatformChannelSpecifics);
  64. await flutterLocalNotificationsPlugin.show(
  65. getAnalyseNotificationId(),
  66. '小听谈话分析完成',
  67. '老板,谈话分析已完成,快点击查看吧。',
  68. platformChannelSpecifics,
  69. payload: talkId,
  70. );
  71. }
  72. // static void showAnalyseResultNotification(
  73. // int notificationId, bool isSuccess, String talkId,
  74. // {required String channelId, required String channelName}) {
  75. // CustomNotification.showAnalyseResultNotification(
  76. // notificationId, isSuccess, talkId,
  77. // channelId: channelId, channelName: channelName);
  78. // }
  79. }