Flutter Progress_state_button-如何更改按钮状态

时间:2020-10-01 21:34:29

标签: flutter button state break progress

我正在尝试在进度条中使用进度状态按钮。在pub.dev文档中,应按以下步骤设置小部件

    Widget buildTextWithIcon() {
return ProgressButton.icon(iconedButtons: {
  ButtonState.idle: IconedButton(
      text: "Send",
      icon: Icon(Icons.send, color: Colors.white),
      color: Colors.deepPurple.shade500),
  ButtonState.loading:
      IconedButton(text: "Loading", color: Colors.deepPurple.shade700),
  ButtonState.fail: IconedButton(
      text: "Failed",
      icon: Icon(Icons.cancel, color: Colors.white),
      color: Colors.red.shade300),
  ButtonState.success: IconedButton(
      text: "Success",
      icon: Icon(
        Icons.check_circle,
        color: Colors.white,
      ),
      color: Colors.green.shade400)
}, onPressed: onPressedIconWithText, state: stateTextWithIcon);

}

当单击按钮时,我有一个要运行的函数(已经编写并且可以正常工作),将按钮的状态更改为ButtonState.loading,然后更改为ButtonState.success,然后更改为ButtonState.idle。参见下面的pub.dev网站上说明的功能。

    void onPressedIconWithText() {
switch (stateTextWithIcon) {
  case ButtonState.idle:
    stateTextWithIcon = ButtonState.loading;
    Future.delayed(Duration(seconds: 1), () {
      setState(() {
        stateTextWithIcon = Random.secure().nextBool()
            ? ButtonState.success
            : ButtonState.fail;
      });
    });

    break;
  case ButtonState.loading:
    break;
  case ButtonState.success:
    stateTextWithIcon = ButtonState.idle;
    break;
  case ButtonState.fail:
    stateTextWithIcon = ButtonState.idle;
    break;
}
setState(() {
  stateTextWithIcon = stateTextWithIcon;
});

} }

但是,我是编码的新手,完全不知道如何使用“中断”或更改按钮状态。有人可以建议我如何插入我的函数(例如,将其空的runFunction()插入上述代码,将状态从闲置->加载(onPressed)->成功-。闲置。)。 >

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您可以使用setState更新stateTextWithIcon的值

  ButtonState stateTextWithIcon = ButtonState.idle;


    Widget buildTextWithIcon() {
return ProgressButton.icon(iconedButtons: {
  ButtonState.idle: IconedButton(
      text: "Send",
      icon: Icon(Icons.send, color: Colors.white),
      color: Colors.deepPurple.shade500),
  ButtonState.loading:
      IconedButton(text: "Loading", color: Colors.deepPurple.shade700),
  ButtonState.fail: IconedButton(
      text: "Failed",
      icon: Icon(Icons.cancel, color: Colors.white),
      color: Colors.red.shade300),
  ButtonState.success: IconedButton(
      text: "Success",
      icon: Icon(
        Icons.check_circle,
        color: Colors.white,
      ),
      color: Colors.green.shade400)
}, onPressed: (){
      progressButton()
},
state: stateTextWithIcon,
);

这是我的onPressed处理的功能

 Future progressButton() async {
    setState(() {
//sets the  state of stateTextWithIcon to loading once button is pressed
    stateTextWithIcon = ButtonState.loading;
    });
    var url = 'https://google.com';
      final response = await http.get(url);

      if (response.statusCode == 200 || response.statusCode == 201) {
        setState(() {
//sets the  state of stateTextWithIcon to success if whatever request made was successful
          stateTextWithIcon= ButtonState.success;
        });
      } else {
        setState(() {
//sets the  state of stateTextWithIcon to fail if the request was unsuccessful
        stateTextWithIcon = ButtonState.fail;
        });
      }
  }