flutter - 如何设置状态()而不是重建 TabBarView 中的选项卡
问题描述
我有这个问题,我有一个主页,其中有标签。我喜欢切换选项卡以使TabBar
所选选项卡显示为黑色,并且我想更改整个选项卡的颜色Scaffold
。所以我还制作了一个自定义控制器并像这样使用它:
TabController _controller;
@override
void initState() {
super.initState();
_controller = TabController(vsync: this, length: 5);
_controller.index = 1;
_controller.addListener(() {
if (!_controller.indexIsChanging) {
setState(() {
scaffoldColor = colors[_controller.index];
});
}
});
}
问题是,通过这种方式,我的所有选项卡都将被重建,这非常糟糕,因为我在其中很少有繁重的任务。我也在AutomaticKeepAliveClientMixin
所有选项卡中使用过,但它没有解决问题。顺便说一句,我是这样使用它的:
class Tab1 extends StatefulWidget {
@override
_Tab1State createState() => _Tab1State();
}
class _Tab1State extends State<Tab1> with AutomaticKeepAliveClientMixin {
@override
Widget build(BuildContext context) {
super.build(context);
print("Tab 1 Has been built");
return Text("TAB 1");
}
@override
// TODO: implement wantKeepAlive
bool get wantKeepAlive => true;
}
解决方案
如果对于繁重的任务意味着未来,你应该把它放在initState
.
看到这个答案:如何在 Flutter 中只加载一次异步流?.
推荐阅读
- php - 如何解决php中的CURL HTTP代码400请求?
- arrays - 我无法在jsp中显示servlet传入的数组
- django - 反应中的单选按钮没有响应
- node.js - 我在客户端(角度 8)发出了一个 http post 请求,但在服务器端(node.js)未定义
- date - 我的日期“yyyy-MM-dd HH:mm:ss +5:30”的正确弹性搜索日期格式是什么?我需要准确的格式,以便我可以在 DSL 查询中查询此日期
- coefficients - 我需要三角函数的 Coefficientlist
- xslt - 分析xslt中的数字
- ios - 将UTC时间转换为当前时区时间时转换为错误时间
- function - 如何在 dolphindb 中声明一个空对象?
- swift - 如何使用for循环设置按钮图像取决于数组的值?