Flutter用户个人帖子页面加载失败问题求助(附代码)
问题:用户个人帖子页面加载失败,提示“Failed to load posts”
我用Flutter开发了用户发帖功能,用户发布的帖子可在首页与其他用户帖子一同展示。现开发仅显示当前用户自身帖子的页面,但进入该页面时,尽管用户此前已发帖,仍提示“Failed to load posts”。
Flutter前端代码
class UserPostsPage extends StatefulWidget { @override State<UserPostsPage> createState() => _UserPostsPageState(); } class _UserPostsPageState extends State<UserPostsPage> { List userPosts = []; @override void initState() { super.initState(); fetchUserPosts(); } Future<void> fetchUserPosts() async { SharedPreferences prefs = await SharedPreferences.getInstance(); String? userId = prefs.getString('userid'); if (userId != null) { var url = Uri.parse("$GETMYPOSTS?userId=$userId"); var response = await http.get(url, headers: {"Accept": "application/json"}); if (response.statusCode == 200) { var jsonData = json.decode(response.body); setState(() { userPosts = jsonData; }); } else { print('Failed to load posts'); } } } // 后续代码省略 }
PHP后端代码
<?php include("../connect.php"); $userid = isset($_GET['userid']) ? $_GET['userid'] : null; if (!$userid) { http_response_code(400); echo json_encode(['error' => 'User ID is required']); exit; } $stmt = $con->prepare("SELECT * FROM post_table WHERE author = ?"); $stmt->bind_param("s", $userid); $list = array(); if ($stmt->execute()) { $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { $list[] = $row; } echo json_encode($list); } else { http_response_code(500); echo json_encode(['error' => $stmt->error]); } $stmt->close(); ?>
补充说明:使用两张数据库表,post_table含author字段,user表含userid字段,目前无法定位问题。
排查与解决方案
1. 验证请求基础信息
- 在Flutter的
fetchUserPosts方法中添加打印,确认用户ID和请求URL是否正确:print('当前用户ID: $userId'); print('请求URL: $url'); - 复制打印出的URL直接在浏览器访问,观察返回结果:如果浏览器也返回错误,问题出在后端;如果能正常拿到帖子,问题在Flutter端的请求或解析逻辑。
2. 后端与数据库匹配检查
- 确认
post_table的author字段存储的用户ID,和SharedPreferences中读取的userId格式完全一致(无大小写差异、无多余空格)。 - 在PHP代码开头添加
var_dump($_GET['userid']);,验证是否正确接收前端传参。 - 手动在数据库执行SQL:
SELECT * FROM post_table WHERE author = '你的测试用户ID',确认是否能查询到对应帖子。
3. 捕获具体错误信息
- 修改Flutter端错误打印逻辑,输出详细错误:
根据返回的状态码和响应体定位问题:400代表用户ID未传,500代表SQL执行错误,响应体中的} else { print('请求失败状态码: ${response.statusCode}'); print('响应内容: ${response.body}'); }error字段会给出具体原因。
4. 其他排查点
- 确认
GETMYPOSTS常量的后端地址拼写正确,服务正常运行。 - 检查Flutter项目权限配置:安卓需在
AndroidManifest.xml开启网络权限,iOS需在Info.plist配置网络访问权限。
内容的提问来源于stack exchange,提问作者him
相关产品推荐
相关产品推荐

