| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- import 'package:flutter/Material.dart';
- import 'package:get/get.dart';
- import 'package:injectable/injectable.dart';
- import 'package:keyboard/base/base_controller.dart';
- import '../../data/api/response/user_info_response.dart';
- import '../../data/api/response/zodiac_love_intimacy_love_info_response.dart';
- import '../../data/consts/error_code.dart';
- import '../../data/repository/account_repository.dart';
- import '../../data/repository/zodiac_love_intimacy_repository.dart';
- import '../../dialog/login/login_dialog.dart';
- import '../../resource/string.gen.dart';
- import '../../router/app_page_arguments.dart';
- import '../../utils/age_zodiac_sign_util.dart';
- import '../../utils/atmob_log.dart';
- import '../../utils/error_handler.dart';
- import '../../utils/http_handler.dart';
- import '../../utils/toast_util.dart';
- import '../store/new_discount/new_discount_page.dart';
- import '../user_profile/user_profile_page.dart';
- import 'enums/zodiac_love_intimacy_tab.dart';
- /// 星座恋爱分析Controller
- @injectable
- class ZodiacLoveIntimacyController extends BaseController
- with GetTickerProviderStateMixin {
- final String _tag = "ZodiacLoveIntimacyController";
- /// 账户信息Repository
- final AccountRepository accountRepository;
- /// 星座恋爱分析Repository
- final ZodiacLoveIntimacyRepository zodiacLoveIntimacyRepository;
- /// Tab列表
- RxList<ZodiacLoveIntimacyTab> tabBarList = ZodiacLoveIntimacyTab.values.obs;
- /// Tab控制器
- late final TabController tabController;
- /// PageView控制器
- late final PageController pageController;
- /// PageView是否允许滑动切换
- RxBool isPageViewSwipeEnabled = true.obs;
- /// 当前Tab的索引
- Rx<int> currentTabIndex = 0.obs;
- /// 当前用户信息
- Rxn<UserInfoResponse> get userInfo => accountRepository.userInfo;
- /// 星座恋爱分析-基础信息
- Rxn<ZodiacLoveIntimacyLoveInfoResponse> zodiacLoveIntimacyLoveInfoResponse =
- Rxn<ZodiacLoveIntimacyLoveInfoResponse>();
- /// 我的星座信息
- Zodiac? get myZodiacInfo {
- String? birthday =
- zodiacLoveIntimacyLoveInfoResponse.value?.birthday ??=
- userInfo.value?.birthday;
- int? gender =
- zodiacLoveIntimacyLoveInfoResponse.value?.gender ??=
- userInfo.value?.gender;
- return getUserZodiacInfo(birthday, gender);
- }
- /// Ta的星座信息
- Zodiac? get taZodiacInfo {
- final birthday = zodiacLoveIntimacyLoveInfoResponse.value?.targetBirthday;
- final gender = zodiacLoveIntimacyLoveInfoResponse.value?.targetGender;
- return getUserZodiacInfo(birthday, gender);
- }
- ZodiacLoveIntimacyController(
- this.accountRepository,
- this.zodiacLoveIntimacyRepository,
- );
- @override
- void onInit() {
- super.onInit();
- _initArgs();
- _getZodiacLoveIntimacyLoveInfo();
- }
- /// 初始化参数
- void _initArgs() {
- final arguments = Get.arguments as Map<String, dynamic>?;
- // 当前索引
- int tabIndex = ZodiacLoveIntimacyTab.today.tabIndex;
- if (arguments?[AppPageArguments.index] == null) {
- AtmobLog.i(_tag, '没有传递 index 参数');
- } else {
- final int? index = arguments?[AppPageArguments.index] as int?;
- if (index != null) {
- tabIndex = index;
- AtmobLog.i(_tag, "index: $tabIndex");
- }
- }
- // 创建PageController和TabController,并设置当前选中的index为初始索引
- pageController = PageController(initialPage: tabIndex);
- tabController = TabController(
- initialIndex: tabIndex,
- length: tabBarList.length,
- vsync: this,
- );
- currentTabIndex.value = tabIndex;
- }
- /// 返回
- void clickBack() {
- Get.back();
- }
- @override
- void onClose() {
- tabController.dispose();
- pageController.dispose();
- super.onClose();
- }
- /// 处理Tab切换,联动PageView
- void handleTabChange(int index) {
- pageController.animateToPage(
- index,
- duration: const Duration(milliseconds: 300),
- curve: Curves.easeInToLinear,
- );
- }
- /// 处理PageView切换,联动Tab
- void handlePageChange(int index) {
- tabController.animateTo(index, duration: const Duration(milliseconds: 300));
- currentTabIndex.value = index;
- }
- /// 获取星座恋爱分析-基本信息
- void _getZodiacLoveIntimacyLoveInfo() async {
- try {
- ZodiacLoveIntimacyLoveInfoResponse resp =
- await zodiacLoveIntimacyRepository.getZodiacLoveIntimacyLoveInfo();
- zodiacLoveIntimacyLoveInfoResponse.value = resp;
- } catch (error) {
- if (error is ServerErrorException) {
- // 未登录
- if (error.code == ErrorCode.noLoginError) {
- ToastUtil.show(StringName.accountNoLogin);
- LoginDialog.show();
- } else if (error.code == ErrorCode.noMember) {
- // 需要VIP
- ToastUtil.show(StringName.needVipTip);
- NewDiscountPage.start();
- } else if (error.code == ErrorCode.noSetBirthday) {
- // 未设置生日
- ErrorHandler.toastError(error);
- await UserProfilePage.start();
- } else {
- ErrorHandler.toastError(error);
- }
- } else {
- ErrorHandler.toastError(error);
- }
- }
- }
- /// 获取用户的星座信息
- Zodiac? getUserZodiacInfo(String? birthday, int? gender) {
- if (birthday?.isEmpty != false || gender == null) {
- return null;
- }
- final zodiac = AgeZodiacSignUtil.getZodiacWithGenderLabel(
- birthday!,
- gender,
- );
- if (zodiac.name == '未知星座') {
- return null;
- }
- return zodiac;
- }
- }
|