// BoardRepository.kt
interface BoardRepository {
suspend fun postBoard(board: BoardRequestDto): ResultResponse
}
// ResultResponse
data class ResultResponse(
var data: T? = null,
var error: ResponseError? = null
)
@Serializable
data class ResponseError(
val status: Int,
val code: String,
val message: String
)
// BoardRequestDto.kt
@Serializable
data class BoardRequestDto(
val title: String,
// ...
)
// BoardIdDto.kt
@Serializable
data class BoardIdDto(
val boardId: Int
)
// PostBoardIntent.kt
sealed class PostBoardIntent {
data object CreatePost : PostBoardIntent()
}
// PostBoardScreen.kt
@Composable
fun PostBoardScreen(
viewModel: PostBoardViewModel = hiltViewModel()
) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
val title by viewModel.title.collectAsStateWithLifecycle()
when(uiState) {
is PostBoardUiState.Initial ->
Column {
AccompanyTitleInput(
title = title,
onTitleChange = {
viewModel.handleIntent(PostBoardIntent.UpdateTitle(it))
}
)
// ...
}
is PostBoardUiState.Loading -> CircularProgressIndicator()
is PostBoardUiState.Success ->
Column {
AccompanyTitleInput(
title = title,
onTitleChange = {
viewModel.handleIntent(PostBoardIntent.UpdateTitle(it))
}
)
// ...
}
}
// Receives a value for each item from the user
// When you click the post button on the top bar, a post is created.
}
// GetTopBar Function in MainActivity.kt (app module)
@Composable
fun GetTopBar(
currentRoute: String?,
navController: NavHostController
) {
val viewModel: PostBoardViewModel = hiltViewModel()
// TopAppBar of PostBoardScreen
Screen.Post.route -> {
BackButtonWithTitleTopAppBar(
screenTitle = "동행 모집하기",
onNavigateUp = { navController.navigateUp() },
onPostClick = {
viewModel.handleIntent(PostBoardIntent.CreatePost)
navController.navigate(Screen.Home.route)
}
)
}
}
}
Как я пробовал
Значения не собираются даже при объединении и CollectLatest используются.
Проверьте, правильно ли установлено значение перед вызовом createPost -> Оно установлено правильно
До тех пор, пока не будет создан createPost< /code>, значение StateFlow проверяется на предмет того, является ли оно последним значением, но ему присваивается начальное значение внутри функции.
Как устранить проблему, когда значения StateFlow не обновляются? [list] [*]Значение StateFlow не присвоено объекту BoardRequestDto.[*]Последнее значение StateFlow не собирается должным образом в функции createPost. [/list] [code]// PostBoardViewModel.kt @HiltViewModel class PostBoardViewModel @Inject constructor( private val boardRepository: BoardRepository, ) : ViewModel() { private val _uiState = MutableStateFlow(PostBoardUiState.Initial) val uiState: StateFlow = _uiState
private val _title = MutableStateFlow("") val title: StateFlow = _title
private lateinit var boardRequestDto: BoardRequestDto
// Enum class: PreferredGender, PreferredAge, Region, Category, BoardStatus enum class PreferredGender { SAME, ANY } [/code] [code]// BoardRepository.kt interface BoardRepository { suspend fun postBoard(board: BoardRequestDto): ResultResponse }
// ResultResponse data class ResultResponse( var data: T? = null, var error: ResponseError? = null )
@Serializable data class ResponseError( val status: Int, val code: String, val message: String )
// BoardRequestDto.kt @Serializable data class BoardRequestDto( val title: String, // ... )
// BoardIdDto.kt @Serializable data class BoardIdDto( val boardId: Int )
// PostBoardIntent.kt sealed class PostBoardIntent { data object CreatePost : PostBoardIntent() } [/code] [code]// PostBoardScreen.kt @Composable fun PostBoardScreen( viewModel: PostBoardViewModel = hiltViewModel() ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle()
val title by viewModel.title.collectAsStateWithLifecycle()
when(uiState) { is PostBoardUiState.Initial -> Column { AccompanyTitleInput( title = title, onTitleChange = { viewModel.handleIntent(PostBoardIntent.UpdateTitle(it)) } ) // ... } is PostBoardUiState.Loading -> CircularProgressIndicator() is PostBoardUiState.Success -> Column { AccompanyTitleInput( title = title, onTitleChange = { viewModel.handleIntent(PostBoardIntent.UpdateTitle(it)) } ) // ... } } // Receives a value for each item from the user // When you click the post button on the top bar, a post is created. } [/code] [code]// GetTopBar Function in MainActivity.kt (app module) @Composable fun GetTopBar( currentRoute: String?, navController: NavHostController ) { val viewModel: PostBoardViewModel = hiltViewModel()
// TopAppBar of PostBoardScreen Screen.Post.route -> { BackButtonWithTitleTopAppBar( screenTitle = "동행 모집하기", onNavigateUp = { navController.navigateUp() }, onPostClick = { viewModel.handleIntent(PostBoardIntent.CreatePost) navController.navigate(Screen.Home.route) } ) } } } [/code] Как я пробовал [list] [*]Значения не собираются даже при объединении и CollectLatest используются. [*]Проверьте, правильно ли установлено значение перед вызовом createPost -> Оно установлено правильно [*]До тех пор, пока не будет создан createPost< /code>, значение StateFlow проверяется на предмет того, является ли оно последним значением, но ему присваивается начальное значение внутри функции. [*]Copilot и GPT не решают проблему [/list]