我有一個很簡單的顫振的應用程序與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 –