Flutter 如何在Init状态下访问提供程序值

Flutter 如何在Init状态下访问提供程序值,flutter,Flutter,如何从init函数或解决方案访问提供程序模型中的值 基本上,当我的应用程序加载时,我会在提供商模型中保存一些值 一个值是搜索变量。然后我被重定向到一个加载页面,在那里我需要这个值来获取数据并呈现一个列表 我正在用init方法检索数据 --我的主要职能 void main(){ runApp( 提供者( 生成器:()=>UserModel(), child:Jobs(), ), );//添加 } 这是我的工作页面的一个片段 case'/main': 返回物料路线( 建筑商:()=>JobsHom

如何从init函数或解决方案访问提供程序模型中的值

基本上,当我的应用程序加载时,我会在提供商模型中保存一些值

一个值是搜索变量。然后我被重定向到一个加载页面,在那里我需要这个值来获取数据并呈现一个列表

我正在用init方法检索数据

--我的主要职能

void main(){
runApp(
提供者(
生成器:()=>UserModel(),
child:Jobs(),
),
);//添加
}
这是我的工作页面的一个片段

case'/main':
返回物料路线(
建筑商:()=>JobsHomePage(标题:“工作”);
打破
这是显示此列表的列表页面 ---JobsHomePage()

void initState(){
searchVal=Provider.of(context).searchVal;
jb=荷载(searchVal);
}
然后我有一个生成器方法,它通过“jb”进行迭代并打印值

我得到的错误是继承错误

颤振:当继承的小部件发生变化时,例如,如果Theme.of()的值发生变化,则它是依赖的


谢谢你的帮助。。。我没有发布整个代码,因为它很长,而且我在堆栈中遇到了一些“所有代码”错误。

您不能在
initState
中访问
context
,但可以在
didChangeDependencies
中访问它

根据它在
initState
之后调用,它可以使用
context
,因此它可以调用
Provider.of(context)

,如果在执行
didChangeDependencies
方法中的某些任务后不需要再次更新小部件,那么Mikhail接受的答案是可以的。(大多数情况下并非如此。)

但是,如果在执行任务后需要通知侦听器,那么它将不起作用

可以在
initState
中访问上下文。 您需要向提供程序添加参数
listen:false

侦听:如果要能够调用
[State.initState]
内部的
Provider.of
,或者像这样调用提供者的
create
方法,false是必需的:

@覆盖
void initState(){
super.initState();
final _store=Provider.of(context,listen:false);
}
现在谈谈为什么覆盖
didChangeDependencies
不是一个好主意:

上面说

例如,如果上一次对构建的调用引用了一个后来发生更改的InheritedWidget,框架将调用此方法来通知此对象该更改

因此,当您使用
ChangeNotifierProvider
时,例如,当您调用
notifyListeners()
时,它将调用
didChangeDependencies
方法

因此,当您通过
didChangeDependencies
调用
notifyListeners
时,将导致一个无限循环

或者,即使没有显式调用
notifyListeners
,只要调用
didchangedependencies
方法,代码就会执行多次


所以最好在initState中使用
listen:false
,以确保代码只执行一次。

相同的问题谢谢,我也遇到了相同的问题。我有一个存储,它应该在构造函数中接受单例依赖项,并使用didChangeDependencies触发连续重建。使用
listen:false
解决了问题这是一个很好的答案。这应标记为接受答案。当我需要提供者提供的值时,我一直以传统的方式传递参数。那是多余的。这很好地解决了我的问题。我得到了一个空错误,因为提供程序需要打勾来填充,并且在initstate中执行空检查不起作用……如何使用该值?