android / android/codelab-android-datastore
Lab refers to an undefined context.createDataStore(...) function
- Vorherrschende Sprache
- Kotlin
- Sterne
- 240
- Forks
- 113
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
[8. SharedPreferences to Proto DataStore](https://developer.android.com/codelabs/android-proto-datastore#7) is already very chaotic in terms of modifications that ain't clear whether they apply to `UserPreferencesRepository.kt` or to `TasksActivity.kt` or maybe to both.
That's because, in previous steps, the lab mandates to temporarily create a `Context` extension property `userPreferencesStore` that it's also temporarily injected from `TasksActivity` into `UserPreferencesRepository`.
But once at step [8. SharedPreferences to Proto DataStore](https://developer.android.com/codelabs/android-proto-datastore#7), lots of these temporary things become finalized although the lab only tells what to edit but not where.
At some point, it requests to redefine `userPreferencesStore` but this time not as a `Context` extension property but as a presumably `UserPreferencesRepository` property. It doesn't clarify whose this redefinition belongs. I presume that it's `UserPreferencesRepository`.
It doesn't end there, though: the new definition invokes a non-existing `context.createDataStore(...)` function as follows:
```
private val userPreferencesStore: DataStore = context.createDataStore(
fileName = "user_prefs.pb",
serializer = UserPreferencesSerializer,
migrations = listOf(sharedPrefsMigration)
)
```
I could only finish the lab by figuring out the missing extension function as follows:
```
fun Context.createDataStore(
fileName: String,
serializer: Serializer,
corruptionHandler: ReplaceFileCorruptionHandler? = null,
migrations: List> = listOf(),
scope: CoroutineScope = CoroutineScope(Dispatchers.IO + SupervisorJob())
): DataStore =
DataStoreFactory.create(
produceFile = { File(this.filesDir, "datastore/$fileName") },
serializer = serializer,
corruptionHandler = corruptionHandler,
migrations = migrations,
scope = scope
)
```
If my guessing is correct, the lab should include my guessed definition for God's sake.
The provided finished branch `proto_datastore` just stuck to the temporary definition (contradicting the lab instructions that called for a redefinition.)
Beitragsleitfaden
Rechercherichtung
Beginne mit dem Vergleich von Schritt 8 des Codelabs SharedPreferences to Proto DataStore mit UserPreferencesRepository.kt, TasksActivity.kt und dem proto_datastore-Branch. Überprüfe, wo userPreferencesStore hingehört und ob context.createDataStore definiert oder vorgesehen ist; abgeschlossen ist die Aufgabe, wenn die Anweisungen und der fertige Branch die Zuständigkeit konsistent angeben und jede erforderliche Definition enthalten.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- android, kotlin
- Bereich
- documentation, mobile
- Issue-Typ
- Dokumentation
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 38/100