Создание библиотеки KMP с фактическим/ожидаемымAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Создание библиотеки KMP с фактическим/ожидаемым

Сообщение Anonymous »

Я уже немного экспериментировал с KMP и хотел создать небольшую библиотеку, которая позволит пользователю легко сохранять/извлекать тему (светлая/темная/системная).
Я реализовал это в приложении, которое делаю, и подумал, что будет легко создать из него библиотеку... но ничего более далекого от реальности
Основа библиотеки будет:

Код: Выделить всё

// commonMain
interface ThemePreferences {
suspend fun saveTheme(appThemeScheme: AppThemeScheme)
fun observeTheme(): Flow
}

// androidMain
class ThemePreferenceImpl(private val context: Context) : ThemePreferences {
private val Context.dataStore by preferencesDataStore(name = THEME_PREFERENCES_NAME)
override suspend fun saveTheme(appThemeScheme: AppThemeScheme) {
context.dataStore.edit {
it[THEME_MODE_KEY] = appThemeScheme.name
}
}

override fun observeTheme() = context.dataStore.data.map { preferences ->
when (preferences[THEME_MODE_KEY]) {
AppThemeScheme.LIGHT.name -> AppThemeScheme.LIGHT
AppThemeScheme.DARK.name -> AppThemeScheme.DARK
else -> AppThemeScheme.SYSTEM
}
}

companion object {
private const val STRING_PREFERENCES_KEY = "app_theme_scheme"
private val THEME_MODE_KEY = stringPreferencesKey(STRING_PREFERENCES_KEY)
private const val THEME_PREFERENCES_NAME = "theme_preferences"
}
}

// iosMain
class ThemePreferencesImpl private constructor() : ThemePreferences {
private val userDefaults = NSUserDefaults.standardUserDefaults

actual override fun getTheme(): AppThemeScheme {
val themeValue = userDefaults.stringForKey("theme") ?: AppThemeScheme.SYSTEM.name
return AppThemeScheme.valueOf(themeValue)
}

actual override fun saveTheme(theme: AppThemeScheme) {
userDefaults.setObject(theme.name, "theme")
}
}
Как мне сделать это библиотекой KMP? Мне сложно играть с ожидаемым/актуальным, так как я не думаю, что смогу сделать что-то вроде:

Код: Выделить всё

// commonMain
expect fun createThemePreferences(): ThemePreferences
// androidMain
actual class ThemePreferencesImpl(context: Context)
// iosMain
actual class ThemePreferencesImpl()
Как действовать в подобных ситуациях?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ual-expect
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Создание библиотеки KMP с фактическим/ожидаемым
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Доктест: Как определить разницу между ожидаемым и фактическим результатом?
    Anonymous » » в форуме Python
    0 Ответы
    38 Просмотры
    Последнее сообщение Anonymous
  • Как устранить разницу между bootRun и фактическим запуском jar?
    Гость » » в форуме JAVA
    0 Ответы
    26 Просмотры
    Последнее сообщение Гость
  • Избегайте задержки между Play() и фактическим воспроизведением.
    Anonymous » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Почему мой прогноз Auto ARIMA не соответствует фактическим данным о спросе с четкими тенденциями и сезонностью?
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»