Skip to content
4 changes: 2 additions & 2 deletions lib/features/profile/domain/entities/profile_entity.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ class ProfileEntity with _$ProfileEntity {
required String gender,
required String ageRange,
required CommunityEntity community,
required String residenceProvince,
required String residenceDistrict,
String? residenceProvince,
String? residenceDistrict,
required String hometownProvince,
required String hometownDistrict,
}) = _ProfileEntity;
Expand Down
52 changes: 26 additions & 26 deletions lib/features/profile/domain/entities/profile_entity.freezed.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import 'package:debateseason_frontend_v1/utils/logger.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

//TODO: κ±°μ£Όμ§€λ₯Ό μ„ νƒν•˜μ§€ μ•Šμ„ λ•Œ, 거주지와 동일 μ²΄ν¬λ°•μŠ€ μƒνƒœλ³€κ²½ ν•„μš”ν•¨. ν˜„μž¬λŠ” μ²΄ν¬λ°•μŠ€ μƒνƒœλ₯Ό κ΄€λ¦¬μ—†μ–΄μ„œ μΆ”ν›„ κ΅¬ν˜„.
class ProfileInputViewModel extends GetxController {
late ProfileViewModel _profileViewModel;
late ProfileRepository _profileRepository;
Expand Down Expand Up @@ -50,11 +51,16 @@ class ProfileInputViewModel extends GetxController {
final _selectedAge = ''.obs;
final _isModifyScreen = false.obs;
final _isApiLoading = false.obs;
final residenceText = ''.obs;
final homeTownText = ''.obs;
final _selectedResidenceProvince = Rx<ProvinceType>(ProvinceType.seoul);
final _selectedResidenceDistrict = Rx<DistrictType?>(null);
final _selectedHomeTownProvince = Rx<ProvinceType>(ProvinceType.seoul);
final _selectedHomeTownDistrict = Rx<DistrictType?>(null);

late final VoidCallback _residenceControllerListener;
late final VoidCallback _homeTownControllerListener;

ProfileEntity get profile => _profile.value;

String get previousNickname => _previousNickname.value;
Expand Down Expand Up @@ -95,7 +101,22 @@ class ProfileInputViewModel extends GetxController {
communitySearchController = TextEditingController();
ageController = TextEditingController();
residenceController = TextEditingController();
_residenceControllerListener = () {
residenceText.value = residenceController.text;
if (residenceText.value == "") {
_setResidenceNoResponse();
}
};
residenceController.addListener(_residenceControllerListener);
homeTownController = TextEditingController();
_homeTownControllerListener = () {
homeTownText.value = homeTownController.text;
if (homeTownText.value == "") {
_setHomeTownNoResponse();
}
};
homeTownController.addListener(_homeTownControllerListener);

_debounceNickname?.cancel();
_debounceCommunity?.cancel();
_profileRepository = Get.find<ProfileRepository>();
Expand All @@ -118,18 +139,27 @@ class ProfileInputViewModel extends GetxController {
_selectedCommunityId.value = previousProfile.community.id;
ageController.text = previousProfile.ageRange;
_selectedAge.value = previousProfile.ageRange;
_selectedResidenceProvince.value =
ProvinceType.fromCode(previousProfile.residenceProvince);
_selectedResidenceDistrict.value =
DistrictType.fromCode(previousProfile.residenceDistrict);
_selectedHomeTownProvince.value =
ProvinceType.fromCode(previousProfile.hometownProvince);
_selectedHomeTownDistrict.value =
DistrictType.fromCode(previousProfile.hometownDistrict);
residenceController.text =
'${_selectedResidenceProvince.value.name} ${_selectedResidenceDistrict.value?.name}';
homeTownController.text =
'${_selectedHomeTownProvince.value.name} ${_selectedHomeTownDistrict.value?.name}';

if (previousProfile.residenceDistrict != '') {
_selectedResidenceProvince.value =
ProvinceType.fromCode(previousProfile.residenceProvince!);
_selectedResidenceDistrict.value =
DistrictType.fromCode(previousProfile.residenceDistrict!);
residenceController.text =
'${_selectedResidenceProvince.value.name} ${_selectedResidenceDistrict.value?.name}';
} else {
residenceController.text = '';
}
if (previousProfile.hometownDistrict != '') {
_selectedHomeTownProvince.value =
ProvinceType.fromCode(previousProfile.hometownProvince);
_selectedHomeTownDistrict.value =
DistrictType.fromCode(previousProfile.hometownDistrict);
homeTownController.text =
'${_selectedHomeTownProvince.value.name} ${_selectedHomeTownDistrict.value?.name}';
} else {
homeTownController.text = '';
}
_isModifyScreen.value = true;
_profile.refresh();
});
Expand All @@ -143,7 +173,9 @@ class ProfileInputViewModel extends GetxController {
communityController.dispose();
communitySearchController.dispose();
ageController.dispose();
residenceController.removeListener(_residenceControllerListener);
residenceController.dispose();
homeTownController.removeListener(_homeTownControllerListener);
homeTownController.dispose();

super.dispose();
Expand Down Expand Up @@ -181,16 +213,18 @@ class ProfileInputViewModel extends GetxController {
}

Future<UiState<void>> postProfile() async =>
// κ°€μž…νŽ˜μ΄μ§€μ—μ„œλŠ” 거주지와 μΆœμ‹ μ„ μ„ νƒν•˜μ§€ μ•ŠμœΌλ―€λ‘œ null 값일 수 있음.
await _profileRepository.postProfile(
entity: _profile.value.copyWith(
residenceProvince: _selectedResidenceProvince.value.code,
residenceDistrict: _selectedResidenceDistrict.value!.code,
hometownProvince: _selectedHomeTownProvince.value.code,
hometownDistrict: _selectedHomeTownDistrict.value!.code,
residenceProvince: null,
residenceDistrict: null,
hometownProvince: '',
hometownDistrict: '',
),
);

Future<UiState<void>> patchProfile() async {
// profile μˆ˜μ • νŽ˜μ΄μ§€
_profileViewModel.updateProfile(updatedProfile: _profile.value);

return await _profileRepository.patchProfile(entity: _profile.value);
Expand Down Expand Up @@ -283,10 +317,25 @@ class ProfileInputViewModel extends GetxController {
_profile.value.gender.isNotEmpty &&
_profile.value.ageRange.isNotEmpty &&
_profile.value.community.id != -1 &&
_selectedResidenceProvince.value.code.isNotEmpty &&
_selectedResidenceDistrict.value != null &&
_selectedHomeTownProvince.value.code.isNotEmpty &&
_selectedHomeTownDistrict.value != null) {
(residenceText.value == '' ||
(_selectedResidenceProvince.value.code.isNotEmpty &&
_selectedResidenceDistrict.value != null)) &&
(homeTownText.value == '' ||
(_selectedHomeTownProvince.value.code.isNotEmpty &&
_selectedHomeTownDistrict.value != null))) {
return true;
} else {
return false;
}
}

bool isValidSignUpBtn() {
// κ°€μž…μ‹œμ—λŠ” 거주지와 λ„μ‹œκ°€ μ—†μŒ.
if (_profile.value.nickname.isNotEmpty &&
_nicknameErrorText.value.isEmpty &&
_profile.value.gender.isNotEmpty &&
_profile.value.ageRange.isNotEmpty &&
_profile.value.community.id != -1) {
return true;
} else {
return false;
Expand Down Expand Up @@ -321,7 +370,26 @@ class ProfileInputViewModel extends GetxController {
);
}

void _setResidenceNoResponse() {
_profile.value = _profile.value.copyWith(
residenceProvince: '',
residenceDistrict: '',
);
}

void _setHomeTownNoResponse() {
_profile.value = _profile.value.copyWith(
hometownProvince: '',
hometownDistrict: '',
);
}

void checkSameToResidence() {
if (residenceText.value == '') {
homeTownController.text = '';
return;
}

if (_selectedResidenceDistrict.value != null) {
_selectedHomeTownProvince.value = _selectedResidenceProvince.value;
_selectedHomeTownDistrict.value = _selectedResidenceDistrict.value;
Expand Down
Loading
Loading