【问题标题】:Flutter list async error return from JSON从 JSON 返回的 Flutter 列表异步错误
【发布时间】:2021-08-24 19:54:46
【问题描述】:

我看了这个教程,但我卡在返回未来列表 https://www.youtube.com/watch?v=lTKFYGHx16M 试图连接 mysql php api 和颤振代码

import '../model/usersdata.dart';
import 'package:http/http.dart' as http;

Future<List<Userprofile>> fetchUsers() async {
  var url = Uri.parse("http://192.168.100.68/mlm_sys/api_request/get_data.php");
  final response = await http.get(url);
  print(response.body);
  return userprofileFromJson(response.body);<----ERROR LINE

ERROR: //'Userprofile' 类型的值 无法从函数“fetchUsers”返回 因为它的返回类型为“Future”。 }

///=====MODEL

import 'dart:convert';

Userprofile userprofileFromJson(String str) =>
    Userprofile.fromJson(json.decode(str));

String userprofileToJson(Userprofile data) => json.encode(data.toJson());

class Userprofile {
  Userprofile({
    required this.id,
    required this.sponsor,
    required this.fname,
    required this.lname,
    required this.mname,
    required this.pnum,
    required this.address,
    required this.email,
    required this.username,
    required this.password,
    required this.dateRegistration,
  });

........AND SO ON

【问题讨论】:

  • 添加fetchUsers()函数的使用方式
  • Userprofile 不是 Userprofile 列表...您需要映射您的响应并变成列表
  • @NirmalCode 我稍后会在我的小部件中使用未来的构建器
  • @MarianoZorrilla 我的模型中有地图这是你的意思吗? Map toJson() => { “id”:id,“sponsor”:赞助商,“fname”:fname,“lname”:lname,“mname”:mname,“pnum”:pnum,“地址": 地址, "email": 电子邮件, "username": 用户名, "password": 密码, "date_registration": "${dateRegistration.year.toString().padLeft(4, '0')}-${dateRegistration .month.toString().padLeft(2, '0')}-${dateRegistration.day.toString().padLeft(2, '0')}", };

标签: flutter dart asynchronous


【解决方案1】:

fetchUsers() 应该返回一个用户配置文件列表,但函数 userprofileFromJson() 只返回一个用户配置文件对象。您可以将获取用户功能更新为这样(考虑到 response.body 是用户配置文件列表)。

Future<List<Userprofile>> fetchUsers() async {
    var url = Uri.parse("http://192.168.100.68/mlm_sys/api_request/get_data.php");
    final http.Response response = await http.get(url);
    print(response.body);
    /********* the return statement needs to be like this ******/
    return List<Userprofile>.from(
        (json.decode(response.body) as List).map((jsonString) => userprofileFromJson(jsonString)));
  }

【讨论】:

  • 好的,我现在就知道。非常感谢
【解决方案2】:

您的名为 userprofileFromJson 的方法返回的是地图,而不是列表。您应该使用this converter 再次创建此 UserProfile 类。您可以复制服务器发送的示例 json 文件并将其粘贴。之后,您可以复制完成的飞镖代码并粘贴它而不是您的代码。最后,在 return 和返回值之间输入 await:

Future<List<Userprofile>> fetchUsers() async {
  var url = Uri.parse("http://192.168.100.68/mlm_sys/api_request/get_data.php");
  final response = await http.get(url);
  print(response.body);
  return await userprofileFromJson(response.body);

不同之处在于您不会使用 await 返回未来。你在它到达后返回真正的价值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2019-07-31
    • 2018-11-12
    • 1970-01-01
    • 2016-03-08
    • 2019-08-02
    • 2018-02-15
    相关资源
    最近更新 更多