From 311e4fe06c0ba2bc7006eaf1b56a1d242691eb78 Mon Sep 17 00:00:00 2001 From: zengyi Date: Tue, 23 Sep 2025 18:26:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=88=86=E7=B1=BB=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/kt_pages/kt_home/logic.dart | 2 ++ lib/kt_pages/kt_home/view.dart | 26 ++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) 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(); } }