如何从 init 函数或解决方法访问提供者模型中的值?
基本上,当我的应用程序加载时,我会在提供者模型中保存一些值。
一个值是搜索变量。然后我被重定向到一个加载页面,在那里我需要这个值来获取数据并呈现一个列表。
我正在 init 方法中检索数据。
-- 我的主要功能
void main() {
runApp(
Provider<UserModel>(
builder: (_) => UserModel(),
child: Jobs(),
),
); //added
}
Run Code Online (Sandbox Code Playgroud)
这是我的工作页面的片段
case '/main':
return MaterialPageRoute(
builder: (_) => JobsHomePage(title: "jobs"));
break;
Run Code Online (Sandbox Code Playgroud)
这是显示此列表的列表页面 --- JobsHomePage()
void initState() {
searchVal = Provider.of<UserModel>(context).searchVal;
jb =load(searchVal);
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个构建器方法,它通过“jb”进行迭代并打印值
我得到的错误是继承错误
flutter:当继承的widget发生变化时,比如Theme.of()的值发生变化,就是依赖
感谢您的帮助...我没有发布整个代码,因为它很长,而且堆栈中出现了一些“所有代码”错误。
Pha*_*vij 28
如果您在didChangeDependencies方法中执行某些任务后不需要再次更新小部件,则 Mikhail 接受的答案很好。(大多数时候情况并非如此。)
但是如果您需要在执行任务后通知侦听器,它将不起作用。
上下文是无障碍initState。您需要将参数添加listen: false到 Provider。
该文件说,
听:假是必要的,以便能够像这样调用
Provider.of内部[State.initState]或create提供者的方法:...
@override
void initState() {
super.initState();
final _store = Provider.of<RecorderStore>(context, listen: false);
}
Run Code Online (Sandbox Code Playgroud)
现在至于为什么覆盖didChangeDependencies不是一个好主意:
在文档中它说
例如,如果先前对 build 的调用引用了后来更改的 InheritedWidget,则框架将调用此方法来通知此对象有关更改的信息。
因此当你使用ChangeNotifierProvider时举例,当你调用notifyListeners()那个时就会调用该didChangeDependencies方法。
所以当你notifyListeners通过didChangeDependencies它调用时会导致无限循环。
或者即使您不notifyListeners显式调用,只要调用该didChangeDepencies方法,代码就会执行多次。
所以最好listen: false在 initState 中使用,以确保代码只执行一次。
| 归档时间: |
|
| 查看次数: |
4529 次 |
| 最近记录: |