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

Flutter中点击按钮通过Retrofit API向PHP服务器发送POST请求

实现请求发送与响应日志记录

1. 在main.dart中导入依赖并初始化客户端

先在main.dart顶部导入所需文件和包:

import 'package:dio/dio.dart';
import 'post_retro.dart'; // 导入你的retrofit抽象类文件

在State类中初始化Dio和RestClient实例(可以放在initState里,或者直接在按钮逻辑前定义):

// 初始化Dio,可添加基础配置(可选)
final dio = Dio(BaseOptions(
  connectTimeout: const Duration(seconds: 5),
  receiveTimeout: const Duration(seconds: 5),
));

// 创建RestClient实例
final restClient = RestClient(dio);

2. 修改按钮点击逻辑,实现请求发送

将按钮的onPressed回调改为异步函数,在内部调用接口并处理响应:

onPressed: () async {
  if(nameController.text.isNotEmpty && passController.text.isNotEmpty){ // 建议用&&确保两个字段都不为空
    try {
      // 调用接口,替换参数为你的实际业务值
      // 示例:name对应input,pass对应pf,pan参数根据需求传入(可选)
      Response response = await restClient.fetch_info(
        nameController.text,
        passController.text,
        "你的pan参数值" // 不需要的话可传null
      );

      // 打印响应日志
      print("请求成功,状态码:${response.statusCode}");
      print("响应数据:${response.data}");
      
      // 业务侧处理:比如给用户展示成功提示
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text("请求成功:${response.data.toString()}"))
      );
    } catch (e) {
      // 捕获错误并打印日志
      print("请求失败:$e");
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text("请求失败,请稍后重试"))
      );
    }
  } else {
    const snackBar = SnackBar(
      content: Text("请不要留空字段"),
    );
    ScaffoldMessenger.of(context).showSnackBar(snackBar);
  }
}

3. 关键注意事项

  • 确认PHP服务器支持跨域:如果Flutter运行在模拟器/真机,和服务器不在同一域名下,需在PHP脚本中添加跨域响应头,否则会触发CORS错误。
  • 匹配参数传递方式:你的Retrofit接口是把参数放在请求头中,PHP脚本需要通过$_SERVER['HTTP_INPUT']、$_SERVER['HTTP_PF']这类方式获取参数;如果PHP预期从POST表单/JSON体取参数,需将Retrofit注解改为@Field或@Body。
  • 可选:给Dio添加全局日志拦截器,无需手动打印每次请求:
dio.interceptors.add(LogInterceptor(
  requestBody: true,
  responseBody: true,
));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:45:22