Group.fromMap constructor
Group.fromMap(
- dynamic map
Creates a new Group instance from a map.
Implementation
factory Group.fromMap(dynamic map) {
if (map == null) {
throw ArgumentError('The type of group map is null');
}
// Parse metadata - can be String (JSON) or Map
Map<String, dynamic>? metadata;
if (map['metadata'] != null) {
final rawMetadata = map['metadata'];
if (rawMetadata is String) {
try {
metadata = Map<String, dynamic>.from(json.decode(rawMetadata));
} catch (e) {
metadata = null;
}
} else if (rawMetadata is Map) {
metadata = Map<String, dynamic>.from(rawMetadata);
}
}
// Parse membersCount - can be int or String
int membersCount = 0;
final rawMembersCount = map['membersCount'];
if (rawMembersCount is int) {
membersCount = rawMembersCount;
} else if (rawMembersCount is String) {
membersCount = int.tryParse(rawMembersCount) ?? 0;
}
// Parse timestamps - can be int, double, or String
int? parseTimestamp(dynamic value) {
if (value == null || value == 0) return null;
if (value is int) return value;
if (value is double) return value.toInt();
if (value is String) return int.tryParse(value);
return null;
}
final createdAtTs = parseTimestamp(map['createdAt']);
final joinedAtTs = parseTimestamp(map['joinedAt']);
final updatedAtTs = parseTimestamp(map['updatedAt']);
// Parse tags - can be List<String> or List<dynamic>
List<String>? tags;
if (map['tags'] != null) {
final rawTags = map['tags'];
if (rawTags is List) {
tags = rawTags.map((e) => e.toString()).toList();
}
}
// Parse isBannedFromGroup - default to false to match Android SDK
bool isBannedFromGroup = false;
if (map['isBannedFromGroup'] != null) {
isBannedFromGroup = map['isBannedFromGroup'] == true || map['isBannedFromGroup'] == 'true';
}
return Group(
guid: map['guid']?.toString() ?? '',
owner: map['owner']?.toString() ?? '',
name: map['name']?.toString() ?? '',
icon: map['icon']?.toString(),
description: map['description']?.toString(),
metadata: metadata,
hasJoined: map['hasJoined'] == true || map['hasJoined'] == 'true',
membersCount: membersCount,
createdAt: createdAtTs != null
? DateTime.fromMillisecondsSinceEpoch(createdAtTs * 1000)
: null,
joinedAt: joinedAtTs != null
? DateTime.fromMillisecondsSinceEpoch(joinedAtTs * 1000)
: null,
updatedAt: updatedAtTs != null
? DateTime.fromMillisecondsSinceEpoch(updatedAtTs * 1000)
: null,
tags: tags,
type: map['type']?.toString() ?? '',
scope: map['scope']?.toString(),
password: map['password']?.toString(),
isBannedFromGroup: isBannedFromGroup);
}