gpt4 book ai didi

flutter - 如何在 Init 状态下访问提供者值

转载 作者:行者123 更新时间:2023-12-03 18:09:37 24 4
gpt4 key购买 nike

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

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

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

我正在 init 方法中检索数据。

-- 我的主要功能

void main() {
runApp(
Provider<UserModel>(
builder: (_) => UserModel(),
child: Jobs(),
),
); //added
}

这是我的工作页面的片段

case '/main':
return MaterialPageRoute(
builder: (_) => JobsHomePage(title: "jobs"));
break;

这是显示此列表的列表页面
--- JobsHomePage()

void initState() {
searchVal = Provider.of<UserModel>(context).searchVal;
jb =load(searchVal);
}

然后我有一个构建器方法,它遍历“jb”并打印值

我得到的错误是继承错误

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

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

最佳答案

如果您在执行 didChangeDependencies 中的某些任务后不需要再次更新小部件,则 Mikhail 接受的答案很好。方法。 (大多数时候情况并非如此。)

但是如果您在执行任务后需要通知监听器,它将不起作用。

上下文可在 initState 中访问.
您需要添加参数 listen: false给提供者。

docs

listen: false is necessary to be able to call Provider.of inside [State.initState] or the create method of providers like so: ...



  @override
void initState() {
super.initState();
final _store = Provider.of<RecorderStore>(context, listen: false);
}


现在,为什么要覆盖 didChangeDependencies不是一个好主意:

docs它说

For example, if the previous call to build referenced an InheritedWidget that later changed, the framework would call this method to notify this object about the change.



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

所以当你调用 notifyListeners通过 didChangeDependencies这将导致无限循环。

或者即使您不调用 notifyListeners明确地,每当 didChangeDepencies方法被调用,代码被执行多次。

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

关于flutter - 如何在 Init 状态下访问提供者值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57546967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com