当使用 Navigator
路由主 ListView
及其详细信息 ItemView
时,ListView
的滚动位置丢失返回堆栈。
如何恢复ListView
滚动位置?
重用 ListView
小部件也失去了位置 - 在 flutter 示例中也看不到重用 Widget。
Rainer 要求的示例代码,
Widget build(BuildContext context) {
return new MaterialApp(
routes: <String, WidgetBuilder>{
'/': (BuildContext context) => new MyListView(),
},
onGenerateRoute: (RouteSettings s) {
final List<String> paths = name.split('/');
...
return new new ItemView(paths[1])
}
}
在 MyListView
中,当 ItemRow.onTab => Navigator.pushNamed(c, '/item/1')
时。
在ItemView
返回按钮调用Navigator.pushNamed('/');
两个Widget都是有状态的
最佳答案
这应该有效。这是一些示例代码。
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(
home: new MyHomePage(),
));
}
class MyHomePage extends StatelessWidget {
Widget build(BuildContext context) {
return new Scaffold(
body: new ListView(
children: new List.generate(100, (int index) {
return new ListTile(
title: new Text('Item $index'),
onTap: () {
Navigator.push(
context,
new MaterialPageRoute(
builder: (BuildContext context) {
return new Scaffold(
body: new Center(
child: new RaisedButton(
child: new Text('Pop!'),
onPressed: () => Navigator.pop(context),
),
),
);
},
),
);
},
);
},
),
),
);
}
}
确保您使用的是 Navigator.pop()
而不是 Navigator.pushNamed('/');
返回。如果它不起作用,请发布更多代码或 file an issue .
关于Flutter:如何恢复 ListView 的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812655/