首页 > 解决方案 > 使用 map 从 json 反序列化 Flutter 中的对象不起作用

问题描述

我是 Flutter 的新手。我正在尝试反序列化 json 字符串并制作飞镖对象。但我不能。

当我尝试映射时,它不会执行 debugPrint()。我不知道为什么并且没有错误?请帮我。API 工作正常。当我使用 response.body 打印数据时 - 它还会打印真正的 json 数据。



  Future<List<User>> fetchData() async {
    List<User> users;

    final response = await http.get(
      Uri.http(' 192.168.0.102:8000', 'api/users'),
    );
    print(response.statusCode);
    //print(response.body);

    if (response.statusCode == 200) {
      final list = json.decode(response.body) as List;
      print('is $list');

      // for (var i = 0; i < list.length; i++) {
      users = list.map((e) {
        debugPrint(e);
        return User(id: e['id'], bap: e['bap'], lgNumber: e['lgnumber']);
      });
      // }
      print('after');
      return users;
    
    } else {
      return null;
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder(
        future: fetchData(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done &&
              snapshot.hasData) {
            return ListView.builder(
              itemCount: snapshot.data.length,
              itemBuilder: (context, index) {
                User user = snapshot.data[index];
                return Text(
                  user.bap.toString(),
                );
              },
            );
          }
          return Container();
        },
      ),
    );
  }
}

标签: jsonflutterdart

解决方案


使用它从 json 获取用户列表

 users = list.map((e) {
    //debugPrint(e.toString());
    return User(id: e['id'], bap: e['bap'], lgNumber: e['lgnumber']);
  }).toList();

推荐阅读