mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
72 lines
3.0 KiB
Dart
72 lines
3.0 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:flutter/rendering.dart';
|
|
import 'package:flutter/scheduler.dart';
|
|
|
|
import 'framework.dart';
|
|
import 'ticker_provider.dart';
|
|
|
|
/// An interface that [Scrollable] widgets implement in order to use
|
|
/// [ScrollPosition].
|
|
///
|
|
/// See also:
|
|
///
|
|
/// * [ScrollableState], which is the most common implementation of this
|
|
/// interface.
|
|
/// * [ScrollPosition], which uses this interface to communicate with the
|
|
/// scrollable widget.
|
|
abstract class ScrollContext {
|
|
/// The [BuildContext] that should be used when dispatching
|
|
/// [ScrollNotification]s.
|
|
///
|
|
/// This context is typically different that the context of the scrollable
|
|
/// widget itself. For example, [Scrollable] uses a context outside the
|
|
/// [Viewport] but inside the widgets created by
|
|
/// [ScrollBehavior.buildOverscrollIndicator] and [ScrollBehavior.buildScrollbar].
|
|
BuildContext? get notificationContext;
|
|
|
|
/// The [BuildContext] that should be used when searching for a [PageStorage].
|
|
///
|
|
/// This context is typically the context of the scrollable widget itself. In
|
|
/// particular, it should involve any [GlobalKey]s that are dynamically
|
|
/// created as part of creating the scrolling widget, since those would be
|
|
/// different each time the widget is created.
|
|
// TODO(goderbauer): Deprecate this when state restoration supports all features of PageStorage.
|
|
BuildContext get storageContext;
|
|
|
|
/// A [TickerProvider] to use when animating the scroll position.
|
|
TickerProvider get vsync;
|
|
|
|
/// The direction in which the widget scrolls.
|
|
AxisDirection get axisDirection;
|
|
|
|
/// Whether the contents of the widget should ignore [PointerEvent] inputs.
|
|
///
|
|
/// Setting this value to true prevents the use from interacting with the
|
|
/// contents of the widget with pointer events. The widget itself is still
|
|
/// interactive.
|
|
///
|
|
/// For example, if the scroll position is being driven by an animation, it
|
|
/// might be appropriate to set this value to ignore pointer events to
|
|
/// prevent the user from accidentally interacting with the contents of the
|
|
/// widget as it animates. The user will still be able to touch the widget,
|
|
/// potentially stopping the animation.
|
|
void setIgnorePointer(bool value);
|
|
|
|
/// Whether the user can drag the widget, for example to initiate a scroll.
|
|
void setCanDrag(bool value);
|
|
|
|
/// Set the [SemanticsAction]s that should be expose to the semantics tree.
|
|
void setSemanticsActions(Set<SemanticsAction> actions);
|
|
|
|
/// Called by the [ScrollPosition] whenever scrolling ends to persist the
|
|
/// provided scroll `offset` for state restoration purposes.
|
|
///
|
|
/// The [ScrollContext] may pass the value back to a [ScrollPosition] by
|
|
/// calling [ScrollPosition.restoreOffset] at a later point in time or after
|
|
/// the application has restarted to restore the scroll offset.
|
|
void saveOffset(double offset);
|
|
}
|