如何在 CustomScrollView 中使用非银色小部件

Jos*_*aza 7 dart flutter

我正在尝试向 CustomScrollView 添加一个 Text 小部件,但我遇到了目标不一样的问题。

这是我的小部件:

@override
Widget build(BuildContext context) {
  final double statusBarHeight = MediaQuery.of(context).padding.top;
  return Scaffold(
      key: scaffoldKey,
      body: CustomScrollView(
        semanticChildCount: 2,
        slivers: <Widget>[
          _buildAppBar(context, statusBarHeight),
          Text('test')
        ],
      ));
}
Run Code Online (Sandbox Code Playgroud)

_buildAppBar 方法返回一个 SliverAppBar。

我需要使用 Padding 小部件而不是文本,但我认为它会是一样的,这是同样的问题。

Dha*_*rma 18

我找到了一种在 CustomScrollView 中使用非条子的更好方法,使用 SliverToBoxAdapter 小部件。将您的非 sliver 小部件作为 SliverToBoxAdapter 小部件的子部件并完成您的工作。

return Scaffold(
  body: CustomScrollView(
    slivers: <Widget>[
      SliverToBoxAdapter(
        child: Stack(
          children: <Widget>[
            Container(
              height: 200,
              width: 200,
              color: Colors.green,
            ),
            Positioned(
              child: Container(color: Colors.yellow),
              top: 50,
              left: 50,
            )
          ],
        ),
      )
    ],
  ),
);
Run Code Online (Sandbox Code Playgroud)

这是上面代码的输出


Dmi*_*hin 5

最好的答案是不正确的,它会导致断言padding == null。@blaneyneil 写了正确的解决方案:使用 SliverToBoxAdapter。


Mig*_*ivo -6

一旦您使用了 slivers,您就需要使用 sliver child 来包裹其他非 sliver 小部件。既然您想使用Padding,您实际上可以利用该SliverPadding小部件,该小部件接受您Text作为其子项。

因此,与其拥有Text('test')现有的,不如用替代的SliverPadding(child: Text('test))

您可能需要了解一些条子小部件。请查看Collin Jackson 接受的答案以及Slivers,Demystified文章,以便更好地理解。

  • `SliverPadding` 中没有这样的字段 `child`。它只能用来包裹另一条棉条。请改用 `SliverToBoxAdapter`。 (4认同)