fix: home tab

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-11-27 13:36:12 +08:00
parent 4a145750c0
commit c01e2c0b8c
4 changed files with 49 additions and 57 deletions

View File

@@ -1,4 +1,5 @@
import 'dart:async'; import 'dart:async';
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -12,7 +13,6 @@ import '../mine/view.dart';
class HomeController extends GetxController with GetTickerProviderStateMixin { class HomeController extends GetxController with GetTickerProviderStateMixin {
bool flag = true; bool flag = true;
late RxList tabs = [].obs; late RxList tabs = [].obs;
RxInt initialIndex = 1.obs;
late TabController tabController; late TabController tabController;
late List tabsCtrList; late List tabsCtrList;
late List<Widget> tabsPageList; late List<Widget> tabsPageList;
@@ -81,16 +81,11 @@ class HomeController extends GetxController with GetTickerProviderStateMixin {
tabs.value = defaultTabs; tabs.value = defaultTabs;
if (tabbarSort.contains(TabType.rcmd.id)) {
initialIndex.value = tabbarSort.indexOf(TabType.rcmd.id);
} else {
initialIndex.value = 0;
}
tabsCtrList = tabs.map((e) => e['ctr']).toList(); tabsCtrList = tabs.map((e) => e['ctr']).toList();
tabsPageList = tabs.map<Widget>((e) => e['page']).toList(); tabsPageList = tabs.map<Widget>((e) => e['page']).toList();
tabController = TabController( tabController = TabController(
initialIndex: initialIndex.value, initialIndex: max(0, tabbarSort.indexOf(TabType.rcmd.id)),
length: tabs.length, length: tabs.length,
vsync: this, vsync: this,
); );

View File

@@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:PiliPalaX/utils/extension.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -70,10 +71,9 @@ class _HomePageState extends State<HomePage>
tabAlignment: TabAlignment.center, tabAlignment: TabAlignment.center,
onTap: (value) { onTap: (value) {
feedBack(); feedBack();
if (_homeController.initialIndex.value == value) { if (_homeController.tabController.indexIsChanging.not) {
_homeController.tabsCtrList[value]().animateToTop(); _homeController.tabsCtrList[value]().animateToTop();
} }
_homeController.initialIndex.value = value;
}, },
), ),
), ),
@@ -290,53 +290,53 @@ class DefaultUser extends StatelessWidget {
} }
} }
class CustomTabs extends StatefulWidget { // class CustomTabs extends StatefulWidget {
const CustomTabs({super.key}); // const CustomTabs({super.key});
@override // @override
State<CustomTabs> createState() => _CustomTabsState(); // State<CustomTabs> createState() => _CustomTabsState();
} // }
class _CustomTabsState extends State<CustomTabs> { // class _CustomTabsState extends State<CustomTabs> {
final HomeController _homeController = Get.put(HomeController()); // final HomeController _homeController = Get.put(HomeController());
void onTap(int index) { // void onTap(int index) {
feedBack(); // feedBack();
if (_homeController.initialIndex.value == index) { // if (_homeController.initialIndex.value == index) {
_homeController.tabsCtrList[index]().animateToTop(); // _homeController.tabsCtrList[index]().animateToTop();
} // }
_homeController.initialIndex.value = index; // _homeController.initialIndex.value = index;
_homeController.tabController.index = index; // _homeController.tabController.index = index;
} // }
@override // @override
Widget build(BuildContext context) { // Widget build(BuildContext context) {
return Container( // return Container(
height: 44, // height: 44,
margin: const EdgeInsets.only(top: 4), // margin: const EdgeInsets.only(top: 4),
child: Obx( // child: Obx(
() => ListView.separated( // () => ListView.separated(
padding: const EdgeInsets.symmetric(horizontal: 14.0), // padding: const EdgeInsets.symmetric(horizontal: 14.0),
scrollDirection: Axis.horizontal, // scrollDirection: Axis.horizontal,
itemCount: _homeController.tabs.length, // itemCount: _homeController.tabs.length,
separatorBuilder: (BuildContext context, int index) { // separatorBuilder: (BuildContext context, int index) {
return const SizedBox(width: 10); // return const SizedBox(width: 10);
}, // },
itemBuilder: (BuildContext context, int index) { // itemBuilder: (BuildContext context, int index) {
String label = _homeController.tabs[index]['label']; // String label = _homeController.tabs[index]['label'];
return Obx( // return Obx(
() => CustomChip( // () => CustomChip(
onTap: () => onTap(index), // onTap: () => onTap(index),
label: label, // label: label,
selected: index == _homeController.initialIndex.value, // selected: index == _homeController.initialIndex.value,
), // ),
); // );
}, // },
), // ),
), // ),
); // );
} // }
} // }
class CustomChip extends StatelessWidget { class CustomChip extends StatelessWidget {
final Function onTap; final Function onTap;

View File

@@ -2,7 +2,6 @@ import 'package:get/get.dart';
class SearchResultController extends GetxController { class SearchResultController extends GetxController {
String? keyword; String? keyword;
int tabIndex = 0;
RxList<int> count = List.generate(5, (_) => -1).toList().obs; RxList<int> count = List.generate(5, (_) => -1).toList().obs;

View File

@@ -1,3 +1,4 @@
import 'package:PiliPalaX/utils/extension.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:PiliPalaX/models/common/search_type.dart'; import 'package:PiliPalaX/models/common/search_type.dart';
@@ -28,7 +29,6 @@ class _SearchResultPageState extends State<SearchResultPage>
_tabController = TabController( _tabController = TabController(
vsync: this, vsync: this,
length: SearchType.values.length, length: SearchType.values.length,
initialIndex: _searchResultController.tabIndex,
); );
} }
@@ -101,14 +101,12 @@ class _SearchResultPageState extends State<SearchResultPage>
unselectedLabelColor: Theme.of(context).colorScheme.outline, unselectedLabelColor: Theme.of(context).colorScheme.outline,
tabAlignment: TabAlignment.start, tabAlignment: TabAlignment.start,
onTap: (index) { onTap: (index) {
if (index == _searchResultController.tabIndex) { if (_tabController.indexIsChanging.not) {
Get.find<SearchPanelController>( Get.find<SearchPanelController>(
tag: SearchType.values[index].type + tag: SearchType.values[index].type +
_searchResultController.keyword!) _searchResultController.keyword!)
.animateToTop(); .animateToTop();
} }
_searchResultController.tabIndex = index;
}, },
), ),
), ),