[Android/Flutter 교육] 58일차

MSU·2024년 3월 26일

Android-Flutter

목록 보기
62/85
post-thumbnail

게시판 프로젝트

회원정보 수정

사용자 정보를 수정하는 메서드 작성

// UserDaol.kt


        // 사용자 정보를 수정하는 메서드
        suspend fun updateUserData(userModel: UserModel, isChangePassword:Boolean){
            val job1 = CoroutineScope(Dispatchers.IO).launch {
                // 컬렉션에 접근할 수 있는 객체를 가져온다.
                val collectionReference = Firebase.firestore.collection("UserData")

                // 컬렉션이 가지고 있는 문서들 중에 수정할 사용자 정보를 가져온다.
                val query = collectionReference.whereEqualTo("userIdx", userModel.userIdx).get().await()

                // 저장할 데이터를 담을 HashMap을 만들어준다.
                val map = mutableMapOf<String, Any?>()
                map["userNickName"] = userModel.userNickName
                map["userAge"] = userModel.userAge
                map["userGender"] = userModel.userGender
                map["userHobby1"] = userModel.userHobby1
                map["userHobby2"] = userModel.userHobby2
                map["userHobby3"] = userModel.userHobby3
                map["userHobby4"] = userModel.userHobby4
                map["userHobby5"] = userModel.userHobby5
                map["userHobby6"] = userModel.userHobby6

                // 비밀번호를 변경한 적이 있다면..
                if(isChangePassword){
                    map["userPw"] = userModel.userPw
                }

                // 저장한다.
                // 가져온 문서 중 첫 번째 문서에 접근하여 데이터를 수정한다.
                query.documents[0].reference.update(map)
            }
            job1.join()
        }
        

성별값을 반환하는 메서드

// ModifyUserViewModel.kt


    // 성별값을 반환하는 메서드
    fun gettingGender() = when(toggleModifyUserInfoGender.value){
        R.id.buttonModifyUserInfoMale -> Gender.MALE.num
        R.id.buttonModifyUserInfoFemale -> Gender.FEMALE.num
        else -> 0
    }

사용자 정보를 수정하는 메서드

// ModifyUserFragment.kt


            // 메뉴
            inflateMenu(R.menu.menu_modify_user)
            setOnMenuItemClickListener {
                when(it.itemId){
                    // 초기화
                    R.id.menuItemModifyUserReset -> {
                        settingInputForm()
                    }
                    // 완료
                    R.id.menuItemModifyUserDone -> {
                        // 유효성 감사를 한다.
                        val chk = checkInputForm()
                        if(chk == true){
                            updateUserData()
                        }
                    }
                }
                true
            }
            
            


    // 사용자 정보를 수정하는 메서드
    fun updateUserData(){
        // 1. 사용자가 입력한 데이터를 가져온다
        val userNickName = modifyUserViewModel.textFieldModifyUserInfoNickName.value!!
        val userAge = modifyUserViewModel.textFieldModifyUserInfoAge.value!!.toInt()
        val userGender = modifyUserViewModel.gettingGender()
        val userHobby1 = modifyUserViewModel.checkBoxModifyUserInfoHobby1.value!!
        val userHobby2 = modifyUserViewModel.checkBoxModifyUserInfoHobby2.value!!
        val userHobby3 = modifyUserViewModel.checkBoxModifyUserInfoHobby3.value!!
        val userHobby4 = modifyUserViewModel.checkBoxModifyUserInfoHobby4.value!!
        val userHobby5 = modifyUserViewModel.checkBoxModifyUserInfoHobby5.value!!
        val userHobby6 = modifyUserViewModel.checkBoxModifyUserInfoHobby6.value!!
        val userPw = modifyUserViewModel.textFieldModifyUserInfoPw.value!!
        // 객체에 담는다.
        val userModel = UserModel(
            contentActivity.loginUserIdx,
            "",
            userPw,
            userNickName,
            userAge,
            userGender,
            userHobby1, userHobby2, userHobby3, userHobby4, userHobby5, userHobby6,
            0
        )

        // 2. 정보를 수정한다.
        // 비밀번호가 새롭게 입력되어 있는지 값
        val chk = userPw.isNotEmpty()

        CoroutineScope(Dispatchers.Main).launch {
            // 수정 메서드를 호출한다.
            UserDao.updateUserData(userModel, chk)
            Snackbar.make(fragmentModifyUserBinding.root, "수정이 완료되었습니다", Snackbar.LENGTH_SHORT).show()
            Tools.hideSoftInput(contentActivity)
        }
    }

