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

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端错误打印逻辑,输出详细错误:
    } else {
      print('请求失败状态码: ${response.statusCode}');
      print('响应内容: ${response.body}');
    }
    
    根据返回的状态码和响应体定位问题:400代表用户ID未传,500代表SQL执行错误,响应体中的error字段会给出具体原因。

4. 其他排查点

  • 确认GETMYPOSTS常量的后端地址拼写正确,服务正常运行。
  • 检查Flutter项目权限配置:安卓需在AndroidManifest.xml开启网络权限,iOS需在Info.plist配置网络访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:43:20