Skip to content

Commit bfc20b9

Browse files
authored
Make sure user input data persist across configuration changes (#108)
1 parent 374ff78 commit bfc20b9

File tree

3 files changed

+23
-14
lines changed

3 files changed

+23
-14
lines changed

stream-feeds-android-sample/src/main/java/io/getstream/feeds/android/sample/feed/CreateContentBottomSheet.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ import androidx.compose.material3.rememberModalBottomSheetState
4343
import androidx.compose.runtime.Composable
4444
import androidx.compose.runtime.getValue
4545
import androidx.compose.runtime.mutableStateOf
46-
import androidx.compose.runtime.remember
4746
import androidx.compose.runtime.rememberUpdatedState
47+
import androidx.compose.runtime.saveable.rememberSaveable
4848
import androidx.compose.runtime.setValue
4949
import androidx.compose.ui.Alignment
5050
import androidx.compose.ui.Modifier
@@ -92,9 +92,9 @@ fun CreateContentBottomSheet(
9292
)
9393
val inputEnabled = state == CreateContentState.Composing
9494

95-
var text by remember { mutableStateOf("") }
96-
var attachments by remember { mutableStateOf(emptyList<Uri>()) }
97-
var isStory by remember { mutableStateOf(false) }
95+
var text by rememberSaveable { mutableStateOf("") }
96+
var attachments by rememberSaveable { mutableStateOf(emptyList<Uri>()) }
97+
var isStory by rememberSaveable { mutableStateOf(false) }
9898

9999
ModalBottomSheet(
100100
onDismissRequest = onDismiss,

stream-feeds-android-sample/src/main/java/io/getstream/feeds/android/sample/feed/CreatePollBottomSheet.kt

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,11 @@ import androidx.compose.runtime.getValue
4646
import androidx.compose.runtime.mutableStateListOf
4747
import androidx.compose.runtime.mutableStateOf
4848
import androidx.compose.runtime.remember
49+
import androidx.compose.runtime.saveable.listSaver
50+
import androidx.compose.runtime.saveable.rememberSaveable
4951
import androidx.compose.runtime.setValue
5052
import androidx.compose.runtime.snapshots.SnapshotStateList
53+
import androidx.compose.runtime.toMutableStateList
5154
import androidx.compose.ui.Alignment
5255
import androidx.compose.ui.Modifier
5356
import androidx.compose.ui.res.painterResource
@@ -85,14 +88,20 @@ private fun ColumnScope.CreatePollBottomSheetContent(
8588
onCreateClicked: (PollFormData) -> Unit,
8689
onCancelClick: () -> Unit,
8790
) {
88-
var question by remember { mutableStateOf("") }
89-
val options = remember { mutableStateListOf("", "") }
90-
var allowMultipleAnswers by remember { mutableStateOf(false) }
91-
var constrainMaxVotesPerPerson by remember { mutableStateOf(false) }
92-
var maxVotesPerPerson by remember { mutableStateOf("") }
93-
var anonymousPoll by remember { mutableStateOf(false) }
94-
var allowSuggestingOptions by remember { mutableStateOf(false) }
95-
var allowComments by remember { mutableStateOf(false) }
91+
var question by rememberSaveable { mutableStateOf("") }
92+
// Save options list using a custom saver for SnapshotStateList
93+
val options =
94+
rememberSaveable(
95+
saver = listSaver(save = { it.toList() }, restore = { it.toMutableStateList() })
96+
) {
97+
mutableStateListOf("", "")
98+
}
99+
var allowMultipleAnswers by rememberSaveable { mutableStateOf(false) }
100+
var constrainMaxVotesPerPerson by rememberSaveable { mutableStateOf(false) }
101+
var maxVotesPerPerson by rememberSaveable { mutableStateOf("") }
102+
var anonymousPoll by rememberSaveable { mutableStateOf(false) }
103+
var allowSuggestingOptions by rememberSaveable { mutableStateOf(false) }
104+
var allowComments by rememberSaveable { mutableStateOf(false) }
96105
var errorText by remember { mutableStateOf("") }
97106

98107
Row(

stream-feeds-android-sample/src/main/java/io/getstream/feeds/android/sample/feed/EditContentDialog.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ import androidx.compose.material3.TextButton
2424
import androidx.compose.runtime.Composable
2525
import androidx.compose.runtime.getValue
2626
import androidx.compose.runtime.mutableStateOf
27-
import androidx.compose.runtime.remember
27+
import androidx.compose.runtime.saveable.rememberSaveable
2828
import androidx.compose.runtime.setValue
2929
import androidx.compose.ui.Modifier
3030
import androidx.compose.ui.text.font.FontWeight
3131
import androidx.compose.ui.unit.sp
3232

3333
@Composable
3434
fun EditContentDialog(initialText: String, onDismiss: () -> Unit, onSave: (String) -> Unit) {
35-
var editText by remember { mutableStateOf(initialText) }
35+
var editText by rememberSaveable { mutableStateOf(initialText) }
3636

3737
AlertDialog(
3838
onDismissRequest = onDismiss,

0 commit comments

Comments
 (0)