📅  最后修改于: 2023-12-03 15:42:31.376000             🧑  作者: Mango
在Flutter中,我们可能会经常遇到需要展现一个列表的情况。而在滚动这个列表时,Flutter会自动默认使用一个滚动动画来让用户有更好的体验。但是,在某些情况下,你可能不希望出现这个滚动动画,比如在加载大量数据时,滚动动画会消耗大量的性能,从而导致用户体验变差。这时,我们可以使用“颤振禁用滚动动画”的方法来提升用户体验。
在Flutter中禁用列表滚动动画很简单。你只需要使用以下代码即可:
ListView.builder (
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
// TODO: build your list
},
itemCount: 100,
),
其中 NeverScrollableScrollPhysics
可以禁用所有的滚动效果,也可以只禁用特定的滚动效果。
“颤振”技术原本是一种航空领域的术语,意思是在飞机或者火箭进入稳定状态前所发生的一种振荡。在Flutter中,“颤振”技术指的是禁用滚动动画,在用户手动滑动后,列表滚动的场景。这样可以提供更加灵敏的交互体验,让用户能更加快速地找到自己需要的内容。
下面是一个使用“颤振”技术的列表示例,帮助你更好地理解这个技术是如何工作的:
class MyList extends StatefulWidget {
const MyList({Key? key}) : super(key: key);
@override
_MyListState createState() => _MyListState();
}
class _MyListState extends State<MyList> {
List<int> data = List.generate(1000, (index) => index);
bool _canScroll = true;
@override
Widget build(BuildContext context) {
return NotificationListener<OverscrollIndicatorNotification>(
onNotification: (_) {
setState(() {
_canScroll = false;
});
return false;
},
child: NotificationListener<UserScrollNotification>(
onNotification: (_) {
setState(() {
_canScroll = false;
});
return true;
},
child: SingleChildScrollView(
physics: AlwaysScrollableScrollPhysics(),
child: Column(
children: [
ListView.builder(
shrinkWrap: true,
physics: _canScroll
? const NeverScrollableScrollPhysics()
: const AlwaysScrollableScrollPhysics(),
itemBuilder: (context, index) => ListTile(title: Text(data[index].toString())),
itemCount: data.length,
),
],
),
),
),
);
}
}
上面的代码中,我们使用 a NotificationListener 来监听滚动事件,如果用户手动滑动列表,则禁用颤振,在用户停止滑动后,重新启动颤振。 这样做可以提供一个无缝的用户体验,配合灵敏的触屏和“颤振”技术,用户可以非常迅速地滑动到自己需要的内容。