如何使ListView.builder
能够滚动到顶部和底部的空白处?
例如,我有一个自定义窗口小部件列表,我希望用户能够通过滚动到列表上方的卡片(位于屏幕顶部)更靠近他的拇指,而Flutter
则用空白背景渲染顶部空间。
我的代码的基本形状是ListView.builder
构造函数的基本实现:
ListView.builder(
itemCount: widgetsList.length,
itemBuilder: (context, index){
return widgetsList[index];
},
),
到目前为止,我尝试摆弄一些ListView.builder
's properties和一些变通办法:
shrinkWrap: true
或physics: AlwaysScrollableScrollPhysics()
—也许我必须设置parent
的{{1}}参数? —可以胜任,但似乎都不起作用。AlwaysScrollableScrollPhysics()
并添加Container
之类的东西来人为地做到这一点,我不认为这就是您的方式实际使用dragStartBehavior: DragStartBehavior.values[1]
属性-使列表从第二个值开始,但不起作用。答案 0 :(得分:1)
如果我理解正确,那么最好的选择是使用CustomScrollView
,并且在SliverAppBar
中使用可扩展的空间。
Widget build(BuildContext context) {
return Scaffold(
body: CustomScrollView(
slivers: [
SliverAppBar(
automaticallyImplyLeading: false, // gets rid of the back arrow
expandedHeight: 250, // the collapsible space you want to use
flexibleSpace: FlexibleSpaceBar(
background: Container(
color: Colors.transparent
),
),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
// put your widgetsList here
},
childCount: widgetsList.length,
),
),
]
),
);
}
答案 1 :(得分:0)
您可以通过“ Container
解决方法来实现。您可以使用ScrollController
并将其initialScrollOffset
放在顶部Container
的结尾处。我后来才发现through this other StackOverflow question。
ScrollController
。
ScrollController scrollController = ScrollController(
initialScrollOffset: 10, // or whatever offset you wish
keepScrollOffset: true,
);
ListView
ListView.builder(
controller: scrollController,
itemCount: widgetsList.length,
itemBuilder: (context, index){
return widgetsList[index];
},
),
此外,您甚至可能想要为背景滚动动作创建动画。这可以通过在小部件的.animateTo
中使用initState
方法来实现。