Flutter Tab非相邻标签切换时会多一次 createState?

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呢?

阅读 2.5k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