【问题标题】:snapshot.hasData is true but the snapshot.data.length is null, Fluttersnapshot.hasData 为 true 但 snapshot.data.length 为空,Flutter
【发布时间】:2021-07-07 10:58:21
【问题描述】:

我正在从返回一些数据的组件调用 API,但问题是 snapshot.hasDatatruesnapshot.data.length0。我是否(再次)错误地解析了数据?代码:

API调用服务组件:

Future<List<User>> getUsers() async {
    final response = await APIRequest(Method.GET, '/users');
    if (response.statusCode == 200) {
      var body = jsonDecode(response.body)['data'];
      print('this is the response body: ' + response.body); // it returns data completely
      List<User> users = [];
      body.map((e) {
        User user = User.fromJson(e);
        users.add(user);
      });
      return users;
    } else {
      print('Error occurred! Data is not fetched!');
    }
  }

用户列表组件:

Future<List<User>> _getUserList() async {
    var _userData = await APIcalls.instance.getUsers();
    return _userData;
  }

FutureBuilder<List<User>>(
                    future: _getUserList(),
                    builder: (context, snapshot) {
                      if (snapshot.hasData) {
                        print(snapshot.hasData.toString()); // returns true
                        print(snapshot.data.length); // returns 0
                        return ListView.builder(
                          shrinkWrap: true,
                          itemCount: snapshot.data.length,
                          itemBuilder: (context, index) {
                            print(snapshot.data.length);

                            return Text(snapshot.data[index].userId);
                          },
                        );
                      } else if (snapshot.hasError) {
                        return Text("${snapshot.error}");
                      }
                      return Container();
                    },
                  )

【问题讨论】:

  • 在您的getUsers 方法中,您返回了posts...它来自哪里?
  • 错字,已在问题中修复
  • 将您从 API 获得的 JSON 响应添加到问题中

标签: json flutter mobile flutter-futurebuilder


【解决方案1】:

试试这个:

 List<User> users = List.from(body).map((e) => User.fromJson(Map.from(e))).toList();
 return users;

【讨论】:

  • 它工作伙伴,非常感谢!如果你不介意,介意解释一下吗?为什么是Map,在解析JSON 数据时,我应该始终在API 调用中使用它吗?我正在尝试学习解析 JSON 数据时可能的最佳方法,它不像 JS 那样您只需调用 API 就是这样,在 Dart/Flutter 中,事情的处理方式有所不同......
  • 解码后的response.body(即jsonDecode(response.body))返回一个_InternalLinkedHashMap的对象,fromJson需要一个Map的对象。所以你必须转换它。
猜你喜欢
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 2021-11-25
  • 1970-01-01
  • 2021-10-12
  • 2019-06-24
相关资源
最近更新 更多