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

Flutter中点击Switch切换开关时如何添加圆形加载器实现延迟激活

实现方案

你可以通过新增加载状态变量控制UI展示,核心实现步骤如下:

步骤1:新增状态变量

在当前页面的State类中新增变量,记录正在加载中的商品ID:

// 可根据你的book.id实际类型调整变量类型,比如int?
String? _loadingProductId;

步骤2:修改Switch相关代码

将原来ListTile的trailing属性替换为如下代码,加载时展示圆形加载器、禁用开关点击,等待结束后再更新开关状态:

trailing: _loadingProductId == book.id
    // 加载中显示圆形加载器
    ? const CircularProgressIndicator()
    : Switch(
        value: _selectedProducts.contains(book.id),
        // 全局有加载中的商品时,禁用所有开关的点击
        onChanged: _loadingProductId != null
            ? null
            : (bool? selected) async {
                if (selected == null) return;
                // 先更新状态,展示加载器
                setState(() {
                  _loadingProductId = book.id;
                });
                // 模拟等待2秒,可替换为你的实际接口请求逻辑
                await Future.delayed(const Duration(seconds: 2));
                // 等待结束后更新选中状态,清除加载状态
                setState(() {
                  _onProductSelected(selected, book.id);
                  _loadingProductId = null;
                });
              },
        activeTrackColor: HexColor("#b8c2cc"),
        activeColor: HexColor("#7367f0"),
      ),

注意事项

  • 如果需要对接真实后端接口,把Future.delayed替换为你的接口请求代码即可,建议添加异常捕获逻辑,请求失败时也要把_loadingProductId置为null,避免页面一直显示加载状态。
  • 点击Switch时事件会被Switch组件消费,不会触发外层InkWell的页面跳转逻辑,无需额外处理事件冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:45:07