Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/#11 week4 compose 필수 과제 구현 #13

Merged
merged 17 commits into from
May 24, 2024

Conversation

hyeeum
Copy link
Collaborator

@hyeeum hyeeum commented May 3, 2024

📌𝘐𝘴𝘴𝘶𝘦𝘴

📎𝘞𝘰𝘳𝘬 𝘋𝘦𝘴𝘤𝘳𝘪𝘱𝘵𝘪𝘰𝘯

  • 로그인을 서버통신을 통해 다른 기기에서 로그인을 시도시에도 성공할 수 있게 해주세요
  • 로그인 성공 / 실패 여부에 따라서
  • 내 정보를 구현
    • 로그인이 성공했을 시, UserId (로그인 할 때 id 아님 주의) 를 토스트 메세지에 넣어주세요! (세미나 자료 참고)

📷𝘚𝘤𝘳𝘦𝘦𝘯𝘴𝘩𝘰𝘵

compose.mp4

💬𝘛𝘰 𝘙𝘦𝘷𝘪𝘦𝘸𝘦𝘳𝘴

홈 프래그먼트 팔로워랑 비밀번호 부분을 아직 완성못했는데 완성하는대로 바로 푸쉬하겠습니다!

api 연결은 컴포즈와 xml 코드가 거의 동일하게 작성되었습니다..!
코리 남겨주시면 열심히열심히 반영하겠습니다..!

앗 그리고 api를 이리저리 시도하다보니 이번에 커밋을 쪼개지 못했네요..담번에는 꼭 세밀하게 커밋하겠습니다!

코리 반영하기

@hyeeum hyeeum requested review from kez-lab and a team May 3, 2024 14:12
@hyeeum hyeeum self-assigned this May 3, 2024
Copy link

@l2hyunwoo l2hyunwoo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요 혜음님. 안드로이드 파트 명예 OB 이현우입니다. 만나서 반갑습니다.

앞으로의 과제들에 대한 코드리뷰를 맡게 되었습니다. 고민해보시다가 궁금한 점이 있으시면 지식 공유방/디스코드 연락 해주세요. 대면/비대면 자유형식으로 추가 피드백 가능합니다.

우선 과제 어려우셨을텐데 빠르게 과제 수행해주신점 너무 좋습니다. 관련해서 추가적으로 피드백/질문 남긴 것들이 있습니다. 질문을 남긴 경우 코드에 문제가 있어서 질문이 남긴 것이 아니고 정말 혜음님의 작성 의도가 궁금해서 남긴 것이니 이 점 참고해주시면 감사하겠습니다.

앞으로 잘 부탁드리겠습니다.

@@ -13,7 +13,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp

