#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,
...
);
}
)