无法使用未来值 - Flutter/Dart
Posted
技术标签:
【中文标题】无法使用未来值 - Flutter/Dart【英文标题】:Unable to use a Future value - Flutter/Dart 【发布时间】:2021-06-18 07:45:20 【问题描述】:我已经获取了一个 json 对象并对其进行反序列化,然后也将其返回。
我想在另一个文件中使用它。
我无法分配我在第一步中获得的值。
这里是所有代码...
服务
Future getGeoPoints(String accessToken, String tripId) async
String requestUrl;
var response = await get(
Uri.parse(requestUrl),
headers:
'Authorization': "Bearer $accessToken",
,
);
if (response.statusCode == 200)
Map<String, dynamic> responseBody = json.decode(response.body);
GetGeoPoints geoPoints = GetGeoPoints.fromJson(responseBody);
List listOfGeoPoints = [];
for (var geoPoint in geoPoints.geoPoints)
listOfGeoPoints.add(
'latitude': geoPoint.latitude,
'longitude': geoPoint.longitude,
'timestamp': geoPoint.timeStamp,
,
);
// print('List of geo points: ' + '$listOfGeoPoints');
return listOfGeoPoints;
else
throw Exception('Failed to load data from server');
我需要上述值的文件
List routeCoordinates;
Future<void> getValues() async
getGeoPoints(widget.accessToken, widget.tripId)
.then((value) => routeCoordinates = value);
当我运行应用程序时,routeCoordinates 为空,但当我热重载时,它包含该值。
我想在屏幕启动后立即获得这些值。在这里分配值的正确方法是什么?
我也试过这个:
routeCoordinates = getGeoPoints...
它抛出错误..
请帮忙..谢谢..
【问题讨论】:
【参考方案1】:函数getGeoPoints()
是一个异步函数。但是在另一个文件中,您没有使用await
关键字,而是使用then()
。因此,您的代码不会等待该函数返回值。
尝试使用下面的代码,
List routeCoordinates;
Future<void> getValues() async
routeCoordinates = await getGeoPoints(widget.accessToken, widget.tripId);
让我们知道进展如何。
【讨论】:
我什至试过这个。问题是routeCoordinates
稍后会获取值,而我的构建在构建过程中抛出错误以使其为空.. routeCoordinates 在构建完成后获取值..
我在 getValues()
内部打电话给 init()
好吧,请您将错误添加到您的帖子中吗?【参考方案2】:
您需要使用FutureBuilder 来定义取决于请求状态的行为。当您的应用程序等待对您的请求的响应时,您将能够告诉小部件要返回什么。如果出现错误(例如,如果您的用户离线),您还可以返回特定的小部件。
编辑:我已经链接了官方文档,但如果不够清楚,请阅读 this article。
【讨论】:
以上是关于无法使用未来值 - Flutter/Dart的主要内容,如果未能解决你的问题,请参考以下文章
Flutter/Dart - 关于如何对未来进行故障排除的建议?