我的有状态小部件不会更新 ui,即使我正在调用 setState 并将正确的值传递给小部件类
Posted
技术标签:
【中文标题】我的有状态小部件不会更新 ui,即使我正在调用 setState 并将正确的值传递给小部件类【英文标题】:My stateful widget does not update the ui, even though I am calling setState and passing the correct value to the widget class 【发布时间】:2021-11-19 13:09:56 【问题描述】:我在颤振中遇到了一个我自己无法弄清楚的问题。
所以我有如下代码(只贴了代码的重要部分),
class _PrimaryDetailsEditState extends State<PrimaryDetailsEdit>
String bankName; <---------- I have this variable inside my state class
void _getFormData()
BackendApi.call(
endpoint: APIEndPoints.GET_FORM_DATA,
data: 'id': widget.jobId,
onSuccess: (data)
setState(()
bankName = data['clientBank']['name']; <-------------- I assign a new value to the above variable here
print('Bank name is $bankName'); <-------------- This print confirms that the new value has been indeed assigned to the variable
);
,
onFailed: (error)
print('Failed to get data');
);
@override
void initState()
_getFormData(); <------- I call the _getFormData function declared above right here.
super.initState();
在上面的代码中,
???我有一个名为 bankName
的类变量,它是字符串数据类型。
???在bankName
下定义的_getFormData
方法调用另一个名为BackendApi.call()
的静态方法,该方法负责发出http 请求以获取一些数据。 BackendApi.call()
有 4 个命名参数,其中两个重要参数是 onSuccess
和 onFailed
。这两个参数带回调函数,无论取数据成功与否,都会被调用。
???如您所见,在onSuccess
回调中,我将从http 请求接收到的一些数据分配给bankName
变量。
???我还在@override initState()
中调用_getFormData
,以确保在挂载小部件之前发出请求。
问题
尽管bankName
保存了我想要的数据,但当该变量向下传递给小部件时,我的 UI 并未更新!
➡ 我将正确的变量传递给小部件以更新 UI。我通过注释掉_getFormData
函数并最初为bankName
分配一个值来确认这一点,例如bankName = 'Hello'
。如果我这样做,UI 将更新为值Hello
。所以我将正确的变量传递给小部件。
谢谢!
【问题讨论】:
你能分享你的 UI 代码,以及更新值时的任何日志,任何错误 【参考方案1】:我认为您唯一需要做的就是将带有 onSuccess 的行更改为:
onSuccess: (data) =>
当你拥有它现在的样子时:
onSuccess: (data)
您将 onSuccess 分配给函数的值,而不是函数本身。
【讨论】:
我试过这个....但结果还是一样......以上是关于我的有状态小部件不会更新 ui,即使我正在调用 setState 并将正确的值传递给小部件类的主要内容,如果未能解决你的问题,请参考以下文章
如何更新导航抽屉中的有状态小部件,同时在 Android 中保持与片段相同的类?
Flutter/Dart:我的小部件树中可以有多个带有状态的小部件吗?
为啥即使在有状态小部件中使用 setstate 也无法获取更新的变量。因为我想在新的 TabBar 选项上更新我的 Container