flutter - 如何为所有页面制作一个 CustomScrollView
问题描述
我有一个主页,根据模型的不同,它显示在CustomScrollView中,并 分割了其他页面。
例子:
CustomScrollView(
physics: _bouncingScrollPhysics,
controller: _scrollController,
slivers: <Widget>[
_pages[_selectedTab]
],
),
我不想CustomScrollView
在每个页面上复制控制器和物理,所以这个解决方案对我来说似乎很实用。但是我遇到了这样一个问题,如果页面类返回,比如一个SliverList
,那么一切正常,但是如果类需要返回多个呢?
@override
Widget build(BuildContext context) {
return SliverList() //OK
}
@override
Widget build(BuildContext context) {
return ...[
SliverList(),
SliverList()
]; // NOT OK
}
解决方案
创建用于存储条子信息的类
class SliverListInfo {
final SliverAppBar sliverList;
final SliverList sliverAppBar;
SliverListInfo(this.sliverAppBar, this.sliverList);
}
在你想使用的State
类里面StatefullWidget
CustomScrollView
class _SliverTestState extends State<SliverTest> {
/// Selected tab pane
int _selectedTab;
/// List of sliver information
final sliverLists = <SliverListInfo>[];
@override
void initState() {
super.initState();
// Populate items
sliverLists.add(SliverListInfo(SliverAppBar(...),
SliverList(delegate: SliverChildBuilderDelegate),
)); // page 1
sliverLists.add(SliverListInfo(SliverAppBar(...),
SliverList(delegate: SliverChildListDelegate),
)); // page 2
...
}
@override
void build(BuildContext context) {
return CustomScrollView(
physics: _bouncingScrollPhysics,
controller: _scrollController,
slivers: sliverLists[_selectedTab],
);
}
}
PS Widget 可以像任何其他对象一样创建。build
仅当小部件嵌入到小部件树中以对其进行可视化时才使用此功能。
推荐阅读
- python - 执行时额外的空白 tkinter GUI
- java - 试图在 IntelliJ IDEA 中创建 jar 可执行文件
- python - 使用 OR 工具将取货和交付的成本降至最低
- excel - 检查所有工作表的真实值,在 VBA 中获得一个带有“无差异”的消息框
- c++ - 将 1 个浮点数从数组传递到每个顶点的顶点着色器
- mysql - 在 AWS EC2 上使用 mongosqld 时如何查看通过 AWS DocumentDB 托管的 MongoDB
- c# - 如何绘制图像轮廓内的内容,但将其他所有内容留空?
- pyspark - Pyspark:无法执行用户定义的函数($anonfun$1: (double) => double)
- javascript - 正则表达式来定义替换的出现次数
- javascript - 播放歌曲时暂停时出现 Tonejs Transport 错误