【问题标题】:How to take a certain data index of Future<List> item in Flutter?如何在 Flutter 中获取 Future<List> 项的某个数据索引?
【发布时间】:2022-01-14 22:01:32
【问题描述】:

获取最新数据索引有问题

class User {
  final String idUser,
  name,
  phone;

  User(
    {this.idUser,
    this.name,
    this.phone});

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
    idUser: json['_id'],
    name: json['name'],
    phone: json['phone']);
  }
}

List<User> userFromJson(jsonData) {
  List<User> result =
    List<User>.from(jsonData.map((item) => User.fromJson(item)));

  return result;
}

// index
Future<List<User>> fetchUser() async {
  String route = AppConfig.API_ENDPOINT + "userdata";
  final response = await http.get(route);
  if (response.statusCode == 200) {
    var jsonResp = json.decode(response.body);

    return userFromJson(jsonResp);
  } else {
    throw Exception('Failed load $route, status : ${response.statusCode}');
  }
}

和调用方法就是这样

user = fetchUser();

这样评价的“response.body”

[{"_id":"4136425eb8d9320f4822c554","name":"John","phone":"90643755394"},{"_id":"62766b2eb45s3w0g4662ftd3","name":"Anna","timestamp" :"90345765791"}]

我希望这是如何使用第一个索引来获取最新数据,但我不知道代码会怎样。另外,如果有其他解决方案可以获取最新数据,请告诉我,非常感谢

【问题讨论】:

    标签: json flutter rest dart flutter-http


    【解决方案1】:

    您可以使用数组索引号来获取数组中的第一个对象。

     if (response.statusCode == 200) {
        var jsonResp = json.decode(response.body);
    
        return List<User>.from(jsonResp.map((user) => User.fromJson(user)));
      } else {
        throw Exception('Failed load $route, status : ${response.statusCode}');
      }
    

    如果您只想获得一个用户

     if (response.statusCode == 200) {
        var jsonResp = json.decode(response.body);
    
        return User.fromJson(jsonResp[0]);
      } else {
        throw Exception('Failed load $route, status : ${response.statusCode}');
      }
    

    其他方法是使用LIMIT 1修改查询

    【讨论】:

    • 在 List userFromJson(jsondata) 它返回错误 _TypeError (type '(dynamic) => User' is not a subtype of type '(String, dynamic) => MapEntry')
    • 你能发布你的json结果吗?所以我们对如何处理数据有了清晰的认识
    • response.body 值:[{"_id":"4136425eb8d9320f4822c554","name":"John","phone":"90643755394"},{"_id":"62766b2eb45s3w0g4662ftd3", "名称":"安娜","时间戳":"90345765791"}]
    • 好的,我编辑我的答案,请检查。
    • 使用 User.fromJson(jsonResp[0]);对我返回错误无法从函数“fetchUser”返回“User”类型的值,因为它的返回类型为“Future>”.dartreturn_of_invalid_type
    【解决方案2】:

    使用索引从列表中获取特定值

    userFromJson(jsonResp[0]); /// For first record
    

    【讨论】:

    • 在 List userFromJson(jsondata) 它返回错误 _TypeError (type '(dynamic) => User' is not a subtype of type '(String, dynamic) => MapEntry')
    • 好的,一切归你所有,返回结果[0]
    • 原来是无效的语法 函数 'userFromJson' 无法返回类型为 'User' 的值,因为它的返回类型为 'List'。
    • 是上面代码返回的总列表
    • 我的意思是如果我将返回结果修改为返回结果[0],则“结果[0]”这个词带有红色下划线,因此无法运行
    【解决方案3】:

    因为它的未来你必须使用 await 关键字来获得完整的结果,所以通过添加 await 来修改你的代码

    users = await fetchUser();
    

    现在您可以访问用户列表

    var firstUser = users.first;
    var firstUser = users[0];
    

    更多 await 和 async 你可以阅读这个Asynchronous programming

    【讨论】:

    • is "users.first" 表示对象名称 "users" 的名为 "user" 的类中名为 "first" 的属性?
    • 没有它的 List users[0] 属性和 users.first 给出相同的结果
    • 如果我打印第一个用户,它重视“用户”的实例
    • 您的数据是一个 List,firstUser 是该列表中的第一个元素,因此您可以访问 firstUser.idUser 和 firstUser.name 和 firstUser.phone
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-19
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多