서버에서 사용자 데이터를 가져오는 메서드

// ModifyUserFragment.kt


    // 서버에서 사용자 데이터를 가져온다.
    fun gettingUserData(){
        CoroutineScope(Dispatchers.Main).launch { 
            // 입력 요소들에 공백 문자열을 넣어준다.
            modifyUserViewModel.textFieldModifyUserInfoNickName.value = " "
            modifyUserViewModel.textFieldModifyUserInfoAge.value = " "
            modifyUserViewModel.textFieldModifyUserInfoPw.value = ""
            modifyUserViewModel.textFieldModifyUserInfoPw2.value = ""

            // 서버에서 데이터를 가져온다.
            originalUserModel = UserDao.gettingUserInfoByUserIdx(contentActivity.loginUserIdx)!!

            // 사용자 정보들을 뷰에 넣어준다.
            modifyUserViewModel.textFieldModifyUserInfoNickName.value = originalUserModel.userNickName
            modifyUserViewModel.textFieldModifyUserInfoAge.value = originalUserModel.userAge.toString()

            when(originalUserModel.userGender){
                Gender.MALE.num -> modifyUserViewModel.settingGender(Gender.MALE)
                Gender.FEMALE.num -> modifyUserViewModel.settingGender(Gender.FEMALE)
            }

            modifyUserViewModel.checkBoxModifyUserInfoHobby1.value = originalUserModel.userHobby1
            modifyUserViewModel.checkBoxModifyUserInfoHobby2.value = originalUserModel.userHobby2
            modifyUserViewModel.checkBoxModifyUserInfoHobby3.value = originalUserModel.userHobby3
            modifyUserViewModel.checkBoxModifyUserInfoHobby4.value = originalUserModel.userHobby4
            modifyUserViewModel.checkBoxModifyUserInfoHobby5.value = originalUserModel.userHobby5
            modifyUserViewModel.checkBoxModifyUserInfoHobby6.value = originalUserModel.userHobby6

            modifyUserViewModel.onCheckBoxChanged()
        }
    }
    

입력 요소 초기화 메서드 수정

// ModifyUserFragment.kt



    // 입력 요소 초기화
    fun settingInputForm(){
        modifyUserViewModel.textFieldModifyUserInfoNickName.value = originalUserModel.userNickName
        modifyUserViewModel.textFieldModifyUserInfoAge.value = originalUserModel.userAge.toString()
        modifyUserViewModel.textFieldModifyUserInfoPw.value = ""
        modifyUserViewModel.textFieldModifyUserInfoPw2.value = ""

        when(originalUserModel.userGender){
            Gender.MALE.num -> modifyUserViewModel.settingGender(Gender.MALE)
            Gender.FEMALE.num -> modifyUserViewModel.settingGender(Gender.FEMALE)
        }


        modifyUserViewModel.checkBoxModifyUserInfoHobby1.value = originalUserModel.userHobby1
        modifyUserViewModel.checkBoxModifyUserInfoHobby2.value = originalUserModel.userHobby2
        modifyUserViewModel.checkBoxModifyUserInfoHobby3.value = originalUserModel.userHobby3
        modifyUserViewModel.checkBoxModifyUserInfoHobby4.value = originalUserModel.userHobby4
        modifyUserViewModel.checkBoxModifyUserInfoHobby5.value = originalUserModel.userHobby5
        modifyUserViewModel.checkBoxModifyUserInfoHobby6.value = originalUserModel.userHobby6

        modifyUserViewModel.onCheckBoxChanged()
    }
profile
안드로이드공부

0개의 댓글