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),
),
);
}
}

2308

被折叠的 条评论
为什么被折叠?



