add_friend_controller.dart 1.33 KB
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:get/get.dart';

import '../models/add_friend_prompt_type.dart';

class AddFriendController extends GetxController {
  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<AddFriendPromptType?> submitFriendCode() async {
    if (!canSubmit || isSubmitting.value) return null;
    isSubmitting.value = true;
    try {
      final code = friendCodeInput.value;
      if (code == myInviteCode.value) {
        return AddFriendPromptType.selfId;
      }

      return AddFriendPromptType.idNotFound;
    } finally {
      isSubmitting.value = false;
    }
  }

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