颤振滚动控制器如何工作,如何执行



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;

如果您随后查看ScrollViewbuild()函数,您将看到此 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更好地了解它们的工作原理。

最新更新