【发布时间】:2018-01-02 15:33:05
【问题描述】:
我有一个非常简单的 Flutter 应用,它有一个 TabBarView 和两个视图(Tab 1 和 Tab 2),其中一个(Tab 1) 有一个带有许多简单文本小部件的 ListView,问题是在我向下滚动 Tab 1 的 ListView 元素后,如果我从 Tab 滑动1 到 Tab 2 最后我从 Tab 2到Tab 1,Tab 1的ListView中之前的滚动位置会丢失。
代码如下:
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 childrens(Tab 1 和 Tab 2)分隔在另一个类中,我注意到
@override
Widget build(BuildContext context) {
...
}
每次我滑动到它的容器选项卡时,都会执行每个子项(Tab 1 和 Tab 2)的方法。
我的问题是:
1.- 即使我在标签之间移动,如何保持 ListView 的滚动?
2.- 有没有办法执行
@override
Widget build(BuildContext context) {
}
如果我将 TabBarView 子类(Tab 1 和 Tab 2)分离到另一个类,则只使用一次方法? 我的意思是,如果我必须在创建 Tab 1 和 Tab 2 时检索数据,我不想每次刷入 Tab 时都这样做。那会很昂贵。
3.- 一般来说,有没有办法防止每次滑动到该选项卡时重新构建选项卡视图(包括它的变量、数据等)?
提前致谢。
【问题讨论】: