Я новичок в Kotlin и сейчас пытаюсь создать небольшое приложение для электронных книг для своего проекта. По сути, у меня есть база данных комнат для книг, принадлежащих всем пользователям, и ViewModel, которая помогает ее заполнить.
@Entity
data class UsersBook(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
@ColumnInfo val idImage: Int,
@ColumnInfo val title: String,
@ColumnInfo val author: String,
@ColumnInfo val toRead: Boolean,
@ColumnInfo val categories: Category,
@ColumnInfo val favourite: String,
@ColumnInfo val rating: Double
)
В основном у меня две проблемы:
1) Для книг в магазине я просто использую список, который создаю на экране магазина (не уверен) если это хорошая идея, но мне нужно всего около 20-30 книг). У каждой книги есть кнопка для добавления ее в базу данных UserBooks (с некоторыми дополнительными полями, такими как nameOwner, которое я получаю, используя имя пользователя, вошедшего в систему в данный момент), однако я не уверен, как обрабатывать onClickButton, поскольку я потребуется некоторая задержка или что-то в этом роде.
2) Если я хочу добавить 3-4 книги одновременно, как мне с этим справиться? (например, у каждого пользователя есть несколько «бесплатных» книг, которые ему выдаются после регистрации) у каждого пользователя есть копия книги в базе данных UserBook, главным образом из-за поля «любимое».
Изначально у меня была аналогичная проблема со входом в систему, и кто-то здесь предложил мне использовать оператор When для обработки навигации после проверки имени пользователя и пароля, хотя я мог бы использовать что-то подобное, например, TransactionScreen, но я не уверен, сработает ли это, поскольку я мог бы просто усложнить свой проект бесплатно (также это не решило бы второй вопрос) или, может быть, использовать предварительно заполненную базу данных для книг, но как бы я обработал поле userOwner? поскольку база данных для пользователей находится в памяти (мне также нужно будет узнать, как ее создать).
Я новичок в Kotlin и сейчас пытаюсь создать небольшое приложение для электронных книг для своего проекта. По сути, у меня есть база данных комнат для книг, принадлежащих всем пользователям, и ViewModel, которая помогает ее заполнить. [code]@Entity data class UsersBook( @PrimaryKey(autoGenerate = true) val id: Int = 0, @ColumnInfo val idImage: Int, @ColumnInfo val title: String, @ColumnInfo val author: String, @ColumnInfo val toRead: Boolean, @ColumnInfo val categories: Category, @ColumnInfo val favourite: String, @ColumnInfo val rating: Double ) [/code] [code]//Helper ViewModel data class AddNewUserBookState( val idImage: Int = 0, val title: String = "", val author: String = "", val toRead: Boolean = false, val categories: Category = Category.Avventura, val nameOwner: String = "", val rating: Double = 0.0 ) { fun toUserBook() = UsersBook( idImage = idImage, title = title, author = author, toRead = toRead, categories = categories, nameOwner = nameOwner, rating = rating ) } interface AddNewUserBookActions { fun setImage(idImage: Int) fun setTitle(title: String) fun setAuthor(author: String) fun setToRead(toRead: Boolean) fun setCategories(categories: Category) fun setNameOwner(nameOwner: String) fun setRating(rating: Double) }
class AddUsersBooksViewModel : ViewModel() { private val _state = MutableStateFlow(AddNewUserBookState()) val state = _state.asStateFlow()
val actions = object : AddNewUserBookActions { override fun setImage(idImage: Int) = _state.update { it.copy(idImage = idImage) }
} } [/code] [code]//Database data class UsersBooksState(val usersBooks: List)
class UsersBooksViewModel(private val repository: UsersBooksRepository) : ViewModel() { val state = repository.books.map { UsersBooksState(usersBooks = it) }.stateIn( scope = viewModelScope, started = SharingStarted.WhileSubscribed(), initialValue = UsersBooksState(emptyList()) )
fun addUserBook(usersBook: UsersBook) = viewModelScope.launch { repository.upsert(usersBook) } } [/code] Это мой экран магазина [code]data class Book( val idImage: Int, val title: String, val author: String, val categories: Category, val price: Double, val discount: Int, val rating: Double )
@Composable fun StoreScreen( state: AddNewUserBookState, actions: AddNewUserBookActions, onSubmit: () -> Unit, usersState: LoggedUserState ) {
[/code] В основном у меня две проблемы: 1) Для книг в магазине я просто использую список, который создаю на экране магазина (не уверен) если это хорошая идея, но мне нужно всего около 20-30 книг). У каждой книги есть кнопка для добавления ее в базу данных UserBooks (с некоторыми дополнительными полями, такими как nameOwner, которое я получаю, используя имя пользователя, вошедшего в систему в данный момент), однако я не уверен, как обрабатывать onClickButton, поскольку я потребуется некоторая задержка или что-то в этом роде. 2) Если я хочу добавить 3-4 книги одновременно, как мне с этим справиться? (например, у каждого пользователя есть несколько «бесплатных» книг, которые ему выдаются после регистрации) у каждого пользователя есть копия книги в базе данных UserBook, главным образом из-за поля «любимое». Изначально у меня была аналогичная проблема со входом в систему, и кто-то здесь предложил мне использовать оператор When для обработки навигации после проверки имени пользователя и пароля, хотя я мог бы использовать что-то подобное, например, TransactionScreen, но я не уверен, сработает ли это, поскольку я мог бы просто усложнить свой проект бесплатно (также это не решило бы второй вопрос) или, может быть, использовать предварительно заполненную базу данных для книг, но как бы я обработал поле userOwner? поскольку база данных для пользователей находится в памяти (мне также нужно будет узнать, как ее создать).