J'utilise le widget ListView
pour afficher les éléments sous forme de liste. Dans une fenêtre trois, les éléments affichés doivent être placés au milieu.
Alors, comment puis-je détecter la position de ListView
lors de l'arrêt du défilement?
Comment détecter l'arrêt du défilement ListView?
5 Réponses :
Si vous souhaitez détecter la position de défilement de votre ListView
, vous pouvez simplement utiliser ceci;
Scrollable.of(context).position.pixels
Comment détecter l'arrêt du défilement ListView?
J'ai utilisé NotificationListener
qui est un widget qui écoute les notifications qui bouillonnent dans l'arborescence. Utilisez ensuite ScrollEndNotification
, qui indique que le défilement s'est arrêté.
Pour la position de défilement, j'ai utilisé _scrollController
ce type est ScrollController
.
new NotificationListener( child: new ListView( controller: _scrollController, children: ... ), onNotification: (t) { if (t is ScrollEndNotification) { print(_scrollController.position.pixels); } }, ),
où vous placez ces codes, dans ListView (ui) ou en bloc?
enfant: nouveau NotificationListener (
Vous pouvez également obtenir cette fonctionnalité avec les étapes suivantes
import 'package:flutter/material.dart'; class YourPage extends StatefulWidget { YourPage({Key key}) : super(key: key); @override _YourPageState createState() => _YourPageState(); } class _YourPageState extends State<YourPage> { ScrollController _scrollController; double _scrollPosition; _scrollListener() { setState(() { _scrollPosition = _scrollController.position.pixels; }); } @override void initState() { _scrollController = ScrollController(); _scrollController.addListener(_scrollListener); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( automaticallyImplyLeading: false, title: Text('Position $_scrollPosition pixels'), ), body: Container( child: ListView.builder( controller: _scrollController, itemCount: 200, itemBuilder: (context, index) { return ListTile( leading: Icon(Icons.mood), title: Text('Item: $index'), ); }, )), ); } }
La réponse de majidfathi69 est bonne, mais vous n'avez pas besoin d'ajouter un contrôleur à la liste: (Remplacez ScrollUpdateNotification
par ScrollEndNotification
lorsque vous souhaitez uniquement être averti lorsque le défilement se termine.)
NotificationListener<ScrollUpdateNotification>( child: ListView( children: ... ), onNotification: (notification) { //How many pixels scrolled from pervious frame print(notification.scrollDelta); //List scroll position print(notification.metrics.pixels); }, ),
En plus de la réponse @ seddiq-sorush, vous pouvez comparer la position actuelle à _scrollController.position.maxScrollExtent
et voir si la liste est en bas