【问题标题】:Unable to use a Future value - Flutter/Dart无法使用未来值 - 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...

它抛出错误..

请帮忙..谢谢..

【问题讨论】:

    标签: flutter flutter-layout


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      • 2019-06-17
      • 2021-07-23
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多