Navigator.push(): Ошибка: не удалось найти правильный поставщик над этим пользовательским виджетом
Я пытаюсь реализовать базовое управление состоянием в моем приложении Flutter. Где-то вверху по дереву виджетов у меня есть провайдер для пользователя. Виджеты, расположенные ниже, могут получить доступ к пользователю с помощью виджета пользователя-потребителя. Однако один виджет (WidgetB в фрагменте кода ниже) создается с использованием Navigator.push() и не может получить доступ к пользователю. Нажатие кнопки вызовет ошибку:
Ошибка: не удалось найти правильного поставщика над этим потребительским виджетом
floatingActionButton: FloatingActionButton(
child: Icon(Icons.play),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Consumer<User>(
builder: (context, user, child) => WidgetB(user: user),
),
),
);
},
),
Как я могу получить доступ к пользователю в WidgetB (или в каком-либо дочернем виджете WidgetB)?
1 ответ
Решение
Убедитесь, что ваши поставщики настроены на уровне MaterialApp. Например, вот так:
void main() {
runApp(MultiProvider(
providers: [
ChangeNotifierProvider(
create: (_) => Provider1(),
),
ChangeNotifierProvider(
create: (_) => Provider2(),
),
],
child: MyApp(),
));
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MainPage(),
);
}
}