add_friend_controller.dart 1.49 KB
import 'package:doublefeel_flutter/core/network/api/friend_api.dart';
import 'package:doublefeel_flutter/core/result/app_result.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:get/get.dart';

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

  final FriendApi _friendApi;

  final TextEditingController friendCodeController = TextEditingController();
  final FocusNode friendCodeFocusNode = FocusNode();

  final RxString friendCodeInput = ''.obs;
  final RxBool isSubmitting = false.obs;
  final RxString myInviteCode = 'AC1192'.obs;

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

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

  bool get canSubmit => friendCodeInput.value.isNotEmpty;

  void copyMyInviteCode() {
    Clipboard.setData(ClipboardData(text: myInviteCode.value));
  }

  Future<bool> submitFriendCode() async {
    if (!canSubmit || isSubmitting.value) return false;
    isSubmitting.value = true;
    try {
      final result = await _friendApi.addFriend(friendCodeInput.value);
      if (result is AppSuccess<void>) {
        Get.back(result: true);
        return true;
      }
      return false;
    } finally {
      isSubmitting.value = false;
    }
  }

  executeBackLogic() {
    Get.back();
  }
}