как мне использовать провайдера в этой ситуации

#flutter #flutter-provider #flutter-theme

Вопрос:

Я хочу создать режим изменения темы приложения, и я видел способ его создания с помощью поставщика, но я новичок в поставщике. Например, я хочу добавить некоторые коды, подобные этому

выделите код (выделенный код)

в моем основном, который состоит из многих маршрутов

моя главная

Ответ №1:

Вы хотите изменить тему приложения, затем вам нужно переместить поставщика вверх, чтобы он мог охватить состояние виджета (в данном случае приложения), вы могли бы сделать что-то подобное в своем основном методе :

 runApp(ChangeNotifierProvider(

    create: (context) => ThemeProvider(),
    child:MyApp()

);
 

теперь в случае детей вы можете просто вызвать провайдера в методе сборки, как это

 Widget build(){
   var themeProvider = Provider.of<ThemeProvider>(context);
}
 

или вы можете использовать виджет потребителя

 Consumer<ThemeProvider>(
builder: (context, provider, child) {
//return something
}

)
 

Ответ №2:

Я предлагаю вам перейти ChangeNotifierProvider к вашему runApp() методу

 runApp(
        ChangeNotifierProvider<ThemeProvider>(
          create: (_) => ThemeProvider(),
          child: MyApp(),
        ),
      ),
 

Где вы MyApp() просто все ваше приложение извлекаете в свой собственный виджет.

Тогда вы действительно сможете легко получить к нему доступ по своему усмотрению с Consumer помощью виджета на вашем build методе.

 return Consumer<ThemeProvider>(
    builder: (BuildContext context, ThemeProvider provider, _) {
    return MaterialApp(
     theme: provider.myTheme,
     ... 
   );
  }
)