feat:分类切换优化

This commit is contained in:
zengyi 2025-09-23 18:26:23 +08:00
parent 5c00e4efef
commit 311e4fe06c
2 changed files with 24 additions and 4 deletions

View File

@ -1,4 +1,5 @@
import 'package:easy_refresh/easy_refresh.dart'; 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_model/kt_home_category_bean.dart';
import 'package:flutter_kinetra/kt_pages/kt_home/state.dart'; import 'package:flutter_kinetra/kt_pages/kt_home/state.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -10,6 +11,7 @@ import '../../kt_widgets/kt_status_widget.dart';
class KtHomeLogic extends GetxController { class KtHomeLogic extends GetxController {
final state = KtHomeState(); final state = KtHomeState();
late TabController categoryTabCtrl;
final EasyRefreshController easyRefreshController = EasyRefreshController( final EasyRefreshController easyRefreshController = EasyRefreshController(
controlFinishRefresh: true, controlFinishRefresh: true,

View File

@ -19,10 +19,11 @@ class KtHomePage extends StatefulWidget {
} }
class _KtHomePageState extends State<KtHomePage> class _KtHomePageState extends State<KtHomePage>
with SingleTickerProviderStateMixin, AutomaticKeepAliveClientMixin { with TickerProviderStateMixin, AutomaticKeepAliveClientMixin {
final logic = Get.put(KtHomeLogic()); final logic = Get.put(KtHomeLogic());
final state = Get.find<KtHomeLogic>().state; final state = Get.find<KtHomeLogic>().state;
late TabController tabCtrl; late TabController tabCtrl;
TabController? categoryTabCtrl;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -535,8 +536,9 @@ class _KtHomePageState extends State<KtHomePage>
KtHomeCategoryBean item = state.categoryList[index]; KtHomeCategoryBean item = state.categoryList[index];
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
if( state.selCategoryId == item.categoryId!) return; if (state.selCategoryId == item.categoryId!) return;
state.selCategoryId = item.categoryId!; state.selCategoryId = item.categoryId!;
categoryTabCtrl?.animateTo(state.categoryList.indexOf(item));
logic.getCategoryVideoList(isRefresh: true); logic.getCategoryVideoList(isRefresh: true);
}, },
child: Container( child: Container(
@ -586,7 +588,21 @@ class _KtHomePageState extends State<KtHomePage>
// return [hotRisingView(), topChartView(), freshDropView()][state.typeList // return [hotRisingView(), topChartView(), freshDropView()][state.typeList
// .indexOf(state.selType)]; // .indexOf(state.selType)];
} else { } 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<KtHomePage>
); );
} }
Widget categoryVideoView() { Widget categoryVideoView(int index) {
return GetBuilder<KtHomeLogic>( return GetBuilder<KtHomeLogic>(
id: 'category-list', id: 'category-list',
key: ValueKey('category-$index'),
builder: (ctrl) { builder: (ctrl) {
if (state.categoryLoadStatus == KtLoadStatusType.loadNoData) { if (state.categoryLoadStatus == KtLoadStatusType.loadNoData) {
return KtStatusWidget( return KtStatusWidget(
@ -1544,6 +1561,7 @@ class _KtHomePageState extends State<KtHomePage>
@override @override
void dispose() { void dispose() {
tabCtrl.dispose(); tabCtrl.dispose();
categoryTabCtrl?.dispose();
super.dispose(); super.dispose();
} }
} }