我有一个很简单的颤振的应用程序与TabBarView两个视图(标签1和标签2),它们中的一个(标签1)有许多简单的文本部件一个ListView,这个问题是在我向下滚动的ListView的元素标签1,如果我从标签1到标签2,最后我从 标签2刷卡刷卡至T ab 1,ListView中的上一个滚动位置Tab 1迷路了。颤振 - ListView的内部上的TabBarView失去其滚动位置
下面是代码:
import 'package:flutter/material.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage>
with SingleTickerProviderStateMixin {
TabController controller;
@override
void initState() {
super.initState();
controller = new TabController(
length: 2,
vsync: this,
);
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
var tabs = <Tab>[
new Tab(icon: new Icon(Icons.home), text: 'Tab 1'),
new Tab(icon: new Icon(Icons.account_box), text: 'Tab 2')
];
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new TabBarView(controller: controller, children: <Widget>[
new ListView(children: <Widget>[
new Column(children: <Widget>[
new Text('Data 1'),
new Text('Data 2'),
new Text('Data 3'),
new Text('Data 4'),
new Text('Data 5'),
new Text('Data 6'),
new Text('Data 7'),
new Text('Data 8'),
new Text('Data 9'),
new Text('Data 10'),
new Text('Data 11'),
new Text('Data 12'),
new Text('Data 13'),
new Text('Data 14'),
new Text('Data 15'),
new Text('Data 16'),
new Text('Data 17'),
new Text('Data 18'),
new Text('Data 19'),
new Text('Data 20'),
new Text('Data 21'),
new Text('Data 22'),
new Text('Data 23'),
new Text('Data 24'),
new Text('Data 25'),
new Text('Data 26'),
new Text('Data 27'),
new Text('Data 28'),
new Text('Data 29'),
new Text('Data 30'),
new Text('Data 31'),
new Text('Data 32'),
new Text('Data 33'),
new Text('Data 34'),
new Text('Data 35'),
new Text('Data 36'),
new Text('Data 37'),
new Text('Data 38'),
new Text('Data 39'),
new Text('Data 40'),
new Text('Data 41'),
new Text('Data 42'),
new Text('Data 43'),
new Text('Data 44'),
new Text('Data 45'),
new Text('Data 46'),
new Text('Data 47'),
new Text('Data 48'),
])
]),
new Center(child: new Text('Tab 2'))
]),
bottomNavigationBar: new Material(
color: Colors.deepOrange,
child: new TabBar(controller: controller, tabs: tabs),
),
);
}
}
我甚至分离出的TabBarView儿童在另一个类(表1和表2)和我已经注意到,
@override
Widget build(BuildContext context) {
...
}
每次滑动到它的容器选项卡时,都会执行每个子项的方法(选项卡1和选项卡2)。
我的问题是:
1 .-我怎么能保持的ListView的滚动即使我摆脱标签,标签?
2.-有只执行一次的
@override
Widget build(BuildContext context) {
}
方法的方式,如果我分离TabBarView儿童的(标签1和标签2)到另一个类? 我的意思是,如果我必须在创建Tab 1和Tab 2时检索数据,我不希望在每次Tab被刷入时都这样做。这会很昂贵。
3.-一般来说,是否有办法防止每次滑动到该选项卡时重新生成选项卡视图(包括它的变量,数据等)?
在此先感谢您。
我真的不知道** ScrollController **,这是我没有阅读文档的错。毫无疑问,你的回答解决了我的问题,非常感谢!顺便说一句,我认为你得到偏移量的方式已经很清晰了。 – SaloGala
我修改了一下你的代码,以便能够在更多的地方使用它,并创建了一个关于它的中型文章 - https://medium.com/@boldijar.paul/flutter-keeping-list-view-index-而变化的页面 - 视图 - c260352f35f8 –