使用Key来重新创建Widget

Tab的内容不好更新,可以使用重新生成一个key,来实现对指定TabView的更新

闲话少说,上代码:

class MyTabs extends StatefulWidget {
  @override
  _MyTabsState createState() => _MyTabsState();
}
 
class _MyTabsState extends State<MyTabs> {
  final _tabKeys = [GlobalKey(), GlobalKey(), GlobalKey()]; // 为每个Tab创建一个Key
  int _selectedIndex = 0;
  bool _shouldRebuild = false; // 控制是否重建Tab的标志位
 
  void _refreshTab(int index) {
    setState(() {
      _tabKeys[index] = GlobalKey(); // 改变指定索引的Key来重建Tab
    });
  }
 
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        bottom: TabBar(
          tabs: <Widget>[
            Tab(icon: Icon(Icons.directions_car)),
            Tab(icon: Icon(Icons.directions_transit)),
            Tab(icon: Icon(Icons.directions_bike)),
          ],
        ),
      ),
      body: TabBarView(
        children: <Widget>[
          Builder(key: _tabKeys[0], builder: (context) => Icon(Icons.directions_car)), // 使用Key来重建Widget
          Builder(key: _tabKeys[1], builder: (context) => Icon(Icons.directions_transit)), // 使用Key来重建Widget
          Builder(key: _tabKeys[2], builder: (context) => Icon(Icons.directions_bike)), // 使用Key来重建Widget
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => _refreshTab(_selectedIndex), // 调用_refreshTab方法刷新当前选中的Tab
        tooltip: 'Refresh',
        child: Icon(Icons.refresh),
      ),
    );
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值