![](/img/trans.png)
[英]Flutter ListView.builder creates an infinite scroll. How can I set it to stop at the end of content?
[英](Flutter) Infinite Scroll `ListView.builder` with Finite Content
如何讓我的ListView.builder
能夠滾動到頂部和底部的空白空間?
例如,我有一個自定義小部件列表,我希望用戶能夠通過滾動到列表中的頂部卡片(位於屏幕頂部)更靠近他的拇指,同時Flutter
呈現背景為空的頂部空間。
我的代碼的基本形狀是ListView.builder
構造函數的基本實現:
ListView.builder(
itemCount: widgetsList.length,
itemBuilder: (context, index){
return widgetsList[index];
},
),
到目前為止,我已經嘗試擺弄ListView.builder
的一些屬性以及一些解決方法:
shrinkWrap: true
要么physics: AlwaysScrollableScrollPhysics()
——也許我必須設置AlwaysScrollableScrollPhysics()
的parent
參數? - 會做這項工作,但他們似乎都沒有工作。Container
並添加類似dragStartBehavior: DragStartBehavior.values[1]
之類的東西來人為地做到這一點——我認為這不是你使用.values
的方式屬性實際上 - 使列表從第二個值開始,但它不起作用。如果我理解正確,您最好的選擇是在SliverAppBar
中使用具有可擴展空間的CustomScrollView
。
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,
),
),
]
),
);
}
這可以通過您的“ Container
解決方法”來實現。 您可以使用ScrollController
並將其initialScrollOffset
放在頂部Container
結束處。 這是我后來通過另一個 StackOverflow 問題才發現的。
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]; }, ),
此外,您甚至可能想要為背景滾動動作創建動畫。 這可以通過在小部件的initState
中使用.animateTo
方法來實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.