На самом деле это не сложно, вы можете использовать собственный ScrollController со слушателем:
объявите его, затем в initState поместите:
_myController = ScrollController();
_myController.addListener(_myScrollListener);
и сама функция может быть примерно такой :
_myScrollListener(){
if (_myController.offset >= _controller.position.maxScrollExtent && !_myController.position.outOfRange) {
print("List end");
}
if (_myController.offset <= _controller.position.minScrollExtent && !_myController.position.outOfRange) {
print("List top");
}
Используйте контроллер со своим ListView, добавьте то, что вам нужно, в слушатель.