Где в дереве обернуть виджет с помощью Provider, чтобы использовать Provider для поддержания состояния во всем приложении? - PullRequest
0 голосов
/ 25 февраля 2020

Мое приложение имеет простой экран домашней страницы

class StartPage extends StatelessWidget {}

и два дополнительных экрана. Пользователи перенаправляются на дополнительные экраны с кодом, подобным

Navigator.push(
       context,
       MaterialPageRoute(
         builder: (BuildContext context) => Page2(),
       ),

и

Navigator.push(
       context,
       MaterialPageRoute(
          builder: (BuildContext context) => Page3(),
       ),

Page2(), с простым секундомером, который я реализую с помощью провайдера. Я хочу добавить идентичный код секундомера к Page3(). Я бы подумал, что StartPage() дальше по «дереву», чем Page2() и Page3(), и что если я оберну * метод построения StartPage с Провайдером (вместе с кодом виджета Потребителя внутри соответствующих классов)

 @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<StopWatchProvider>(
      create: (context) => StopWatchProvider(),
      child: Scaffold()

тогда секундомер должен работать как положено как в Page2(), так и в Page3() (поддерживается этой публикацией SO ). Но это выдает ошибку из-за невозможности найти провайдера, и вместо этого мне нужно обернуть компоновщиков для Page2() и Page3() с провайдером.

Чего мне не хватает?

1 Ответ

1 голос
/ 25 февраля 2020

Вы пробовали обернуть MaterialApp своим Provider()?

...