import 'package:flutter/material.dart'; class ScrollOverBuilder extends StatefulWidget { final Widget Function(bool isOver) builder; const ScrollOverBuilder({ super.key, required this.builder, }); @override State createState() => _ScrollOverBuilderState(); } class _ScrollOverBuilderState extends State { final isOverNotifier = ValueNotifier(false); @override void dispose() { super.dispose(); isOverNotifier.dispose(); } @override Widget build(BuildContext context) { return NotificationListener( onNotification: (scrollNotification) { isOverNotifier.value = scrollNotification.metrics.maxScrollExtent > 0; return true; }, child: ValueListenableBuilder( valueListenable: isOverNotifier, builder: (_, isOver, __) { return widget.builder(isOver); }, ), ); } }