0

我在颤振中遇到了一个我自己无法弄清楚的问题。

所以我有以下代码(只粘贴了代码的重要部分),

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字符串数据类型的类变量。
_getFormData下面定义的方法bankName,调用另一个静态方法BackendApi.call(),该方法负责发出http请求以获取一些数据。接受 4 个命名参数,其中BackendApi.call()两个重要参数是onSuccessonFailed。这两个参数在数据获取成功与否的情况下都会调用回调函数。
如您所见,在onSuccess回调中,我将从 http 请求接收到的一些数据分配给bankName变量。
我还调用_getFormData内部@override initState()以确保在挂载小部件之前发出请求。

问题

即使bankName保存了我想要的数据,当该变量传递给小部件时,我的 UI 也不会更新!

➡ 我将正确的变量传递给小部件以更新 UI。我通过注释掉_getFormData函数并最初为 a 值分配一个值来确认这一点,bankName例如bankName = 'Hello'. 如果我这样做,UI 会更新为 value Hello。所以我将正确的变量传递给小部件。

谢谢!

4

1 回答 1

0

我认为您唯一需要做的就是将带有 onSuccess 的行更改为:

onSuccess: (data) => {

当你拥有它现在的样子时:

onSuccess: (data) {

您将 onSuccess 分配给函数的值,而不是函数本身。

于 2021-09-27T11:44:23.837 回答