@Composable
fun HomeUi(viewModel: HomeViewModel) {
fun HomeScreen(viewModel: HomeViewModel) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
fun HomeScreen(viewModel: HomeViewModel) {
fun HomeScreen(viewModel: HomeViewModel = viewModel()) {

Compose에서 ViewModel은 함수 내에서 멤버변수로 직접 사용하거나 매개변수로 주입받는 경우에는 이런식으로 디폴트 매개변수로 주입받아서 호출부에서는

HomeScreen()

으로만 사용할 수 있게 작성하는 경향이 있습니다. 이 역시 취향의 영역이니 다른 분들 코드 종합적으로 보고, 직접 코드를 적어보시면서 어떤게 더 좋을지 판단해보시는 것이 좋을 것 같아요.

@@ -37,6 +37,7 @@ import androidx.compose.ui.unit.sp
import com.sopt.now.compose.ui.theme.NOWSOPTAndroidTheme

class LoginActivity : ComponentActivity() {
private val viewModel by viewModels<LoginViewModel>()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

View 기반에서는 이와 같이 선언을 해도 되지만, 저희는 Compose를 사용하니 이 방식보다는 Compose 코드 내부에서 선언을 해보는 방식으로 변경해보는 것도 좋을 것 같습니다.

Comment on lines 63 to 69
private fun initObserver() {
viewModel.liveData.observe(this) { loginState ->
Toast.makeText(
this@LoginActivity,
loginState.message,
Toast.LENGTH_SHORT
).show()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

컴포즈 내부에서는 이런 상태들이나 이벤트들을 관찰해서 처리를 할 수 없을까요? 어떻게 구현해야 컴포즈 내부에서 상태/이벤트를 처리할 수 있을까요?

Comment on lines 72 to 73
intent = Intent(this@LoginActivity,MainActivity::class.java)
intent.putExtra("userId", viewModel.userId)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지금은 Intent 기반으로 화면이동을 하지만 이후에는 Compose-navigation을 사용하시면서 화면전환 로직 구축해보는 것도 좋을 것 같습니다.

Comment on lines 92 to 94
pw: String,
onIdChange: (String) -> Unit,
onPwChange: (String) -> Unit

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

축약어는 지양하시는 것이 가독성에 좋습니다. pw -> password로 변경해보면 어떨까요?

Comment on lines +77 to +79
private fun initViews(userId: String) {
viewModel.userInfo(userId.toInt())
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

함수분리 좋습니다.

Comment on lines 134 to 146
when (selectedItem) {
0 -> {
HomeUi(HomeViewModel())
HomeScreen(HomeViewModel())
}

1 -> {
Text(text = "Search")
}

2 -> {
ProfileUi(userId, userPw, userNick)
initObserver()
ProfileScreen(userNick, userId, userPhone)
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

selectedItem이 무엇이 있는지 모르는데 다른 개발자들이 0, 1, 2가 어떤건지 알고 추가적인 코드리뷰를 할 수 있을까요...? 물론 여기에서는 대략 홈, 검색, 프로필 화면인 것을 인지할 수 있긴 합니다만 코드가 좀만 더 길어지면 코드 보기가 더 어려워질 수 있으니 이 점 유의해서 코드 작성해주시면 좋을 것 같아요.

Comment on lines 47 to 55
SignUpScreen(
id,
pw,
nick,
etc,
phone,
onIdChange = { id = it },
onPwChange = { pw = it },
onNickChange = { nick = it },
onEtcChange = { etc = it })
onPhoneChange = { phone = it })

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

함수의 경우를 제외하고, 변수의 경우에는 각 패러미터에 어떤 값들이 들어가야 하는지 명시가 안되어있어서 에러를 일으킬 가능성이 농후해집니다. 컴포즈에서는 named argument 꼭 활용하시길 바랍니다.

Comment on lines 42 to 45
var id by remember { mutableStateOf("") }
var pw by remember { mutableStateOf("") }
var nick by remember { mutableStateOf("") }
var etc by remember { mutableStateOf("") }
var phone by remember { mutableStateOf("") }

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

축약어 지양해주세요.

pw, nick

Comment on lines 64 to 74
viewModel.liveData.observe(this) { signUpState ->
Toast.makeText(
this@SignUpActivity,
signUpState.message,
Toast.LENGTH_SHORT
).show()

if (signUpState.isSuccess) {
finish()
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Toast는 따지고 보면 화면에 영원히 띄워질 상태가 아니고 한번 띄워지고 말아야하는 상황이자나요. 지금 구현된 코드 기반에서는 화면 회전을 하거나 다크모드 전환을 했을 때 토스트가 한번 더 띄워질 수 있는 코드로 보여집니다. 확인 부탁드립니다.

Copy link
Member

@boiledEgg-s boiledEgg-s left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이번주도 너무 고생하셨어요!! 남은 부분은 후딱 해서 올려주세요~ 3조 더욱 열심히 정진합시다~

Copy link
Member

@chattymin chattymin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!!!
xml과 공통되는 부분은 일부러 코멘트 안달았으니 xml에 달린 것들은 여기서도 수정부탁드립니다!!

Comment on lines 7 to 12
interface UserService {
@GET("/member/info")
fun userInfo(
@Header("memberId") userId : Int
) : Call<ResponseUserInfoDto>
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

헤더도 인터셉터로 넣어봐요~

Comment on lines 109 to 134
Text(
text = stringResource(R.string.text_id)
)
TextField(
value = id,
onValueChange = onIdChange,
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
placeholder = { Text(stringResource(R.string.tf_login_id)) },
singleLine = true,
leadingIcon = { Icon(Icons.Filled.Person, contentDescription = "User Icon") }
)
Spacer(modifier = Modifier.height(30.dp))
Text(text = stringResource(R.string.text_pw))
TextField(
value = pw,
onValueChange = onPwChange,
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
placeholder = { Text(stringResource(R.string.tf_login_pw)) },
singleLine = true,
visualTransformation = PasswordVisualTransformation(),
leadingIcon = { Icon(Icons.Filled.Lock, contentDescription = "Lock Icon") },
)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

중복되는 친구들은 component로 빼보는건 어떨까용

Copy link

@youjin09222 youjin09222 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이번 주차도 고생하셨습니다👏👏
저도 xml과 거의 동일하게 구현해서 반갑네요...
이번주에 같이 보완해봅시다!!

Comment on lines 63 to 69
private fun initObserver() {
viewModel.liveData.observe(this) { loginState ->
Toast.makeText(
this@LoginActivity,
loginState.message,
Toast.LENGTH_SHORT
).show()
Copy link

@youjin09222 youjin09222 May 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 저는 xml 그대로 사용하려다가 오류가 나서 찾아보니 컴포즈에서 observeAsState()를 사용하더라구요! 요것도 한번 찾아보시면 좋을 것 같아요!

@hyeeum
Copy link
Collaborator Author

hyeeum commented May 6, 2024

안녕하세요 혜음님. 안드로이드 파트 명예 OB 이현우입니다. 만나서 반갑습니다.

앞으로의 과제들에 대한 코드리뷰를 맡게 되었습니다. 고민해보시다가 궁금한 점이 있으시면 지식 공유방/디스코드 연락 해주세요. 대면/비대면 자유형식으로 추가 피드백 가능합니다.

우선 과제 어려우셨을텐데 빠르게 과제 수행해주신점 너무 좋습니다. 관련해서 추가적으로 피드백/질문 남긴 것들이 있습니다. 질문을 남긴 경우 코드에 문제가 있어서 질문이 남긴 것이 아니고 정말 혜음님의 작성 의도가 궁금해서 남긴 것이니 이 점 참고해주시면 감사하겠습니다.

앞으로 잘 부탁드리겠습니다.

안녕하세요! 귀한 시간 내어 코드리뷰 달아주신 점 너무 감사드립니다! 리뷰에 달아주신 내용들은 반영할 수 있는만큼 최대한으로 반영하여 좋은 코드 작성할 수 있도록 노력하겠습니다. 아직 부족한 실력이지만 앞으로 잘부탁드립니다 :)

@hyeeum hyeeum merged commit a2a2bad into develop-compose May 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants