mirror of
https://github.com/AdrianKuta/KahootQuiz.git
synced 2025-10-30 16:33:42 +01:00
refactor: Improve QuizScreen layout and choice presentation
This commit refactors the `QuizScreen` to use a `Column` instead of a `LazyColumn` for its main layout, improving the positioning and sizing of elements. It also introduces an `EvenGrid` composable for displaying choices, ensuring they are evenly distributed.
Key changes:
- **QuizScreen.kt:**
- Changed the main layout from `LazyColumn` to `Column`.
- Toolbar, QuestionContent, Choices, Timer, and ContinueButton are now direct children of the `Column`.
- `QuestionContent` now uses `fillMaxHeight(0.5f)` to take up half the available height.
- `Choices` composable now uses `weight(1f)` to fill remaining space.
- Removed `animateContentSize` and `animateItem` modifiers.
- Refactored how individual UI sections (toolbar, question, choices, timer, continue button) are structured within the main `Column`.
- **components/EvenGrid.kt:**
- Added a new reusable `EvenGrid` composable that arranges items into a grid with a specified number of columns, ensuring even distribution.
- **components/Choices.kt:**
- Replaced `FlowRow` with the new `EvenGrid` composable to display choices.
- `ChoiceItem` now uses `fillMaxHeight()` within the `EvenGrid` cell.
- Removed explicit height setting for `ChoiceItem`'s `Box`.
- **components/QuestionContent.kt:**
- `AsyncImage` within `QuestionContent` now uses `weight(1f)` instead of `heightIn(min = 200.dp)`.
- **components/TimerBar.kt:**
- Removed `coerceIn(0f, 1f)` for `progress` in `fillMaxWidth` as progress should already be within this range.
- **QuizScreenViewModel.kt & domain/models/Question.kt:**
- Made `Question.choices` non-nullable (`List<Choice>`) and updated the mapper and ViewModel to reflect this. This simplifies null checks for `currentQuestion.choices`.
- Accessing `quizState.quiz.questions[currentQuestionIndex]` directly instead of `getOrNull` as the index should always be valid.
- **data/mappers/QuizMapper.kt:**
- Updated `QuestionDto.toDomain()` to return `orEmpty()` for choices, ensuring a non-null list.
This commit is contained in:
@@ -10,7 +10,7 @@ data class Question(
|
||||
val time: Duration?,
|
||||
val points: Boolean? = null,
|
||||
val pointsMultiplier: Int?,
|
||||
val choices: List<Choice>?,
|
||||
val choices: List<Choice>,
|
||||
val layout: String? = null,
|
||||
val image: String? = null,
|
||||
val imageMetadata: ImageMetadata?,
|
||||
|
||||
Reference in New Issue
Block a user