Flutter Tab切换非相邻标签时会多一次createState?
Flutter使用Tab标签,每个标签对应一个StatefulWidget,相邻之间的标签切换没有问题,但是跨标签切换的时候,切换前的当前标签会在切换前执行一次createState,跟踪发现并没有多次实例化。
比如如下代码:
import 'package:flutter/material.dart';
class TabPage extends StatelessWidget {
final List<String> _tabs = ['社会', '新闻', '本地', '旅行', '图片'];
@override
Widget build(BuildContext context) {
return new DefaultTabController(
length: this._tabs.length,
child: Scaffold(
appBar: AppBar(
backgroundColor: Colors.orangeAccent,
title: TabBar(
tabs: this._tabs.map((s) => Tab(text: s)).toList(),
indicatorColor: Colors.deepOrange,
isScrollable: true,
labelColor: Colors.red,
),
),
body: TabBarView(children: this._tabs.map((t) => _TabView(t)).toList()),
)
);
}
}
class _TabView extends StatefulWidget {
final String title;
_TabView(this.title);
@override
State<StatefulWidget> createState() => _TabViewState();
}
class _TabViewState extends State<_TabView> with AutomaticKeepAliveClientMixin {
@override
void initState() {
super.initState();
print('initState: ${widget.title}');
}
@override
void dispose() {
super.dispose();
print('dispose: ${widget.title}');
}
@override
Widget build(BuildContext context) {
super.build(context);
return Center(
child: Text(widget.title),
);
}
@override
bool get wantKeepAlive => true;
}
当从“社会”切换到“新闻”的时候,没有问题,但是如果直接从“社会”切换到“本地”,则“社会”页面会执行createState
,然后才是”本地“页面createState
,凡是类似的跨标签都会发生这样的情况。
为什么Tab的StatefulWidget在切换前会调用createState
呢?
环境:Flutter 1.5.9-pre.258 • channel master • https://github.com/flutter/fl...
我试了一下,我这里工作正常啊.你试试升级 flutter