Flutter 从路由参数获取某些数据的异步调用

Flutter 从路由参数获取某些数据的异步调用,flutter,Flutter,我有点困惑。假设我有一个有状态的小部件,需要获取一些数据。文档声明不建议将其用于构建方法,因此我将其放在initState中。这是有案可查的 我还从这里的文档示例中实现了命名路由,这些示例使用无状态小部件完成 当我试图访问路由参数时,initState会抛出一个错误。该错误专门在ModelRoute调用中引发 @override void initState() { super.initState(); TownDetailPageArguments args = ModalRoute.o

我有点困惑。假设我有一个有状态的小部件,需要获取一些数据。文档声明不建议将其用于构建方法,因此我将其放在
initState
中。这是有案可查的

我还从这里的文档示例中实现了命名路由,这些示例使用无状态小部件完成

当我试图访问路由参数时,
initState
会抛出一个错误。该错误专门在ModelRoute调用中引发

@override
void initState() {

 super.initState();
 TownDetailPageArguments args = ModalRoute.of(context).settings.arguments;
}
[]

如果将该代码移到build方法中,它就可以正常工作


因此,我的问题是,在有状态小部件中获取数据时,获得路由参数访问权限的推荐方法是什么?

initState
方法中没有
上下文
,为了使用
方法的
,必须通过该上下文。相反,您应该使用类似的方法,该方法确实可以访问
上下文
。这两者之间的区别可以从中看出

用法示例(与稍晚调用的
initState
相同):


我注意到应用程序栏上的返回箭头,当触动它时,这个方法对我来说效率很低。这是必要的,因为它意味着继承的小部件被更新了。或者,您可以在initState中延迟执行,但当您正在读取的属性发生更改时,它不会被更新。这是你想要做的最好的方法。在build方法中执行此操作或在didChangeDependencies中调用它并不像您想象的那么糟糕,因为这可能不是一个非常昂贵的操作。请看,我认为我需要这样做。另一种解决方案是在路线弹出时触发,我不想这样做,将它们传递到这里似乎是一种方式。我会试试看。有人想知道为什么会有人投反对票,但我想这是一个赛季。
@override
void didChangeDependencies() {

 super.didChangeDependencies();
 TownDetailPageArguments args = ModalRoute.of(context).settings.arguments;
}