如何在我的班级中将 Future<User> 转换为 User? [复制]

Posted

技术标签:

【中文标题】如何在我的班级中将 Future<User> 转换为 User? [复制]【英文标题】:How can i convert Future<User> to User in my class? [duplicate] 【发布时间】:2021-05-14 04:01:43 【问题描述】:

我想做的是从 fetchUser 获取配置文件。但我不知道除字符串以外的任何其他方式可以提取 http 数据。

class FollowingUserModel 
  final String id;
  final String author;
  User profile;
  final String profileid;

  FollowingUserModel(this.id, this.profileid, this.author, this.profile)   profile = fetchUser() as User; 

  Future<User> fetchUser() async
    final response = await http.get("$SERVER_IP/api/users/$profileid/?format=json");
    if (response.statusCode == 200) 
      var responseJson = json.decode(response.body);
      return User.fromJSON(responseJson);

  factory  FollowingUserModel.fromJSON(Map<String, dynamic> jsonMap) 
    return  FollowingUserModel(
      id: jsonMap['id'] as String,
      author:  jsonMap['author'] as String,
      profileid: jsonMap['profile'] as String,
);

有人知道怎么做吗?

【问题讨论】:

不是真的。我不知道该怎么做,因为那里有太多解释。如果你把它分解为答案会更好。 @nvoigt 嗯,重复的意义在于,我们不希望对同一问题的每个变体都有一个单独的、手工定制的答案,因为它很难找到解决方案,因为每个答案仅适用于所问的确切问题。由于您的问题非常广泛,我不知道如何缩小答案范围。您有什么具体有问题吗?您是否遇到编译器错误、运行时错误? 我在上面解释过了,我再解释一遍。我想从我的班级中获取我的用户,但我不知道如何将其作为普通用户返回。我想正确地将 fetchUser() 值分配给“配置文件”,这就是我的意思。 我不知道该告诉你什么。您得到的两个答案都是正确的,要等待 Future 完成并获得结果,您需要使用 await 关键字,如图所示。如果你想知道为什么你必须这样做,你可以点击我上面的链接。如果您对按照答案所说的去做有问题,您需要编辑您的问题以更具体地说明您遇到的问题,或者如果您认为单个问题过多,请提出后续问题。跨度> 我明白你的意思。问题是我尝试了他们两个,但他们仍然给我错误。我从 FollowUserModel 类中调用我的函数,而不是在状态内部,因为这对我来说太难了,而不是这个。无论如何,谢谢你的帮助 【参考方案1】:

只需创建一个异步函数

如果你有Future&lt;User&gt;,要转换成User,需要加await;要使用await,您需要添加async

Future<void> test() async 
  User user = await fetchUser();

您可以了解更多关于异步函数的信息here

【讨论】:

运算符 ' @nvoigt 更新答案。我现在工作? 我必须让用户退出 Future 异步功能才能将其分配给“配置文件”。在里面,它可以工作 你还需要什么吗?【参考方案2】:

从您呼叫的地方执行此操作,

User user = await followingUserModel.fetchUser();

Future&lt;User&gt; 表示它将异步返回一个用户对象(将来),所以使用await 进行调用,然后您的代码将等待它得到返回。

【讨论】:

我需要在我正在使用的类模型中调用它。你能告诉我更多吗? 你在哪里调用 fetchUser() 函数?那你为什么要在模型类中获取数据?分离类的职责。

以上是关于如何在我的班级中将 Future<User> 转换为 User? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

等待我的班级初始化(或如何等待 Future 完成)?

在 Flutter 中将 forEach 循环转换为 Future.forEach 循环

如何在 Flutter/Dart 中将 Future<double> 转换为 double?

如何在颤动中将值设置为下拉列表?

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

如何在我的班级中添加对向量?