notificationdecoder.dart 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import 'notification.m.dart';
  2. typedef _ModelBuilder<T> = T Function(Map<String, dynamic> map);
  3. class NotificationDecoder {
  4. NotificationDecoder._();
  5. static final _builders = _ModelBuilderCollection();
  6. static T decode<T>(Map<String, dynamic> map) {
  7. final type = decodeType(map);
  8. final builder = _builders.find(type);
  9. final model = builder.call(map) as T;
  10. return model;
  11. }
  12. static NotificationTypeEnum decodeType(Map<String, dynamic> map) {
  13. final typeInt = map['NotificationType'] as int;
  14. return NotificationTypeEnum.values[typeInt];
  15. }
  16. static void setup() {
  17. /** Register notification model builders here */
  18. _builders.add(NotificationTypeEnum.AnnouncementPublishNotification,
  19. (map) => AnnouncementNotification.fromJson(map));
  20. _builders.add(NotificationTypeEnum.ChatMsgNotification,
  21. (map) => ChatMsgNotification.fromJson(map));
  22. _builders.add(NotificationTypeEnum.ConnectionNotification,
  23. (map) => ConnectionNotification.fromJson(map));
  24. _builders.add(NotificationTypeEnum.DisconnectNotification,
  25. (map) => DisconnectNotification.fromJson(map));
  26. _builders.add(NotificationTypeEnum.ExamRecordsFinishedNotification,
  27. (map) => ExamRecordsFinishedNotification.fromJson(map));
  28. _builders.add(NotificationTypeEnum.PasswordExpiredWarningNotification,
  29. (map) => PasswordExpiredWarningNotification.fromJson(map));
  30. _builders.add(NotificationTypeEnum.TokenReplacedNotification,
  31. (map) => TokenReplacedNotification.fromJson(map));
  32. _builders.add(NotificationTypeEnum.ApplyConsultationNotification,
  33. (map) => ApplyConsultationNotification.fromJson(map));
  34. _builders.add(NotificationTypeEnum.ApprovalApplyConsultationNotification,
  35. (map) => ApprovalApplyConsultationNotification.fromJson(map));
  36. _builders.add(NotificationTypeEnum.ConsultationRemindNotification,
  37. (map) => ConsultationRemindNotification.fromJson(map));
  38. _builders.add(NotificationTypeEnum.InviteeApproveApplyConsultationNotification,
  39. (map) => InviteeApproveApplyConsultationNotification.fromJson(map));
  40. _builders.add(NotificationTypeEnum.InviteeConsultationNotification,
  41. (map) => InviteeConsultationNotification.fromJson(map));
  42. _builders.add(NotificationTypeEnum.InviteeRejectApplyConsultationNotification,
  43. (map) => InviteeRejectApplyConsultationNotification.fromJson(map));
  44. _builders.add(NotificationTypeEnum.RejectApplyConsultationNotification,
  45. (map) => RejectApplyConsultationNotification.fromJson(map));
  46. _builders.add(NotificationTypeEnum.AcceptLiveConsultationNotification,
  47. (map) => AcceptLiveConsultationNotification.fromJson(map));
  48. _builders.add(NotificationTypeEnum.CancelInvitingInLiveConsultationNotification,
  49. (map) => CancelInvitingInLiveConsultationNotification.fromJson(map));
  50. _builders.add(NotificationTypeEnum.CancelLiveConsultationNotification,
  51. (map) => CancelLiveConsultationNotification.fromJson(map));
  52. _builders.add(NotificationTypeEnum.CloseLiveConsultationNotification,
  53. (map) => CloseLiveConsultationNotification.fromJson(map));
  54. _builders.add(NotificationTypeEnum.CancelLiveConsultationToDeviceNotification,
  55. (map) => CancelLiveConsultationToDeviceNotification.fromJson(map));
  56. _builders.add(NotificationTypeEnum.CloseLiveConsultationToDeviceNotification,
  57. (map) => CloseLiveConsultationToDeviceNotification.fromJson(map));
  58. _builders.add(NotificationTypeEnum.HeartRateJoinConsultationNotification,
  59. (map) => HeartRateJoinConsultationNotification.fromJson(map));
  60. _builders.add(NotificationTypeEnum.HeartRateLeaveConsultationNotification,
  61. (map) => HeartRateLeaveConsultationNotification.fromJson(map));
  62. _builders.add(NotificationTypeEnum.InviteLiveConsultationNotification,
  63. (map) => InviteLiveConsultationNotification.fromJson(map));
  64. _builders.add(NotificationTypeEnum.InviteInLiveConsultationNotification,
  65. (map) => InviteInLiveConsultationNotification.fromJson(map));
  66. _builders.add(NotificationTypeEnum.JoinInLiveConsultationNotification,
  67. (map) => JoinInLiveConsultationNotification.fromJson(map));
  68. _builders.add(NotificationTypeEnum.RejectInviteLiveConsultationNotification,
  69. (map) => RejectInviteLiveConsultationNotification.fromJson(map));
  70. _builders.add(NotificationTypeEnum.InviteLiveConsultationToDeviceNotification,
  71. (map) => InviteLiveConsultationToDeviceNotification.fromJson(map));
  72. _builders.add(NotificationTypeEnum.JoinLiveConsultationNotification,
  73. (map) => JoinLiveConsultationNotification.fromJson(map));
  74. _builders.add(NotificationTypeEnum.LeaveConsultationNotification,
  75. (map) => LeaveLiveConsultationNotification.fromJson(map));
  76. _builders.add(NotificationTypeEnum.MuteLiveConsultationNotification,
  77. (map) => MuteLiveConsultationNotification.fromJson(map));
  78. _builders.add(NotificationTypeEnum.NetworkErrConsultationNotification,
  79. (map) => NetworkErrConsultationNotification.fromJson(map));
  80. _builders.add(NotificationTypeEnum.RejectLiveConsultationNotification,
  81. (map) => RejectLiveConsultationNotification.fromJson(map));
  82. _builders.add(NotificationTypeEnum.SwitchLiveConsultationVideoNotification,
  83. (map) => SwitchLiveConsultationVideoNotification.fromJson(map));
  84. }
  85. }
  86. class _ModelBuilderCollection {
  87. final Map<NotificationTypeEnum, _ModelBuilder> _source = {};
  88. void add(NotificationTypeEnum type, _ModelBuilder builder) {
  89. _source[type] = builder;
  90. }
  91. _ModelBuilder find(NotificationTypeEnum type) {
  92. final builder = _source[type];
  93. return builder!;
  94. }
  95. }