Что такое функция rememberSavable

Ответ

rememberSavable — это комбинация remember и saveable в Jetpack Compose, позволяющая сохранять состояние при изменении конфигурации (например, повороте экрана) или процессе смерти процесса.

Пример:

var text by rememberSaveable { mutableStateOf("") }
TextField(
    value = text,
    onValueChange = { text = it }
)

Особенности:

  • Работает через Bundle (похоже на onSaveInstanceState).
  • Поддерживает пользовательские Saver для сложных объектов.
  • Не сохраняет состояние при выходе из приложения.

Ответ 18+ 🔞

А, ну это же та самая штука, которая не даёт твоему интерфейсу обнулиться, как будто у него склероз, когда пользователь экран поворачивает или система приложение в фоне прибивает! rememberSavable, ёпта, спасение для ленивых.

Вот смотри, обычный remember — он как кратковременная память у золотой рыбки. Пока композиция жива — всё ок. Но стоит только повернуть телефон — композиция перестраивается заново, и твой TextField с введённым текстом становится пустым. Пиздец, пользователь взвоет!

А rememberSaveable — это уже продвинутая рыбка, которая ведёт дневник. Она ключевые вещи (состояние) записывает в системный Bundle (это такая коробка, куда Android скидывает всякое перед тем, как процесс убить). Потом, когда всё заново запускается, она из этой коробки своё состояние достаёт. Магия, блядь!

Простой пример — чтобы мозг не взорвался:

var userInput by rememberSaveable { mutableStateOf("") }
TextField(
    value = userInput,
    onValueChange = { userInput = it }
)

Вот и всё. Теперь что ни вводи — хоть «хуй с горы», хоть «манда с ушами» — при повороте текст на месте останется. Доверия к приложению сразу больше, ебать, чем ноль.

Но есть подводные грабли, чувак, будь осторожен!

Эта штука через Bundle работает, а туда можно пихать не всё что угодно, а только примитивы да Parcelable объекты. Если попробуешь сохранить какую-нибудь свою хитровыебанную дата-класс-модель — получишь пиздюлину в виде краша. Удивление пиздец будет!

Для таких случаев есть Saver — это как инструкция для rememberSaveable, объясняющая, как твой сложный объект разобрать на примитивы для коробки (Bundle), а потом обратно собрать. Но это уже высший пилотаж, на любителя.

Короче, запомни:

  • Для простых вещей (строка, число, булеан)rememberSaveable работает из коробки. Красота.
  • Для выхода из приложения — эта хуйня не поможет. Тут уже нужно ViewModel с SavedStateHandle или база данных. rememberSaveable — не волшебная палочка на все случаи.
  • Если что-то не сохраняется — первым делом смотри, а сохраняемый ли это тип вообще. Не пытайся впендюрить туда что попало.

Используй с умом, и интерфейс будет стабильным, как швейцарские часы. А не как мои нервы после пятницы.