BluxNotification.fromMap constructor

BluxNotification.fromMap(
  1. Map<String, dynamic> map
)

유연 파서

  • data가 String이면 JSON 파싱 시도(실패 시 null)
  • data가 Map이면 그대로

Implementation

factory BluxNotification.fromMap(Map<String, dynamic> map) {
  Map<String, dynamic>? parsedData;

  final dynamic rawData = map['data'];
  if (rawData is String) {
    try {
      final decodedData = jsonDecode(rawData);
      if (decodedData is Map<String, dynamic>) {
        parsedData = decodedData;
      } else {
        debugPrint(
          'data decoded but not a Map (rawData = $rawData, decodedData = $decodedData)',
        );
        parsedData = null;
      }
    } catch (e, s) {
      debugPrint('data decode failed: $e\n$s (rawData = $rawData)');
      parsedData = null;
    }
  } else if (rawData is Map) {
    parsedData = Map<String, dynamic>.from(rawData);
  } else if (rawData != null) {
    debugPrint(
      'data of unsupported type: ${rawData.runtimeType} (rawData = $rawData)',
    );
    parsedData = null;
  } else if (rawData == null) {
    parsedData = null;
  }

  return BluxNotification(
    id: map['id'] as String,
    body: map['body'] as String,
    title: map['title'] as String?,
    url: map['url'] as String?,
    imageUrl: map['imageUrl'] as String?,
    data: parsedData,
  );
}