Ben*_*min 5 flutter flutter-sliver
我刚刚开始了解 slivers,除了那些以“Sliver”开头的小部件之外,它们似乎不能与任何其他 Flutter 小部件一起使用。我尝试添加一个,Container以便我可以添加BorderRadius来装饰列表。但我收到了这个错误:
RenderSliverFillRemaining 需要 RenderBox 类型的子代,但收到 RenderSliverToBoxAdapter 类型的子代。
到目前为止,这是我的代码:
...
SliverFillRemaining(
child: SliverToBoxAdapter(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(36),
topRight: Radius.circular(36),
),
),
child: SliverPadding(
padding: const EdgeInsets.all(16),
sliver: SliverFixedExtentList(
itemExtent: 50.0,
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Container(
alignment: Alignment.center,
color: Colors.lightBlue[100 * (index % 9)],
child: Text('List Item $index'),
);
},
),
),
),
),
),
),
...
Run Code Online (Sandbox Code Playgroud)
我通过使用 aNestedScrollView而不是 a解决了我的问题CustomScrollView。
return Scaffold(
body: NestedScrollView(
headerSliverBuilder: (context, innerBoxIsScrolled) {
return <Widget>[
SliverAppBar(
floating: false,
pinned: true,
snap: false,
elevation: 0,
expandedHeight: 150.0,
brightness: DynamicTheme.of(context).brightness,
flexibleSpace: FlexibleSpaceBar(
title: Text(assignment.name),
),
),
];
},
body: Container(
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(36),
topRight: Radius.circular(36),
),
),
child: ListView.builder(
itemExtent: 50.0,
itemBuilder: (context, index) {
return Container(
alignment: Alignment.center,
color: Colors.lightBlue[100 * (index % 9)],
child: Text('List Item $index'),
);
},
),
),
),
);
Run Code Online (Sandbox Code Playgroud)
[更新]根据您的用例,我认为您甚至不需要 SliverFillRemaining,如果您希望 SliverFillRemaining 内的列表是无限的,只需将 SliverList 与 SliverChildBuilderDelegate 一起使用
...
SliverFixedExtentList(
itemExtent: 50.0,
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Container(
alignment: Alignment.center,
color: Colors.lightBlue[100 * (index % 9)],
child: Text('List Item $index'),
);
},
),
),
...
Run Code Online (Sandbox Code Playgroud)
以前的
您已经在错误中得到了答案,您 SliverFillRemaining 不使用 sliver,它使用应该是 widget 的 child
...
SliverFillRemaining(
hasScrollBody: true,
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(36),
topRight: Radius.circular(36),
),
),
child: Padding(
padding: const EdgeInsets.all(16),
child: ListView.builder(
itemCount: 20,
physics: NeverScrollableScrollPhysics(), //adding this line will disable the scrolling and listview and so the CustomScrollView should work as a single scroll view
itemBuilder: (_, __) => ListTile(
title: Text("Item"),
),
),
),
),
),
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5288 次 |
| 最近记录: |