TabController _firstPageTabController;
PageController _pageController;
class _FirstPageNewState extends State<FirstPageNew> with SingleTickerProviderStateMixin{
void initState() {
// TODO: implement initState
super.initState();
_firstPageTabController = TabController(initialIndex: 0);
_pageController = PageController(initialPage: 0);
_firstPageTabController.addListener(_onTabChanged);
}
Tab 改变时,切换 PageView
_onTabChanged() {
if (_firstPageTabController.indexIsChanging) return;
_pageController.jumpToPage(_firstPageTabController.index);
}
// PageView 改变时,更新 TabBar
_onPageChanged(int index) {
if (_firstPageTabController.index != index) {
_firstPageTabController.animateTo(index);
}
}
void dispose() {
// TODO: implement dispose
_pageController.dispose();
_firstPageTabController.dispose();
super.dispose();
}
Widget build(BuildContext context) {
// TODO: implement build
return DefaultTabController(
length: pagesList.length,
initialIndex: 0,
child: Scaffold(
appBar: AppBar(),
body: _body()
)
);
}
_body(){
return PageView.builder(
controller: _pageController,
pageSnapping: true,
onPageChanged: _onPageChanged,
itemCount: pagesList.length,
itemBuilder: (_, index){
return PageItemView(index,key: ValueKey(index));
});
}
}
flutter TabBar+PageView页卡切换页面
于 2024-12-19 12:25:27 首次发布