Size: a a a

Flutter Developers — русскоговорящее сообщество

2021 March 02

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Alex Fox
Вопрос,
Как можно взять данные из дочернего виджета, и передать их в какую-либо функцию родительского. Через глобальные ключи говорят, плохая практика. В стейтменеджмент это запихивать тоже не вариант. Есть ли какие-то обходные пути?
Да
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Это называется Lifting state
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
A
 B
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
У тебя есть A и B виджеты, B ребенок A
источник

АМ

Александр Миронюк... in Flutter Developers — русскоговорящее сообщество
Подскажите с чего начать учить  flutter
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
И ты хочешь получать актуальное состояние В в А
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Можно сделать несколькими способами
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
1. передать А в конструктор функцию коллбэка
ValueChanged<T> onChanged
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Каждый раз когда у В что то будет менятся в стейте, оно будет вызывать widget.onChanged?.call(currentValue)
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
И А будет получать некий коллбэк
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
который установило
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
2. Объявить сеттер или функцию уже у А
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
И каждый раз когда будет что то меняться у В, он будет вызывать:

context.findAncestorStateOfType<AState>().value = newValue или вместо сеттера дергать метод
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
3. над А и В сделать новый стейтфул + инхеритед виджет С
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
или что возможно проще - InheritedNotifie
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
при изменении значения в В - оно устанавливает значение этому С
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
и уведомление получает А
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
после чего вызывается didChangeDependencies и build у А
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
4. Передать чендж/вэлу нотифай из А в В.
Суть примерно также что и в первом случае, просто этот коллбэк инкапсулирован в класс
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Вариантов жепой ешь, на самом деле
источник