Flutter setState异常:按钮状态互扰,第二个按钮状态不更新求助
问题修复方案
你的问题根源在于两处状态绑定错误:
- 第二个进度条容器错误关联了
loadingLinear状态,导致第一个按钮的操作会影响它 - 第二个按钮切换的
loadingCircular状态没有被对应UI组件使用
只需要修改两处代码即可实现状态独立:
- 将第二个Container的判断条件从
loadingLinear改为loadingCircular - 确保圆形进度条组件仅在
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
相关产品推荐
相关产品推荐

