loadEmojis method

Future<void> loadEmojis({
  1. int? rowCount,
  2. int? columnCount,
  3. List<String>? customEmojis,
})

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();
  }
}