是否有明确的 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。
我正在尝试使用 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。