我需要在應用程式重新啟動時恢復串列視圖中的最后一個滾動位置。我正在使用 listview.builder & scroll controller 來保存和恢復偏移量,但是 listview 沒有滾動到之前的位置,而是從頂部開始。我甚至試過在共享偏好中保存滾動位置,并在應用程式重新啟動時檢索,但沒有結果。如果有人能幫助我& 使其作業,我將非常感激。謝謝你
。class DoubleHolder {
double value = 0.0;
}
class ListViewScreen3 extends StatefulWidget{
String itemHolder。
final DoubleHolder offset = new DoubleHolder()。
ListViewScreen3({Key key, @required this.itemHolder}) : super(key: 關鍵)。
double getOffsetMethod() {
return offset.value。
}
void setOffsetMethod(double val) {
offset.value = val;
}
ListViewScreenState3 createState() => new ListViewScreenState3();
}
@override
class ListViewScreenState3 extends State < ListViewScreen3> {
ScrollController _controller;
@override
void initState() {
super.initState()。
getAllSavedData();
_controller = new ScrollController(
initialScrollOffset: widget.getOffsetMethod()
);
}
@override
Widget build(BuildContext context) {
// TODO: Implement build
/// Future.delayed(Duration(second: 2), () {load();});
final makeBody = Container(
裝飾。BoxDecoration(
color: light_mode ? Color(0xFFFFFFFF) : Color(0xFF6D6D))。)
child: returnListView())。
}
小工具returnListview() {
return Column(
textDirection: TextDirection.rtl,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch。
兒童。[
new Expanded(
孩子。SizedBox(
高度。200.0,
孩子。 new NotificationListener(
孩子。ListView.builder(
控制器。_controller,
itemCount: ((surahcountlist.length)/2).toInt()。
itemBuilder: (context, index) {
return GestureDetector(
孩子。Card(
color: light_mode
? Colors.white
: Color(0xFF6D6D)。
兒童。Column(
textDirection: TextDirection.rtl,
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.stretch。
children: <Widget>[
showBSMLSV(index),
包裹(
方向。Axis.horizontal,
對齊。WrapAlignment.start,
運行對齊方式。WrapAlignment.center,
textDirection: TextDirection.rtl,
spacing: 2.0。
//相鄰芯片之間的間隙。
runSpacing: 5.0。
children: makeSurahListview(
surahcountlist[index].surah_no,
surahcountlist[index].ayah_no,
surahcountlist[index].count,
索引))。)
])));
}),
onNotification: (notification) {
if (notification is ScrollNotification) {
widget.setOffsetMethod(notification.metrics.pels)。
}}
)
))],
);
}
uj5u.com熱心網友回復:
我有兩個猜測,請檢查一下,看看哪一個可以作業。
首先,我認為你需要給listview一些時間來建立,然后跳到你想要的位置。基本上只要在初始化滾動控制器后,在initState方法中添加Future.delayed即可
Future.delayed(Duration(seconds:
1),(){controller.jumpto();}) 。
第二點是,我認為這是因為你使用了listview.builder。這個小組件是邊走邊建立它的孩子,所以如果你保持第10個孩子的位置,它將無法到達那里,因為它還沒有建立它。我認為你需要使用listview,對于它的孩子,使用List.generate()
。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/315674.html
標籤:
上一篇:在StackScreen標頭選項中設定TouchableOpacity時如何解決navigation.navigate錯誤?
下一篇:小部件的生命周期問題
