是否有明确的 Sliver 小部件列表

Is there any definite list of Sliver widgets

我正在尝试使用 Sliver 来实现可折叠列表 header。当我将小部件从普通小部件更改为 Sliver 时,我经常会遇到这样的错误:

I/flutter ( 3141): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter ( 3141): The following assertion was thrown building NotificationListener<ScrollNotification>():
I/flutter ( 3141): A RenderViewport expected a child of type RenderSliver but received a child of type
I/flutter ( 3141): RenderRepaintBoundary.
I/flutter ( 3141): RenderObjects expect specific types of children because they coordinate with their children during
I/flutter ( 3141): layout and paint. For example, a RenderSliver cannot be the child of a RenderBox because a
I/flutter ( 3141): RenderSliver does not understand the RenderBox layout protocol.
I/flutter ( 3141):

I/flutter ( 3141): The RenderViewport that expected a RenderSliver child was created by:
I/flutter ( 3141):   Viewport ← _ScrollableScope ← IgnorePointer-[GlobalKey#307856652] ← Listener ← _GestureSemantics ←
I/flutter ( 3141):   RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#701223524] ← RepaintBoundary ←
I/flutter ( 3141):   CustomPaint ← RepaintBoundary ← NotificationListener<ScrollNotification> ←
I/flutter ( 3141):   GlowingOverscrollIndicator ← Scrollable ← ⋯
I/flutter ( 3141):
I/flutter ( 3141): The RenderRepaintBoundary that did not match the expected child type was created by:
I/flutter ( 3141):   RepaintBoundary ← NotificationListener<ScrollNotification> ← GlowingOverscrollIndicator ←
I/flutter ( 3141):   Scrollable ← SingleChildScrollView ← Viewport ← _ScrollableScope ←
I/flutter ( 3141):   IgnorePointer-[GlobalKey#307856652] ← Listener ← _GestureSemantics ←
I/flutter ( 3141):   RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#701223524] ← RepaintBoundary ← ⋯
I/flutter ( 3141):

我的理解是这是因为普通的widgets不能直接在Sliver widgets中渲染。

框架中有没有明确的Sliver widgets列表?

sliver.dart 显示不多

RenderSliver 的文档似乎是我们目前拥有的最接近最终 Sliver 文档的东西。

RenderSliver

实现
  • RenderSliverHelpers(混合)
  • RenderSliverMultiBoxAdaptor(摘要)
    • RenderSliverFixedExtentBoxAdaptor(摘要)
      • _RenderSliverPrototypeExtentList(具体)
      • RenderSliverFillViewport(具体)
      • RenderSliverFixedExtentList(具体)
    • RenderSliverGrid(具体)
    • RenderSliverList(具体)
  • RenderSliverPadding(具体)
  • RenderSliverPersistentHeader(摘要)
    • RenderSliverFloatingPersistentHeader(具体)
      • RenderSliverFloatingPinnedPersistentHeader(具体)
    • RenderSliverPinnedPersistentHeader(具体)
    • RenderSliverScrollingPersistentHeader(具体)
  • RenderSliverSingleBoxAdapter(摘要)
    • RenderSliverFillRemaining(具体)
    • RenderSliverToBoxAdapter(具体)

这些 RenderSliver 实现是由以下小部件创建的:

SliverMultiBoxAdaptorWidget 子类:

StatelessWidget 子类:

SingleChildRenderObjectWidget 子类:

所以当您想要生成 RenderSliver 的实例时可以使用这些小部件。

当然,随着时间的推移,很可能会添加越来越多的 RenderSliver 创建小部件,您也可以自己制作!希望这份清单足以让您入门。

截至 2021 年,根据 their docs,这些是一些银色小部件:

SliverAnimatedList

插入或移除项目时动画的条子。

SliverAnimatedOpacity

SliverOpacity 的动画版本,每当给定的不透明度发生变化时,它会在给定的持续时间内自动转换条子 child 的不透明度。

SliverFadeTransition

动画化条形小部件的不透明度。

SliverFillRemaining

包含单个框的条子 child 填充视口中剩余的 space。

SliverFillViewport

包含多个框的条子 children 每个填充视口。

SliverFixedExtentList

将多个具有相同主轴范围的方块children排列成线性阵列的条子。

SliverGrid

将多个盒子 children 二维排列的条子。

SliverIgnorePointer

一个在命中测试期间不可见的条形小部件。

SliverLayoutBuilder

构建一个可以依赖于它自己的 SliverConstraints 的 sliver widget 树。

SliverList

将多个盒子 children 沿主轴线性排列的条子。

SliverOffstage

一个条子,它把它的条子 child 铺开,就好像它在树上一样,但没有画任何东西,没有让条子 child 可用于命中测试,也没有在树中占用任何空间parent.

SliverOpacity

一个 sliver widget 使其 sliver child 部分反式parent.

SliverOverlapAbsorber

包裹另一个的条子,迫使其布局范围被视为重叠。

SliverOverlapAbsorberHandle

提供给 SliverOverlapAbsorber、SliverOverlapInjector 和 NestedScrollViewViewport 的句柄,以在 NestedScrollView 中移动重叠。

SliverOverlapInjector

具有基于 SliverOverlapAbsorberHandle 中存储的值的条子几何形状的条子。

SliverPadding

在另一个条带的每一侧应用填充的条带。

SliverPersistentHeader

一个条子,当条子滚动到与条子的 GrowthDirection 相反的视口边缘时,其大小会发生变化。

SliverPrototypeExtentList

将其盒子 children 放置在线性阵列中并限制它们沿主轴具有与原型项目相同范围的条子。

SliverReorderableList

允许用户以交互方式对列表项重新排序的细长列表。

SliverSafeArea

通过足够的填充插入另一个 sliver 以避免操作系统入侵的 sliver。

SliverToBoxAdapter

包含单个盒子小部件的条子。

SliverVisibility

是否显示或隐藏条子child。