лишь тех виджетов, для которых данные изменились, обновляется вообще все?
Использую StateNotifierProvider, через него доступ к контроллеру и модельке с данными. Стейт обновляется с помощью метода copyWith, а в методе build ConsumerStatefulWidget обращение к провайдеру через ref.watch.
У меня две кнопки на экране и две интовые переменные в стейте, каждая из которых обновляется одной из кнопок. Когда обновляю одну переменную, вместо того, чтобы перерисовался только виджет, который отображает эту переменную - ребилдиться все дерево.
Что делать?
в consumer только нужные виджет и в нем ref watch , если ref watch делать вначале всего экрана конечно все ребилдится
Да, такой вариант я пробовал, но тогда у меня вообще ничего не ребилдится
ребилдится проверено много раз , ref.watch нужно сразу после consumer объявлять обязательно если нижу будут ошибки
ref.read? конечно не будет обновляться
а ты про CounterWidget?
Попробуй использовать final countProvider = StateProvider<int>((ref) { return 0;} Далее обновляй его где нужно: ref.read(countProvider.notifier).update((v)=> value);
Я думал об этом, но что делать, если на одном экране таких данных будет много? Например, какой-нибудь онбординг с десятком полей? Для каждого поля писать свой провайдер? Читабельности никакой и вопрос с производительностью встает, особенно в большом проекте, когда на некоторых экранах может быть таких объектов много. И это не говоря о том, что нужно пистать обработку, чтобы эти объекты не висели в памяти после закрытия экрана. Значит, для оптимизации читабельности и производительности нужно делать гибридный вариант. Где-то обновлять экран через глобальный стейт, а те данные, которые могут обновляться очень часто, например, списки - для них делть отельный провайдер с массивом, как в доках Todo.
Контроллер опеределенный для определенного компонента уи,звучит логично ))
Ну типа того, но не контроллер, а провайдер. Один StateNotifierProvider, с контроллером и стейтом экрана, а так же несколько провайдеров, хранячих стейт отдельных виджетов. При этом, эти одб
.autodispose парамтер закрывает сам
Это да, но на практике тоже заметил нюансы. Например, если стейт не задействовать в UI, то сразу же срабатывает dispose.
для этого и сделан , не используется сбрасывает
Обсуждают сегодня