Я хочу иметь глобальный provider
, который я создаю в MultiProvider
-виджете в верхней части моего приложения, вот так:
ChangeNotifierProvider(
create: (context) => ThemeProvider()
..init(
context: context,
initialThemeMode: widget.themeMode,
),
),
Как видите, я тоже звоню ..init(
, чтобы задать исходные данные. Однако на самом деле этот init
не вызывается при открытии приложения. Он вызывается только после того, как я впервые позвоню этому провайдеру, например. установка цвета с ним следующим образом:
Container(
height: 50,
color: Provider.of<ThemeProvider>(context).color,
),
Это ожидаемое поведение?
Он вызывается только после того, как я сделаю первый звонок этому провайдеру... Это ожидаемое поведение?
Да, см. документацию провайдера:
ПРИМЕЧАНИЕ:
При использовании обратного вызова
create
/update
провайдера стоит отметить, что по умолчанию этот обратный вызов вызывается лениво.Это означает, что до тех пор, пока значение не будет запрошено хотя бы один раз, обратные вызовы
create
/update
вызываться не будут.Это поведение можно отключить, если вы хотите предварительно вычислить некоторую логику, используя параметр
lazy
:MyProvider( create: (_) => Something(), lazy: false, )