75 lines
1.7 KiB
Dart
75 lines
1.7 KiB
Dart
class StickerSet {
|
|
final int id;
|
|
final String name;
|
|
final String iconUrl;
|
|
final List<int> stickerIds;
|
|
final String? link;
|
|
|
|
const StickerSet({
|
|
required this.id,
|
|
required this.name,
|
|
required this.iconUrl,
|
|
required this.stickerIds,
|
|
this.link,
|
|
});
|
|
|
|
factory StickerSet.fromMap(Map<dynamic, dynamic> map) {
|
|
final rawStickers = map['stickers'];
|
|
final ids = <int>[];
|
|
if (rawStickers is List) {
|
|
for (final e in rawStickers) {
|
|
if (e is int) ids.add(e);
|
|
}
|
|
}
|
|
return StickerSet(
|
|
id: map['id'] as int,
|
|
name: map['name']?.toString() ?? '',
|
|
iconUrl: map['iconUrl']?.toString() ?? '',
|
|
stickerIds: ids,
|
|
link: map['link']?.toString(),
|
|
);
|
|
}
|
|
}
|
|
|
|
class StickerItem {
|
|
final int id;
|
|
final String url;
|
|
final String? lottieUrl;
|
|
final int? setId;
|
|
final int? width;
|
|
final int? height;
|
|
final List<String> tags;
|
|
|
|
const StickerItem({
|
|
required this.id,
|
|
required this.url,
|
|
this.lottieUrl,
|
|
this.setId,
|
|
this.width,
|
|
this.height,
|
|
this.tags = const [],
|
|
});
|
|
|
|
bool get isAnimated => lottieUrl != null && lottieUrl!.isNotEmpty;
|
|
|
|
factory StickerItem.fromMap(Map<dynamic, dynamic> map) => StickerItem(
|
|
id: map['id'] as int,
|
|
url: map['url']?.toString() ?? '',
|
|
lottieUrl: map['lottieUrl']?.toString(),
|
|
setId: map['setId'] as int?,
|
|
width: map['width'] as int?,
|
|
height: map['height'] as int?,
|
|
tags: _parseTags(map['tags']),
|
|
);
|
|
|
|
static List<String> _parseTags(dynamic raw) {
|
|
if (raw is! List) return const [];
|
|
final result = <String>[];
|
|
for (final e in raw) {
|
|
final s = e?.toString();
|
|
if (s != null && s.isNotEmpty) result.add(s);
|
|
}
|
|
return result;
|
|
}
|
|
}
|