将flutter的CustomScrollView元素提取到小部件中

时间:2019-11-05 19:55:55

标签: flutter flutter-layout

我试图将2个Slivers元素提取到一个单独的Widget中。但是无法实现...有什么想法吗? 这是原始代码:

CustomScrollView(
  slivers: <Widget>[
    SliverPersistentHeader(
      pinned: false,
      delegate: WidgetOne(),
    ),
    SliverPersistentHeader(
      pinned: true,
      delegate: WidgetTwo(),
    ),
    WidgetThree(),
  ],
)

想法是要有这样的东西:

CustomScrollView(
  slivers: <Widget>[
    SliverPersistentHeader(
      pinned: false,
      delegate: WidgetOne(),
    ),
    ExtractedWidget()
  ],
)

class ExtractedWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return .... 
    // What should be here? Containers etc returns error...
    SliverPersistentHeader(
      pinned: true,
      delegate: WidgetTwo(),
    ),
    WidgetThree(),
  }
}

谢谢! PS:此代码的整个逻辑是,首先放置一个固定高度的块,下面放置另一个具有一定高度的块,最后一个是包含各种元素的 list 。事实是,滚动 second 块时应固定。这就是为什么我用这种条子。

1 个答案:

答案 0 :(得分:1)

您只能像以下示例一样退回条子:

class ExtractedWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return SliverPersistentHeader(
      pinned: true,
      delegate: WidgetTwo(),
    );
  }
}

如果您想返回一棵小部件树,则必须找到一个可以容纳该小部件的容器,例如SliverToBoxAdapter,但我不知道SliverPersistentHeader是否可以放置在另一个条子中容器。希望能对您有所帮助。