如何从PHP后端直接获取数据传递到Flutter应用
Flutter对接PHP接口获取$dept变量实现方案
第一步:修复PHP接口返回问题
当前PHP代码在验证成功时直接return $dept不会向前端输出任何内容,需要统一返回JSON格式响应,同时建议添加JSON响应头,修正后的代码如下:
<?php session_start(); include_once ('config.php'); // 设置JSON响应头 header('Content-Type: application/json'); $lg_username = $_REQUEST['lg_username']; $lg_password = $_REQUEST['lg_password']; $lg_password = md5($lg_password); // 注意:直接拼接SQL存在注入风险,生产环境建议改用预处理语句 $sql = "SELECT lg_username, lg_name, lg_dp_code FROM hr_login WHERE lg_username = '$lg_username' AND lg_password = '$lg_password'"; $res = mysqli_query($conn,$sql); $count = mysqli_num_rows($res); if($count == 1){ $userRow = mysqli_fetch_array($res,MYSQLI_ASSOC); $dept = $userRow['lg_dp_code']; // 统一返回JSON格式,禁止用return输出接口内容 echo json_encode([ 'code' => 0, 'msg' => 'success', 'dept' => $dept ]); }else{ echo json_encode([ 'code' => 1, 'msg' => '账号或密码错误' ]); } ?>
第二步:完善Flutter端请求与解析逻辑
首先确保已经在pubspec.yaml中引入http依赖,然后修改_saveCheckIn方法,增加响应状态判断、JSON解析逻辑,即可拿到$dept值,示例代码如下:
// 可根据需要调整返回值类型,示例直接返回获取到的dept值 Future<String?> _saveCheckIn() async { var url = Uri.http( "192.168.68.216", '/ump_attendance_2/save_check_in.php', {'q': '{http}'}); try { var response = await http.post(url, body: { "lg_username": user.lg_username, "lg_password": user.lg_password }); // 先判断HTTP请求状态是否正常 if (response.statusCode == 200) { // 解析JSON响应 final resData = jsonDecode(response.body); if (resData['code'] == 0) { // 提取dept值 String dept = resData['dept']; // 可直接返回dept供组件使用,也可存入全局变量/本地存储供后续逻辑调用 print('获取到的部门编码:$dept'); return dept; } else { print('接口返回错误:${resData['msg']}'); return null; } } else { print('请求失败,状态码:${response.statusCode}'); return null; } } catch (e) { print('请求异常:$e'); return null; } }
组件内调用示例
获取到dept值后可直接通过setState更新组件状态完成展示,示例如下:
ElevatedButton( onPressed: () async { String? dept = await _saveCheckIn(); if (dept != null) { setState(() { currentDept = dept; }); } }, child: Text('签到获取部门信息') )
注意事项
- 记得在Flutter对应文件头部导入依赖:
import 'package:http/http.dart' as http;、import 'dart:convert'; - 测试时确保运行Flutter的设备和PHP服务所在机器在同一局域网,对应IP可正常访问
- 生产环境建议把PHP端的MD5加密替换为更安全的密码哈希方式,同时改用SQL预处理语句避免注入风险
内容的提问来源于stack exchange,提问作者Jasmirulnaim
相关产品推荐
相关产品推荐

