如何从 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 */;

需要设置listenfalse,因为在build方法外使用了Provider