如何在我的班级中将 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<User>
,要转换成User
,需要加await
;要使用await
,您需要添加async
:
Future<void> test() async
User user = await fetchUser();
您可以了解更多关于异步函数的信息here
【讨论】:
运算符 ' @nvoigt 更新答案。我现在工作? 我必须让用户退出 Future 异步功能才能将其分配给“配置文件”。在里面,它可以工作 你还需要什么吗?【参考方案2】:从您呼叫的地方执行此操作,
User user = await followingUserModel.fetchUser();
Future<User>
表示它将异步返回一个用户对象(将来),所以使用await
进行调用,然后您的代码将等待它得到返回。
【讨论】:
我需要在我正在使用的类模型中调用它。你能告诉我更多吗? 你在哪里调用 fetchUser() 函数?那你为什么要在模型类中获取数据?分离类的职责。以上是关于如何在我的班级中将 Future<User> 转换为 User? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中将 forEach 循环转换为 Future.forEach 循环
如何在 Flutter/Dart 中将 Future<double> 转换为 double?
使用flutter_local_notifications时如何在Flutter中将Future<Null>转换为Future<dynamic>?