无法使用未来值 - 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) 无法从不可修改列表中删除

颤振无法导入`flutter_webrtc.dart`

Flutter/Dart - 关于如何对未来进行故障排除的建议?

在 Flutter/dart 的 Futurebuilder 中访问我的未来不起作用

在 Flutter/Dart 中从字节加载图像的问题

Flutter (Dart 2) 访问 twitter GET api