在使用 TabBar TabBarView 通过传参改变tab的 需要重新给_tabController 的 length赋值
可以通过改变组件的key 可以重新加载initState() 对length 重新赋值 避免报错
也可以用于组件的刷新 会重新走一遍生命周期
//a页面
class PageA extends StatefulWidget {
const PageA({Key? key}) : super(key: key);
@override
State<PageA> createState() => _PageAState();
}
class _PageAState extends State<PageA> {
GlobalKey bKey = GlobalKey();
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
//点击改变key
bKey = GlobalKey();
setState(() {});
},
child: Container(
width: 50,
height: 50,
padding: const EdgeInsets.all(8.0),
color: Colors.cyan,
//b组件 传入key
child: PageB(
key: bKey,
),
));
}
}
//需要重载的B组件
class PageB extends StatefulWidget {
const PageB({Key? key}) : super(key: key);
@override
State<PageB> createState() => _PageBState();
}
class _PageBState extends State<PageB> {
//key 改变会 init
@override
void initState() {
super.initState();
print("init");
}
@override
Widget build(BuildContext context) {
return Container();
}
}