首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SliverPersistentHeader不使用CustomScrollView

SliverPersistentHeader不使用CustomScrollView
EN

Stack Overflow用户
提问于 2022-04-06 14:15:57
回答 1查看 502关注 0票数 0

我有一个CustomScrollView,看起来像:

代码语言:javascript
复制
CustomScrollView(
  slivers: [
    SliverPersistentHeader(
      floating: true,
      delegate: MyPersistentHeaderDelegate(),
    ),
    SliverList(...),
  ],
)

因为我不得不更改布局以使用砖石布局,所以我使用的是flutter_staggered_grid_viewMasonryGridView。问题是它不支持条子,因此我不能在CustomScrollView中使用它。

问题是,我现在如何仍然使用我的SliverPersistentHeader (/Delegate)而不使用CustomScrollView?

我尝试过使用NestedScrollView,但是所有的示例都只显示了它如何使用CustomScrollView:

代码语言:javascript
复制
NestedScrollView(
  floatHeaderSlivers: true,
  headerSliverBuilder: (BuildContext _, bool innerBoxIsScrolled) {
    return <Widget>[
        SliverOverlapAbsorber(
            handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
            sliver: SliverPersistentHeader(
                delegate: MyPersistentHeaderDelegate(),
                floating: true,
            ),
        ),
    ];
  },
  body: CustomScrollView(
    sliver: [
        SliverOverlapInjector(handle: handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context)),

        // wont work in sliver because it uses its own scroll view
        MasonryGridView.builder(),
    ]
  )
),   
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-06 14:59:45

实际上,您可以在一个SliverMasonryGrid中使用CustomScrollView小部件,如视图的wiki中所解释的那样。

下面是一个代码示例,它受到对我工作良好的文档的启发:

代码样本

代码语言:javascript
复制
class SliverMasonryPage extends StatelessWidget {
  const SliverMasonryPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: CustomScrollView(
        slivers: [
          SliverPersistentHeader(
            floating: true,
            delegate: MyPersistentHeaderDelegate(),
          ),
          SliverMasonryGrid.count(
            childCount: 100,
            crossAxisCount: 4,
            itemBuilder: (_, i) => Container(
              margin: const EdgeInsets.all(8),
              padding: const EdgeInsets.all(16),
              alignment: Alignment.center,
              decoration: BoxDecoration(
                color: Colors.blue,
                borderRadius: BorderRadius.circular(12),
              ),
              child: Text('$i'),
            ),
          ),
        ],
      ),
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71768432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档