[英]how to call method in a stful widget inside a another stful widget flutter
[英]How could i solve that kind of stful setState in flutter
我完全无法以书面形式解释这个问题,所以我正在尝试逐步解决
我有Stfl widget page
我将以下内容放入它的initState methood
中
@override
void initState(){
Future.delayed(const Duration(seconds: 10), () {
setState(() {});
print('ok i rebuilt the state successfully');
});
super.initState();
}
现在,如果我在之前的方法中注册的Duration(seconds: 10)
之前更改了UI
中的任何内容,它将按预期成功更新 ui。
现在,出于好奇,我想知道如果我退出页面,之前的方法是否仍然挂起并在 10 秒后执行,我做了以下操作
1-我登录页面在initstate中注册initstate
2- 我在 10 秒用完之前退出了页面
3- 好的,现在我在不同的页面等待print('ok i rebuilt the state successfully');
打印
4- 嗯..它按预期成功打印
现在我重复相同的步骤并进行一些更改,例如以下
1-我登录页面在initstate中注册initstate
2- 我在 10 秒用完之前退出了页面
3- ii 在 10 秒完成之前再次登录页面
好的,现在它应该打印两次。第一次注册 function 一次,第二次注册一次,是的,它按预期打印两次,但我注意到,如果我在 10 秒之前对 ui 进行更改,那么 UI 将永远不会更新它self by 第一个注册的 function(虽然我在console看到这个过程是成功的)。 但它会在第二个注册的 function 时自行更新。
现在我的问题是为什么它不通过首次注册的 function 进行更新。我如何才能通过旧的挂起setState
方法使其更新 ui。
事实上,它发生在setState
或提供者身上。
我需要这种行为有很多原因
当您导航到该页面时,每次都会创建一个新的 Widget 实例。 所以setState
是针对相应的小部件运行的。
假设您在同一个屏幕上有 2 个,您不希望一个更新另一个的 state。同样的事情发生在这里。
另外,我不知道你是否正在做future.delayed
来测试这个。 如果你在你的应用程序中这样做,我建议你在设置 state 之前检查mounted
属性,这样你就可以防止在处置的 Widget 上设置 state ,这可能会导致问题和异常。
就像是
Future.delayed(const Duration(seconds: 10), () {
if (!mounted) return;
setState(() {});
print('ok i rebuilt the state successfully');
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.