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

Flutter实现:点击按钮时添加进度对话框的方法

使用flutter_spinkit实现登录进度对话框

步骤1:添加依赖

在项目的pubspec.yaml文件中添加flutter_spinkit依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_spinkit: ^5.2.0 # 可替换为最新版本

执行flutter pub get完成依赖安装。

步骤2:将组件改为StatefulWidget

由于需要维护加载状态,把当前的无状态组件修改为有状态组件:

class LoginPage extends StatefulWidget {
  const LoginPage({super.key});

  @override
  State<LoginPage> createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  bool _isLoading = false; // 控制加载状态的变量

  // 你的postRequest网络请求方法(假设已实现)
  Future<http.Response> postRequest() async {
    // 这里填写你的网络请求逻辑
  }

  @override
  Widget build(BuildContext context) {
    // 保留你原有的Scaffold及内部布局代码
    return Scaffold(
      // 你的原有代码...
    );
  }
}

步骤3:修改登录按钮的点击逻辑

更新登录按钮的onPressed方法,加入加载状态控制和进度对话框的显示/隐藏逻辑:

onPressed: () async {
  setState(() {
    _isLoading = true; // 标记开始加载
  });

  // 弹出flutter_spinkit进度对话框
  showDialog(
    context: context,
    barrierDismissible: false, // 禁止点击外部关闭对话框
    builder: (context) => const Center(
      child: SpinKitFadingCircle(
        color: Color(0xff2e80e4),
        size: 50.0,
      ),
    ),
  );

  try {
    http.Response response = await postRequest();
    Map<String, dynamic> parsedData = jsonDecode(response.body);
    LoginResponse loginResponse = LoginResponse.fromJson(parsedData);
    
    if (loginResponse.verificationStatus) {
      await Navigator.pushNamed(context, '/home');
    }
  } catch (e) {
    // 处理网络请求异常,比如弹出错误提示
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('登录失败:$e')),
    );
  } finally {
    setState(() {
      _isLoading = false; // 标记加载结束
    });
    Navigator.pop(context); // 关闭进度对话框
  }
},

额外说明

  • SpinKitFadingCircle是flutter_spinkit提供的动画样式之一,你可以替换为SpinKitWave、SpinKitPulse等其他样式,通过调整color和size参数自定义外观。
  • finally块确保无论请求成功还是失败,都会关闭加载状态和对话框,避免出现加载框一直停留的情况。
  • barrierDismissible: false可以防止用户在加载过程中误触关闭对话框,提升交互体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:55:30