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(),
    );
  }
}
Другие вопросы по тегам