169 похожих чатов

Почему в initState context.read можно сделать, а context.watch нельзя? Документация Флаттера

по initState говорит следующее:
You cannot use BuildContext.dependOnInheritedWidgetOfExactType from this method. However, didChangeDependencies will be called immediately following this method, and BuildContext.dependOnInheritedWidgetOfExactType can be used there.
Но context.read-то работает!
Там что, какой-то контекст "недоделанный", что ли?

7 ответов

28 просмотров

context.read не использует dependOnInheritedWidgetOfExactType а context.watch использует

Я думаю что дело в том что dependOn… может вызвать ребилд виджета, а на момент вызова initState ещё не вызывался даже первый билд

> This method should not be called from widget constructors or from State.initState methods, because those methods would not get called again if the inherited value were to change. Неочевидное поведение будет. Пишешь, например _value = context.watch<Something>(); и ожидаешь, что оно будет обновляться. А оно не будет.

Sergio-Molchanovsky Автор вопроса
Kirill Bubochkin
> This method should not be called from widget con...

А, то есть если написать initState() { _value = context.watch<Something>(); } то при изменении Something. ребилд произойдет, но код в initState не выполнится и переменная _value не обновится.

Эти экстеншены для контекста довольно неочевидные , лучше билдеры заюзать

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта