如何实现嵌套条子?包含条子列表的条子

Zac*_*ter 8 dart flutter flutter-sliver

SliverList是一个包含盒子小部件的条子。是否有包含条子小部件的条子?

我试图嵌套 flutter_sticky_headers 来创建时间线,但SliverStickyHeader只接受单个条子作为参数(请参阅 中的注释monthSlivers())。

class HomeView extends StatelessWidget {
  final HomeViewModel viewModel;

  HomeView(this.viewModel);

  List<Widget> entryTiles(List<EntryTileViewModel> entryVMs) {
    return entryVMs.map((entryVM) => EntryTile(viewModel: entryVM)).toList();
  }

  List<Widget> daySlivers(List<DaySection> daySections) {
    return daySections.map((daySection) {
      var entries = entryTiles(daySection.entryVMs);
      return SliverStickyHeader(
        overlapsContent: true,
        header: DayHeader(
          viewModel: DayHeaderViewModel(date: daySection.date),
        ),
        sliver: SliverList(
          delegate: SliverChildBuilderDelegate(
                (context, i) => entries[i],
            childCount: entries.length,
          ),
        ),
      );
    }).toList();
  }

  List<Widget> monthSlivers() {
    return viewModel.monthSections.map((monthSection) {
      var days = daySlivers(monthSection.daySections);
      return SliverStickyHeader(
        header: MonthHeader(
          viewModel: MonthHeaderViewModel(date: monthSection.date),
        ),
        sliver:,// THIS IS WHERE I WANT TO PUT DAYSLIVERS().
      );
    }).toList();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: CustomScrollView(
        slivers: monthSlivers(),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

Hos*_*adi 8

您可以使用该sliver_tools包。它有一个名为的小部件MultiSliver,您可以通过它实现所需的结果。正如文档提到的:

MultiSliver 小部件允许将多个条子分组在一起,以便它们可以作为单个小部件返回。例如,当有人想要用一些填充或继承的小部件包裹一些条子时。

这是一个例子:

class WidgetThatReturnsASliver extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiSliver(
      children: <Widget>[
        SliverPersistentHeader(...),
        SliverList(...),
      ],
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

或者你可以在 a 中使用它CustomScrollView

CustomScrollView(
  slivers:[
    MultiSliver(
      SliverList(...),
      SliverGrid(...),
      ...
    )
  ]
)
Run Code Online (Sandbox Code Playgroud)