首页 > 解决方案 > 从 Google Places 文本搜索请求返回多种类型

问题描述

我正在尝试返回与用户文本输入相关的所有餐饮场所,但是我知道 Google 的文本搜索请求将只允许指定一种类型(即餐厅)。我希望能够返回以下类型的所有结果:[restaurant、cafe、meal_delivery、meal_takeaway]。此外,由于半径限制为 50 公里,我不想使用附近的文本请求。

我想知道除了使用指定的不同类型进行重复的 API 调用之外,是否有一种方法可以返回多种类型的结果。

下面是我的代码片段,它只指定了一种类型的 API 请求。

String baseURL =
        'https://maps.googleapis.com/maps/api/place/textsearch/json';
    String type = 'restaurant';
    int radius = 8000;

    String request =
        '$baseURL?input=$input&key=$RESTAURANT_API_KEY&query=$input&inputtype=textquery&type=$type&radius=?$radius&sessiontoken=$_sessionToken';
    Response response = await Dio().get(request);

    final textPredictions = response.data['results'];

标签: flutterdartasync-awaitgoogle-api

解决方案


一个解决方案是返回所有建立类型,然后检查 json 结果,如果类型字段包含“食物”

String baseURL =
        'https://maps.googleapis.com/maps/api/place/textsearch/json';
    int radius = 8000;

        String request =
        '$baseURL?input=$input&key=$RESTAURANT_API_KEY&query=$input&inputtype=textquery&radius=?$radius&sessiontoken=$_sessionToken';
    Response response = await Dio().get(request);

    final textPredictions = response.data['results'];

    for (var i = 0; i < 5; i++) {
      String placeId = textPredictions[i]['place_id'];
      if (textPredictions[i]['types'].toString().contains('food')) {
        _textSearchResults.add(placeId);
      }
    }


推荐阅读