diff --git a/app/src/main/java/com/example/abe/data/local/IPreferenceDataStore.kt b/app/src/main/java/com/example/abe/data/local/IPreferenceDataStore.kt
new file mode 100644
index 0000000000000000000000000000000000000000..fdaef4708cb2f58cc6badbb11dcfcfd08ce42486
--- /dev/null
+++ b/app/src/main/java/com/example/abe/data/local/IPreferenceDataStore.kt
@@ -0,0 +1,12 @@
+package com.example.abe.data.local
+
+import androidx.datastore.preferences.core.Preferences
+import kotlinx.coroutines.flow.Flow
+
+interface IPreferenceDataStore {
+    suspend fun <T> getPreference(key: Preferences.Key<T>,defaultValue: T):Flow<T>
+    suspend fun <T> getFirstPreference(key: Preferences.Key<T>,defaultValue: T):T
+    suspend fun <T> putPreference(key: Preferences.Key<T>,value:T)
+    suspend fun <T> removePreference(key: Preferences.Key<T>)
+    suspend fun <T> clearAllPreference()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/abe/data/local/PreferenceDataStoreConstants.kt b/app/src/main/java/com/example/abe/data/local/PreferenceDataStoreConstants.kt
new file mode 100644
index 0000000000000000000000000000000000000000..576322b342de156997934d4fececc78ee20f2fb7
--- /dev/null
+++ b/app/src/main/java/com/example/abe/data/local/PreferenceDataStoreConstants.kt
@@ -0,0 +1,8 @@
+package com.example.abe.data.local
+
+import androidx.datastore.preferences.core.stringPreferencesKey
+
+object PreferenceDataStoreConstants {
+    val TOKEN = stringPreferencesKey("TOKEN")
+    val USER = stringPreferencesKey("USER")
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/abe/data/local/PreferenceDataStoreHelper.kt b/app/src/main/java/com/example/abe/data/local/PreferenceDataStoreHelper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..45416a3edb0785328a1d6e8a811abdecb582a00e
--- /dev/null
+++ b/app/src/main/java/com/example/abe/data/local/PreferenceDataStoreHelper.kt
@@ -0,0 +1,53 @@
+package com.example.abe.data.local
+
+import android.content.Context
+import androidx.datastore.preferences.core.Preferences
+import androidx.datastore.preferences.core.edit
+import androidx.datastore.preferences.core.emptyPreferences
+import androidx.datastore.preferences.preferencesDataStore
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.catch
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.flow.map
+import java.io.IOException
+
+private val Context.dataStore by preferencesDataStore(
+    name = "PreferenceDataStore"
+)
+class PreferenceDataStoreHelper(context: Context):IPreferenceDataStore {
+
+    private val dataSource = context.dataStore
+
+    override suspend fun <T> getPreference(key: Preferences.Key<T>, defaultValue: T):
+            Flow<T> = dataSource.data.catch { exception ->
+        if (exception is IOException){
+            emit(emptyPreferences())
+        }else{
+            throw exception
+        }
+    }.map { preferences->
+        val result = preferences[key]?: defaultValue
+        result
+    }
+
+    override suspend fun <T> getFirstPreference(key: Preferences.Key<T>, defaultValue: T) :
+            T = dataSource.data.first()[key] ?: defaultValue
+
+    override suspend fun <T> putPreference(key: Preferences.Key<T>, value: T) {
+        dataSource.edit {   preferences ->
+            preferences[key] = value
+        }
+    }
+
+    override suspend fun <T> removePreference(key: Preferences.Key<T>) {
+        dataSource.edit { preferences ->
+            preferences.remove(key)
+        }
+    }
+
+    override suspend fun <T> clearAllPreference() {
+        dataSource.edit { preferences ->
+            preferences.clear()
+        }
+    }
+}
\ No newline at end of file