bind_partner_controller.dart 2.5 KB
import 'package:doublefeel_flutter/app/routes/app_pages.dart';
import 'package:doublefeel_flutter/core/network/api/friend_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:flutter/widgets.dart';
import 'package:get/get.dart';
import 'package:share_plus/share_plus.dart';

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

  final FriendApi _friendApi;

  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?.uniqueCode ?? '';
  }

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

  bool get canSubmit => partnerIdInput.value.isNotEmpty;

  void onShareMyCode() {
    Share.share("""嘿 ❤️ 我发现了一个叫 DoubleFeel 的 App!
它可以帮我们互相关心 — 记录压力和睡眠、查看 HRV 与身体状态、及时了解彼此的健康状况。
快来一起使用吧 👉 https://Xxxxxxx
我的好友id:${myInviteCode.value}""");
  }

  Future<void> onSubmitPartnerId() async {
    if (!canSubmit || isSubmitting.value) return;
    isSubmitting.value = true;
    try {
      final result = await _friendApi.addFriend(partnerIdInput.value);
      if (result is AppFailure) {
        return;
      }
      final userStateService = Get.find<UserStateService>();
      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);
    }
  }
}