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)?


person ynotu.    schedule 03.02.2020    source источник


Ответы (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(),
    );
  }
}
person mskolnick    schedule 03.02.2020