如何在 Flutter 中获取 Future<List> 项的某个数据索引?

Posted

技术标签:

【中文标题】如何在 Flutter 中获取 Future<List> 项的某个数据索引?【英文标题】:How to take a certain data index of Future<List> item in Flutter? 【发布时间】: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"]

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

【问题讨论】:

【参考方案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 给出相同的结果 api.dart.dev/stable/2.15.0/dart-core/List/first.html 如果我打印第一个用户,它重视“用户”的实例 您的数据是一个 List,firstUser 是该列表中的第一个元素,因此您可以访问 firstUser.idUserfirstUser.namefirstUser.phone

以上是关于如何在 Flutter 中获取 Future<List> 项的某个数据索引?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 在future函数之后从getter中获取值

使用flutter_local_notifications时如何在Flutter中将Future<Null>转换为Future<dynamic>?

Flutter:从 Future 中获取价值的正确方法

如何将 Future<dynamic> 转换为 dart:flutter 中的字符串

Flutter中关于使用异步时,获得Future<T;中数据的问题

如何在 Flutter 中基于 Future 结果构建 Stream?