如何从 class 字段设置 Provider 值?
How to set Provider value from class field?
我正在使用 Provider
。我有 class。我需要从字段中将值设置为 Provider
。但是我在这里无法访问context
。
class _DateAndTimePickerDemoState extends State<DateAndTimePickerDemo>
{
DateTime _fromDate = DateTime.now();
Provider.of<AppState>(context).selected_period = date; // here
}
如何从 class 字段设置 Provider 值?
您可以通过两种方式获得context
:
- 在
initState
中调用 Future.delayed(Duration.zero,() {... context ...})
- 调用构建方法后
Widget build(BuildContext context) {...}
在你的例子中,我会在 build
方法之后调用 Provider.of<AppState>(context).selected_period = date;
,因为我在 build 方法中定义的大部分函数都可以轻松访问上下文。
选项 1
您可以使用覆盖方法 initState()
@override
void initState() {
super.initState();
Future.delayed(Duration.zero,(){
Provider.of<AppState>(context).selected_period = /* your value */;
});
}
选项 2
您也可以在 build() 方法中设置值
@override
Widget build(BuildContext context) {
Provider.of<AppState>(context).selected_period = /* your value */;
// your rest of code is write here
}
使用Provider.of<AppState>(context, listen: false).selected_period = /* your value */;
需要设置listen
为false
,因为在build方法外使用了Provider
我正在使用 Provider
。我有 class。我需要从字段中将值设置为 Provider
。但是我在这里无法访问context
。
class _DateAndTimePickerDemoState extends State<DateAndTimePickerDemo>
{
DateTime _fromDate = DateTime.now();
Provider.of<AppState>(context).selected_period = date; // here
}
如何从 class 字段设置 Provider 值?
您可以通过两种方式获得context
:
- 在
initState
中调用Future.delayed(Duration.zero,() {... context ...})
- 调用构建方法后
Widget build(BuildContext context) {...}
在你的例子中,我会在 build
方法之后调用 Provider.of<AppState>(context).selected_period = date;
,因为我在 build 方法中定义的大部分函数都可以轻松访问上下文。
选项 1 您可以使用覆盖方法 initState()
@override
void initState() {
super.initState();
Future.delayed(Duration.zero,(){
Provider.of<AppState>(context).selected_period = /* your value */;
});
}
选项 2 您也可以在 build() 方法中设置值
@override
Widget build(BuildContext context) {
Provider.of<AppState>(context).selected_period = /* your value */;
// your rest of code is write here
}
使用Provider.of<AppState>(context, listen: false).selected_period = /* your value */;
需要设置listen
为false
,因为在build方法外使用了Provider