在颤动中动态启用按钮

时间:2020-07-24 09:21:18

标签: android flutter dart flutter-layout

这似乎是重复的,但我找不到我的问题的答案或解决方案。

在Flutter应用程序上有一个屏幕,我从手机的文件系统中选择一个文件(通过file_picker以异步方式)。

当我选择一个文件时,我想启用“下一步”按钮。 但是,我无法做到这一点。 我尝试使用布尔表达式和布尔函数,但没有成功,因为构建函数发生在用户选择文件之前(通过单击按钮以打开文件选择器)。

我尝试了几种解决方案:

onPressed: upload_flag ? () => myAction() : null, 但是在选择文件后更新标志时,它将不会启用它。

这是文件选择功能和检查功能的外观:

  File _scanned_file = null;

  bool upload_flag = false;

  void isUploaded() {
    if (_scanned_file != null) {
      upload_flag = true;
    }
    else{
    upload_flag = false;
    }
  }

  Future<bool> chooseFile() async {
    _scanned_file = await FilePicker.getFile(
      type: FileType.custom,
      allowedExtensions: ['jpg', 'pdf', 'png'],
    );
    isUploaded();
  }

我尝试了许多不同的方法,但都没有成功。

任何提示和帮助都将非常有用! 谢谢大家!

2 个答案:

答案 0 :(得分:4)

您尝试过setState吗?

void isUploaded() {
    if (_scanned_file != null) {
        setState(() {
            upload_flag = true;
        });
    } else {
       setState(() {
           upload_flag = false;
       });
    }
}

答案 1 :(得分:1)

void isUploaded() {
    if (_scanned_file != null) {
        upload_flag = true;
    }
    upload_flag = false;
}

在这种方法中,即使在条件为true的情况下,即使将upload_flag设置为false,也总是将其设置为false。另外,您需要调用setState()才能使更改反映在UI中。需要更改为..

void isUploaded() {
  setState(() {
    if (_scanned_file != null) {
      upload_flag = true;
    } else {
      upload_flag = false;
    }
  });
}