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

Flutter中JSON逻辑无响应 无法拉取HTTP接口数据问题求助

问题排查与修复方案

你代码存在3处核心错误导致逻辑无法运行:

  • 未导入dart:convert库,jsonDecode方法无法识别,直接触发编译/运行错误
  • User类构造参数顺序与传参不匹配:User类定义的构造参数顺序为(int id, String name, String username),但你调用时传的参数是(u['name'], u['email'], u['username']),不仅缺少必填的int类型id参数,还错误传入了不需要的email字段,参数类型、顺序、数量全部不匹配
  • 没有处理网络请求的异常状态,接口请求失败时会直接崩溃

修正后完整可运行代码

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
// 新增导入json解析所需依赖
import 'dart:convert';

class Datafromapi extends StatefulWidget {
  const Datafromapi({Key? key}) : super(key: key);

  @override
  _DatafromapiState createState() => _DatafromapiState();
}

class _DatafromapiState extends State<Datafromapi> {
  Future<List<User>> getUserData() async {
    try {
      var response = await http.get(Uri.https('jsonplaceholder.typicode.com', 'users'));
      // 先判断接口请求是否成功
      if (response.statusCode == 200) {
        var jsonData = jsonDecode(response.body);
        List<User> users = [];
        for (var u in jsonData) {
          // 修正参数顺序,传入id、name、username三个匹配的参数
          User user = User(u['id'], u['name'], u['username']);
          users.add(user);
        }
        return users;
      } else {
        return [];
      }
    } catch (e) {
      print('请求出错:$e');
      return [];
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('json获取数据'),
      ),
      body: Container(
        // 给FutureBuilder指定泛型,提升类型安全性
        child: FutureBuilder<List<User>>(
          future: getUserData(),
          builder: (BuildContext context, AsyncSnapshot<List<User>> snapshot) {
            // 先判断加载状态
            if (snapshot.connectionState == ConnectionState.waiting) {
              return const Center(child: Text('加载中....'));
            }
            // 判断是否有错误
            if (snapshot.hasError) {
              return Center(child: Text('加载失败:${snapshot.error}'));
            }
            // 数据为空的情况
            if (!snapshot.hasData || snapshot.data!.isEmpty) {
              return const Center(child: Text('暂无数据'));
            }
            return ListView.builder(
              itemCount: snapshot.data!.length,
              itemBuilder: (BuildContext context, index) {
                return ListTile(
                  title: Text(snapshot.data![index].name),
                  subtitle: Text(snapshot.data![index].username),
                );
              }
            );
          }
        ),
      ),
    );
  }
}

class User {
  final int id;
  final String name;
  final String username;

  User(this.id, this.name, this.username);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:36:03