loadEmojis method
Implementation
Future<void> loadEmojis(
{int? rowCount, int? columnCount, List<String>? customEmojis}) async {
final requestedRowCount = rowCount ?? _rowCount;
final requestedColumnCount = columnCount ?? _columnCount;
if (requestedRowCount > 0 &&
requestedColumnCount > 0 &&
requestedRowCount * requestedColumnCount > 1) {
_rowCount = requestedRowCount;
_columnCount = requestedColumnCount;
} else {
_rowCount = 3;
_columnCount = 8;
}
final generation = ++_emojiLoadGeneration;
// Clear the old pages before changing the grid capacity so a rebuild
// cannot render stale items with a smaller layout.
_emojiPages.clear();
_currentEmojiPage = 0;
if (customEmojis != null) {
final emojis = List<String>.unmodifiable(customEmojis);
await Future<void>.value();
if (_disposed || generation != _emojiLoadGeneration) return;
_processEmojiPages(emojis);
notifyListeners();
return;
}
try {
final emojiString = await rootBundle
.loadString('packages/rongcloud_im_kit/assets/emoji.plist');
if (_disposed || generation != _emojiLoadGeneration) return;
final document = XmlDocument.parse(emojiString);
final emojis = document.findAllElements('string').map((node) {
final value = node.innerText;
return value;
}).toList();
_processEmojiPages(emojis);
notifyListeners();
} catch (e) {
if (_disposed || generation != _emojiLoadGeneration) return;
if (kDebugMode) {
print('Error loading emojis: $e');
}
_processEmojiPages(['😀', '😃', '😄', '😁', '😆']);
notifyListeners();
}
}