diff --git a/lib/kt_pages/kt_home/logic.dart b/lib/kt_pages/kt_home/logic.dart index 2345c14..a678241 100644 --- a/lib/kt_pages/kt_home/logic.dart +++ b/lib/kt_pages/kt_home/logic.dart @@ -1,4 +1,5 @@ import 'package:easy_refresh/easy_refresh.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_kinetra/kt_model/kt_home_category_bean.dart'; import 'package:flutter_kinetra/kt_pages/kt_home/state.dart'; import 'package:get/get.dart'; @@ -10,6 +11,7 @@ import '../../kt_widgets/kt_status_widget.dart'; class KtHomeLogic extends GetxController { final state = KtHomeState(); + late TabController categoryTabCtrl; final EasyRefreshController easyRefreshController = EasyRefreshController( controlFinishRefresh: true, diff --git a/lib/kt_pages/kt_home/view.dart b/lib/kt_pages/kt_home/view.dart index b00af8a..058f900 100644 --- a/lib/kt_pages/kt_home/view.dart +++ b/lib/kt_pages/kt_home/view.dart @@ -19,10 +19,11 @@ class KtHomePage extends StatefulWidget { } class _KtHomePageState extends State - with SingleTickerProviderStateMixin, AutomaticKeepAliveClientMixin { + with TickerProviderStateMixin, AutomaticKeepAliveClientMixin { final logic = Get.put(KtHomeLogic()); final state = Get.find().state; late TabController tabCtrl; + TabController? categoryTabCtrl; @override Widget build(BuildContext context) { @@ -535,8 +536,9 @@ class _KtHomePageState extends State KtHomeCategoryBean item = state.categoryList[index]; return GestureDetector( onTap: () { - if( state.selCategoryId == item.categoryId!) return; + if (state.selCategoryId == item.categoryId!) return; state.selCategoryId = item.categoryId!; + categoryTabCtrl?.animateTo(state.categoryList.indexOf(item)); logic.getCategoryVideoList(isRefresh: true); }, child: Container( @@ -586,7 +588,21 @@ class _KtHomePageState extends State // return [hotRisingView(), topChartView(), freshDropView()][state.typeList // .indexOf(state.selType)]; } else { - return categoryVideoView(); + categoryTabCtrl ??= TabController( + length: state.categoryList.length, + vsync: this, + ); + + return Expanded( + child: TabBarView( + controller: categoryTabCtrl, + physics: NeverScrollableScrollPhysics(), + children: List.generate( + state.categoryList.length, + (index) => categoryVideoView(index), + ), + ), + ); } } @@ -1441,9 +1457,10 @@ class _KtHomePageState extends State ); } - Widget categoryVideoView() { + Widget categoryVideoView(int index) { return GetBuilder( id: 'category-list', + key: ValueKey('category-$index'), builder: (ctrl) { if (state.categoryLoadStatus == KtLoadStatusType.loadNoData) { return KtStatusWidget( @@ -1544,6 +1561,7 @@ class _KtHomePageState extends State @override void dispose() { tabCtrl.dispose(); + categoryTabCtrl?.dispose(); super.dispose(); } }