1

我正在使用Provider. 我有课。我需要将值设置为Provider来自字段。但我无权访问context这里。

class _DateAndTimePickerDemoState extends State<DateAndTimePickerDemo> 
{
  DateTime _fromDate = DateTime.now();
  Provider.of<AppState>(context).selected_period = date; // here
}

如何从类字段设置提供者值?

4

3 回答 3

3

选项 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
 }
于 2019-08-07T16:58:06.713 回答
1

你可以通过context两种方式获得:

  • 内部initState调用Future.delayed(Duration.zero,() {... context ...})
  • 调用 build 方法后Widget build(BuildContext context) {...}

在您的情况下,我会调用Provider.of<AppState>(context).selected_period = date;afterbuild方法,因为无论如何我在 build 方法中定义的大多数函数都可以轻松访问上下文。

于 2019-08-07T13:40:21.257 回答
0

利用Provider.of<AppState>(context, listen: false).selected_period = /* your value */;

您需要设置listen为,false因为 Provider 在构建方法之外使用。

于 2021-10-05T15:19:17.093 回答