如何在SliverToBoxAdapter中实现可滚动列表

8

我正在CustomScrollView中使用以下的SliverToBoxAdapter:

        SliverToBoxAdapter(
            child: Stack(
            children: <Widget>[
              Container(
                width: double.infinity,
                height: 50,
                decoration: BoxDecoration(color: pink),
              ),
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 30),
                child: ListView.builder(
                  padding: const EdgeInsets.all(0),
                  shrinkWrap: true,
                  itemBuilder: (context, index) {
                    return buildSongRow(songs[index]);
                  },
                  itemCount: songs.length,
                ),
              )
            ],
          ))

问题在于列表不会滚动,这很显然是因为它具有框约束。我在这里使用SliverToBoxAdapter,因为我必须将我的列表叠放在列表顶部的某个Container上。如何使我的列表滚动? 如果无法使用SliverToBoxAdapter完成,我还有其他选择吗?
1个回答

4
可以通过添加与父CustomScrollView相同的scrollController来使Listview可滚动。
class ScrollExample extends StatelessWidget {
  final scrollController = ScrollController();
  @override
  Widget build(BuildContext context) {
    return CustomScrollView(
      //  add scrollController to sliver root
      controller: scrollController,
      slivers: <Widget>[
        SliverToBoxAdapter(
          child: Card(
            child: ListView.builder(
              //  add the same scrollController here
            controller: scrollController,
              shrinkWrap: true,
              itemCount: 19,
              itemBuilder: (BuildContext context, int index) {
                return Text("ibnShamas");
              },
            ),
          ),
        ),
      ],
    );
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接