You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter setState异常:按钮状态互扰,第二个按钮状态不更新求助

问题修复方案

你的问题根源在于两处状态绑定错误:

  • 第二个进度条容器错误关联了loadingLinear状态,导致第一个按钮的操作会影响它
  • 第二个按钮切换的loadingCircular状态没有被对应UI组件使用

只需要修改两处代码即可实现状态独立:

  1. 将第二个Container的判断条件从loadingLinear改为loadingCircular
  2. 确保圆形进度条组件仅在loadingCircular为true时显示

修改后的完整代码:

class _LinearProgressBar extends State<LinearProgressBar> {
  bool loadingLinear = false;
  bool loadingCircular = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(
              title: const Text("CheckBox and Radio Button Stateful"),
            ),
            body: Center(
              child: Column(
                children: [
                  Container(
                    child: loadingLinear
                        ? const LinearProgressIndicator()
                        : const Text("Click to download "),
                  ),

                  ElevatedButton(
                    style: ElevatedButton.styleFrom(
                      primary: Colors.red, // 背景色
                      onPrimary: Colors.white, // 前景色
                    ),
                    onPressed: () {
                      setState(() {
                        loadingLinear = !loadingLinear;
                      });
                    },
                    child: const Text('FirstBtn'),
                  ),
                  // 此处修改为loadingCircular状态
                  Container(
                    child: loadingCircular
                        ? CircularProgressBar_()
                        : const Text("Click to download"),
                  ),

                  ElevatedButton(
                    style: ElevatedButton.styleFrom(
                      primary: Colors.red, // 背景色
                      onPrimary: Colors.white, // 前景色
                    ),
                    onPressed: () {
                      setState(() {
                        loadingCircular = !loadingCircular;
                      });
                    },
                    child: const Text('SecondBtn'),
                  )
                ],
              ),
            )));
  }
}

修改后效果:

  • 点击FirstBtn仅切换loadingLinear状态,控制线性进度条的显示/隐藏
  • 点击SecondBtn仅切换loadingCircular状态,控制圆形进度条的显示/隐藏
    两个按钮的状态完全独立,互不干扰。

内容的提问来源于stack exchange,提问作者Muhammad Ammar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:55:27