diff --git a/lib/src/widgets/emoji_picker.dart b/lib/src/widgets/emoji_picker.dart index a31148e..a32dd01 100644 --- a/lib/src/widgets/emoji_picker.dart +++ b/lib/src/widgets/emoji_picker.dart @@ -59,31 +59,26 @@ class EmojiPicker extends HookConsumerWidget { useEffect(() { void syncSelectedCategoryWithScroll() { - final viewport = - scrollViewKey.currentContext?.findRenderObject() - as RenderBox?; - if (viewport == null) return; + final viewport = scrollViewKey.currentContext + ?.findRenderObject(); + if (viewport is! RenderBox) return; - var firstVisibleIndex = 0; - - for (var index = 0; index < headerKeys.length; index++) { - final header = headerKeys[index].currentContext + final selectedIndex = headerKeys.lastIndexWhere((headerKey) { + final renderObject = headerKey.currentContext ?.findRenderObject(); - if (header is! RenderBox) continue; - final headerTop = header + if (renderObject is! RenderBox) return false; + + final top = renderObject .localToGlobal(Offset.zero, ancestor: viewport) .dy; - if (headerTop > 1) break; + return top <= 1; + }); - firstVisibleIndex = index; - } - - if (firstVisibleIndex != selectedCategory.value) { - selectedCategory.value = firstVisibleIndex; - final chipContext = - chipKeys[firstVisibleIndex].currentContext; + if (selectedIndex != selectedCategory.value) { + selectedCategory.value = selectedIndex; + final chipContext = chipKeys[selectedIndex].currentContext; if (chipContext != null) { unawaited(