[Fluth]NotificationListener(無限スクロールなど)にスクロール
4958 ワード
ListView
またはSingleChildScrollView
のように、ScrollView
によって継承されたスクロール可能部品を使用すると、無限スクロールを実現するために、現在のスクロール位置が追跡されることが多い.通常は
ScrollController
が使用され、以下に示すようにします.var scrollController = ScrollController();
scrollController.addListener(() {
print(scrollController.position);
});
スクロールイベントは、ScrollController.addListener
によって登録され、位置を追跡することができる.しかし、
NestedScrollView
のようにPrimiaryScrollControllerを使用すると、直接生成されたScrollController
を使用することが難しくなり、上記の方法は使用できないため、イベントを実現するために他の方法を使用する必要がある.このとき利用できるのは
NotificationListener
です.ScrollView
の部品をNotificationListener
で包むと、スクロールアクティビティが受信されます.return NotificationListener(
child: ListView(
children: [Text('A'), Text('B'), Text('C')],
),
onNotification: (scrollNotification) {
//스크롤 시 이 부분에서 이벤트가 발생한다.
return false;
},
onNotification
はScrollNotification
をパラメータに変換し、このパラメータを用いて現在位置等を求めることができる. bool _onScrollNotification(ScrollNotification scrollNotification) {
var metrics = scrollNotification.metrics;
//세로 스크롤인 경우에만 추적
if (metrics.axisDirection != AxisDirection.down) return false;
if (metrics.extentAfter <= 0) {
//스크롤 끝에 닿은 경우 실행
}
return false;
}
しかしながら、サブツリー内のScrollView
の全てのイベントを受信するため、複数のスクロール可能部材を重ねて使用する場合には、metrics.axisDirection
等を用いて方向を検査・使用する必要がある.Reference
この問題について([Fluth]NotificationListener(無限スクロールなど)にスクロール), 我々は、より多くの情報をここで見つけました https://velog.io/@sangh518/Flutter-NotificationListenerテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol