Вызов context.read () внутри сборки небезопасен. Таким образом, возникает ошибка, но Provider.of (context, listen = false) разрешен для обратной совместимости, но по-прежнему небезопасен. Как можно получить функциональность context.read () внутри сборки.
Одно решение, которое я нашел:
В вашу модель добавьте два значения: одно, которое изменится, и другое не будет:
class MyModel extends ChangeNotifier {
double value = 45;
double thisValueWillNeverChange = 45;
}
В вызове вашего виджета value
, где значение необходимо изменить и должно привести к перестройке виджета, но используйте thisValueWillNeverChange
, где вы просто хотите прочитать начальное значение и не хотите обновить виджет.
Вы можете получить доступ к обоим значениям с помощью context.select () или context.watch ().
Тип приложения, в котором я хочу реализовать эту функцию: введите описание изображения здесь
Как видите, заголовок в appBar будет иметь thisValueWillNeverChange
, поэтому он останется неизменным c, но текст и ползунок изменятся и будут использовать value
.
При запуске приложение будет запускаться со всем, имеющим начальное значение как 45.0