bind_partner_controller.dart 2.63 KB
import 'package:doublefeel_flutter/app/routes/app_pages.dart';
import 'package:doublefeel_flutter/core/network/api/user_api.dart';
import 'package:doublefeel_flutter/core/result/app_result.dart';
import 'package:doublefeel_flutter/core/services/user_state_service.dart';
import 'package:doublefeel_flutter/data/local/user_preferences_storage.dart';
import 'package:doublefeel_flutter/data/models/user/user_models.dart';
import 'package:flutter/widgets.dart';
import 'package:get/get.dart';

class BindPartnerController extends GetxController {
  BindPartnerController(this._userApi);

  final UserApi _userApi;

  final TextEditingController partnerIdController = TextEditingController();

  final RxString partnerIdInput = ''.obs;

  final RxBool isSubmitting = false.obs;

  final RxString myInviteCode = ''.obs;

  @override
  void onInit() {
    super.onInit();
    partnerIdController.addListener(() {
      partnerIdInput.value = partnerIdController.text.trim();
    });

    final userPrefs = Get.find<UserPreferencesStorage>();
    myInviteCode.value = userPrefs.preferences.value.meUserInfo?.pairCode ?? '';
  }

  @override
  void onClose() {
    partnerIdController.dispose();
    super.onClose();
  }

  bool get canSubmit => partnerIdInput.value.isNotEmpty;

  void onShareMyCode() {}

  Future<void> onSubmitPartnerId() async {
    if (!canSubmit || isSubmitting.value) return;
    isSubmitting.value = true;
    try {
      final result = await _userApi.bindPartner(partnerIdInput.value);
      if (result is AppFailure) {
        return;
      } else {
        final partnerResult = await _userApi.getPartnerUserInfo();
        if (partnerResult is AppSuccess<BoundUserInfoResponse>) {
          final partner = partnerResult.data.partnerUserInfo;
          if (partner != null) {
            await Get.find<UserPreferencesStorage>()
                .updatePartnerUserInfo(partner);
          }
        }
      }
      final userStateService = Get.find<UserStateService>();
      final partnerId = partnerIdInput.value;
      if (!userStateService.isVip) {
        Get.offAllNamed(AppRoutes.userOnboarding, arguments: {
          'type': "MembershipOfferPage",
          'needBindSuccessGuide': true
        });
      } else {
        Get.offAllNamed(AppRoutes.home);
      }
    } catch (e) {
    } finally {
      isSubmitting.value = false;
    }
  }

  void onSkip() {
    final userStateService = Get.find<UserStateService>();
    if (!userStateService.isVip) {
      Get.offAllNamed(AppRoutes.userOnboarding, arguments: {
        'type': "MembershipOfferPage",
        'needBindSuccessGuide': false
      });
    } else {
      Get.offAllNamed(AppRoutes.home);
    }
  }
}