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
相关产品推荐
相关产品推荐

