Flutter NotificationListener with ScrollNotification vs ScrollController. It’s my demo use NotificationListener with ScrollController. After drag a litter left, the blue part will automatic move.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { List<Widget> list = []; for (int i = 0; i < 100; i++) list.add(buildContainer()); return Scaffold( body: ListView(children: list)); } Widget buildContainer() { ScrollController _scrollController = ScrollController(); return NotificationListener<ScrollNotification>( onNotification: (scrollState) { if (scrollState is ScrollEndNotification && scrollState.metrics.pixels != 160) { Future.delayed(const Duration(milliseconds: 100), () {}).then((s) { _scrollController.animateTo(160, duration: Duration(milliseconds: 500), curve: Curves.ease); }); } return false; }, child: Container( height: 160, margin: EdgeInsets.only(bottom: 1), child: ListView( shrinkWrap: true, scrollDirection: Axis.horizontal, controller: _scrollController, children: <Widget>[ Container( width: 360, height: 20, color: Colors.red, ), Container( width: 160, height: 20, color: Colors.blue, ), ], ), ), ); } } |
If you like this question & answer and want to contribute, then write your question & answer and email to freewebmentor[@]gmail.com. Your question and answer will appear on FreeWebMentor.com and help other developers.