【问题标题】:Is there any definite list of Sliver widgets是否有明确的 Sliver 小部件列表
【发布时间】:2017-06-12 07:12:59
【问题描述】:

我正在尝试使用 Sliver 来实现可折叠列表标题。当我将小部件从正常更改为 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):

我的理解是这是因为普通小部件不能直接用于在 Sliver 小部件中进行渲染。

框架中是否有明确的 Sliver 小部件列表?

sliver.dart 显示不多

【问题讨论】:

  • 附加问题:为什么 sliver 小部件不是一种类型?为什么 Flutter 在编译时无法检查 sliver 兼容性?

标签: flutter flutter-sliver


【解决方案1】:

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-creating 小部件,您也可以自己制作!希望这份清单足以让您入门。

【讨论】:

    【解决方案2】:

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

    SliverAnimatedList

    在插入或移除项目时为项目设置动画的条子。

    SliverAnimatedOpacity

    SliverOpacity 的动画版本,只要给定的不透明度发生变化,它就会在给定的持续时间内自动转换 sliver 子项的不透明度。

    SliverFadeTransition

    为 sliver 小部件的不透明度设置动画。

    SliverFillRemaining

    包含一个填充视口中剩余空间的单个盒子子元素的条子。

    SliverFillViewport

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

    SliverFixedExtentList

    将多个具有相同主轴范围的子框放置在线性数组中的条子。

    SliverGrid

    在二维排列中放置多个盒子子元素的条子。

    SliverIgnorePointer

    在命中测试期间不可见的 sliver 小部件。

    SliverLayoutBuilder

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

    SliverList

    将多个盒子子元素沿主轴放置在线性阵列中的条子。

    SliverOffstage

    一个 sliver 将其 sliver 子项放在树上,但没有绘制任何内容,没有使 sliver 子项可用于命中测试,并且不占用父项中的任何空间。

    SliverOpacity

    使其 sliver 子项部分透明的 sliver 小部件。

    SliverOverlapAbsorber

    包裹另一个的条子,强制将其布局范围视为重叠。

    SliverOverlapAbsorberHandle

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

    SliverOverlapInjector

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

    SliverPadding

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

    SliverPersistentHeader

    当 sliver 滚动到与 sliver 的 GrowthDirection 相对的视口边缘时,其大小会发生变化。

    SliverPrototypeExtentList

    将其盒子子项放置在线性数组中并约束它们沿主轴具有与原型项目相同的范围的条子。

    SliverReorderableList

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

    SliverSafeArea

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

    SliverToBoxAdapter

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

    SliverVisibility

    是否显示或隐藏 sliver 子项。

    【讨论】:

      猜你喜欢
      • 2016-02-12
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 2018-12-30
      • 2011-05-16
      • 2020-07-21
      • 1970-01-01
      相关资源
      最近更新 更多