如何在CustomScrollView中使用非银部件

时间:2019-02-05 19:03:17

标签: dart flutter

我试图将一个文本小部件添加到CustomScrollView中,但是出现类似目标不一样的问题。

这是我的小部件:

@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')
        ],
      ));
}

_buildAppBar方法返回一个SliverAppBar。

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

3 个答案:

答案 0 :(得分:7)

我发现了一种更好的方法,可以在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,
            )
          ],
        ),
      )
    ],
  ),
);

this is the output of the above code

答案 1 :(得分:1)

一旦使用了条子,就需要使用一个条子包装其他非条小部件。由于您想使用Padding,因此实际上可以利用SliverPadding小部件,该小部件接受Text作为其子级。

因此,与其像以前那样拥有Text('test'),不如将其替换为SliverPadding(child: Text('test))

您可能需要注意一些银条小部件。看看here,了解科林·杰克逊(Collin Jackson)接受的答案,以及Slivers, Demystified文章,以更好地理解。

答案 2 :(得分:0)

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