Flutter:我是 Flutter 的新手,我想知道它们如何在幕后工作(当我们将滚动控制器附加到可滚动小部件时实际会发生什么。 我阅读了文档,但我很难理解。
controller: ** _controller **,
scrollDirection: Axis.vertical,
child: Wrap(
// direction: Axis.horizontal,
crossAxisAlignment: WrapCrossAlignment.center,
spacing: 4.0,
runSpacing: 4.0,
children: *MY WIDGET*,
),```
这是一个很好的问题,也是我很好奇的事情。如果您使用的是ListView
,它会对另一个名为BoxScrollView
的类进行子类化,该类本身ScrollView
子类,如果您查看以下代码,它实际上是保留ScrollController
实例的ScrollView
:
/// {@template flutter.widgets.scroll_view.controller}
/// An object that can be used to control the position to which this scroll
/// view is scrolled.
///
/// Must be null if [primary] is true.
///
/// A [ScrollController] serves several purposes. It can be used to control
/// the initial scroll position (see [ScrollController.initialScrollOffset]).
/// It can be used to control whether the scroll view should automatically
/// save and restore its scroll position in the [PageStorage] (see
/// [ScrollController.keepScrollOffset]). It can be used to read the current
/// scroll position (see [ScrollController.offset]), or change it (see
/// [ScrollController.animateTo]).
/// {@endtemplate}
final ScrollController? controller;
如果您随后查看ScrollView
的build()
函数,您将看到此 gem:
@override
Widget build(BuildContext context) {
final List<Widget> slivers = buildSlivers(context);
final AxisDirection axisDirection = getDirection(context);
final ScrollController? scrollController =
primary ? PrimaryScrollController.of(context) : controller;
final Scrollable scrollable = Scrollable(
dragStartBehavior: dragStartBehavior,
axisDirection: axisDirection,
controller: scrollController,
您看到将controller
作为参数的Scrollable
实例了吗?
我不会粘贴更多代码,因为它可能会很长,但我建议您继续查看源代码以获取Scrollablle
,并ScrollView
更好地了解它们的工作原理。