我正在尝试重现一个 UX 设计,其中我们有以下组件:
- 包含文本“Desmos”的顶部栏
- 一个主要的帖子内容,由
- 标题(用户图标、用户名、发布日期、选项按钮)
- 发布消息
- 任何可能存在的帖子图片
- 一个标签栏,允许用户显示评论列表或反应列表。
这种 UX 的特点是,当用户滚动评论或反应列表(基于他当前正在查看的内容)时,垂直滚动列表会捕捉到标签栏。
从那里,用户将能够向下滚动评论列表,或者通过额外的滚动再次显示帖子。请注意,应放置原始帖子,以便用户再次显示它,需要更大的滚动力。
我整理了一个视频,您可以在这里看到,以便更好地了解它应该如何工作:
我已经实现了一个名为的小部件PostContent
,其中包含上述所有帖子的主要内容。我也已经尝试为想要的 UX 编写一些代码,如下所示:
Scaffold(
body: SafeArea(
child: NestedScrollView(
headerSliverBuilder: (context, _) {
return [
SliverAppBar(
backgroundColor: Colors.white,
expandedHeight: 310,
pinned: true,
primary: true,
flexibleSpace: PostContent(post: post),
)
];
},
body: ListView.builder(
itemBuilder: (context, index) {
return Text(index.toString());
},
),
),
),
);
通过单击以下预览可以看到结果:
此实现的问题如下:
- 由于
PostContent
is aColumn
,我怎样才能得到它的高度,这样我就不必在SliverAppBar
'sexpandedHeight
属性中指定一个固定值? - 如何避免在向上
ListView
滚动时,滚动在到达时停止AppBar
而不进一步向上滚动?