如何在不重建的情况下保存StatelessWidget?

时间:2019-05-13 11:40:49

标签: flutter

我希望在切换选项卡时不应执行StatelessWidget的构建方法。

我正在尝试学习flutter-provide,该语言可以与StatelessWidget结合使用来管理状态,但是其构建方法经常执行。

import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage>  with SingleTickerProviderStateMixin{
  List<Tab>  tabList = [Tab(text:'one'), Tab(text:'two'),];
  List<Widget> bodyList = [PageView("one"), PageView("two"),];

  TabController mController;

  @override
  void initState() {
    super.initState();
    mController = TabController(
      length: tabList.length,
      vsync: this,
    );
  }

  @override
  void dispose() {
    super.dispose();
    mController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: TabBar(
          controller: mController,
          tabs:tabList,)
      ),
      body:TabBarView(
        controller: mController,
        children: bodyList,
      ) ,
    );
  }
}

class PageView extends StatelessWidget {
  final String title;
  PageView(this.title);

  @override
  Widget build(BuildContext context) {
    debugPrint("-- build $title --");
    return Center(child: Container(child:Text(this.title)));
  }
}

切换标签时

I / flutter(27336):-建立两个-

I / flutter(27336):-建立一个-

I / flutter(27336):-建立两个-

I / flutter(27336):-建立一个-

I / flutter(27336):-建立两个-

I / flutter(27336):-建立一个-

I / flutter(27336):-建立两个-

I / flutter(27336):-建立一个-

有什么办法可以解决它,就像实现了wantKeepAlive方法一样?

1 个答案:

答案 0 :(得分:0)

我不是专家,但是我认为Flutter非常聪明,只有在发生实际更改时才重新绘制视图... 因此,在这种情况下,此构建调用是正常的,并且视图不会重新绘制。