gpt4 book ai didi

flutter - StatefulWidget 在导航中被释放

转载 作者:IT王子 更新时间:2023-10-29 07:20:50 25 4
gpt4 key购买 nike

我有一个包含 ListView 的有状态小部件 MyList。在点击任何列表 block 时,新屏幕 (MyScreen) 打开,返回后(通过按左上角的后退按钮)滚动位置丢失,因为 MyList 被处置并且 initState 再次运行。如何防止 MyList 被释放?

class MyList extends StatefulWidget {
@override
_MyListState createState() => new _MyListState();
}

class _MyListState extends State<MyList> {
List<String> items = new List.generate(20, (index) => 'Hello $index');

@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Scrollbar(
child: new ListView.builder(
itemBuilder: (context, index) {
return new ListTile(
title: Text(items[index] + ' index $index'),
onTap: () {
Navigator.push(
context,
new MaterialPageRoute(
builder: (BuildContext context) => new MyScreen(index),
));
},
);
},
itemCount: items.length,
),
),
);
}
}

这是我的屏幕:

class MyScreen extends StatefulWidget {
final int indx;
MyScreen(this.indx);
_TaskDetailState createState() => new _TaskDetailState();
}

class _TaskDetailState extends State<MyScreen> {
@override
void initState() {
super.initState();
}

Widget build(context) {
return Scaffold(
appBar: AppBar(
elevation: 0.0,
title: Text('yoba'),
),
body: Text('yoba ${widget.indx}'),
);
}
}

最佳答案

您需要添加一个 PageStorageKey到您的 ListView 小部件。

class _MyListState extends State<MyList> {
List<String> items = new List.generate(20, (index) => 'Hello $index');

@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Scrollbar(
child: new ListView.builder(
key: PageStorageKey("MyList"), // <-- Add this line
itemBuilder: (context, index) {
return new ListTile(
title: Text(items[index] + ' index $index'),
onTap: () {
Navigator.push(
context,
new MaterialPageRoute(
builder: (BuildContext context) => new MyScreen(index),
));
},
);
},
itemCount: items.length,
),
),
);
}
}

关于flutter - StatefulWidget 在导航中被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55711100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com