Так как ответов не было, я делюсь тем, что решило мою ситуацию, надеюсь, скоро получим лучшие ответы от экспертов.
Проблема:
API Google Мест предотвращает CORS . Поэтому мы не можем сделать запрос со стороны клиента. А так как виджет PlacesAutocomplete отправляет http-запрос к API мест Google следующим образом:
https://maps.googleapis.com/maps/api/place/autocomplete/json?input={queryString}&key={API-Key}
Этот запрос на стороне клиента будет отклонен.
Мое решение:
Сначала я больше не использую виджет PlacesAutocomplete.
Я написал простую облачную функцию , которая принимает Url в качестве параметра, затем выполняет http-запрос для того же URL-адреса и возвращает данные. Но на этот раз запрос будет от серверной , поэтому я могу обойти cors. Итак, внутри index.ts я написал следующую функцию:
const functions = require('firebase-functions');
const axios = require('axios');
exports.getDataFromUrl = functions.https.onCall(async (data, context) => {
const url = data.url;
try {
const info = await axios.get(url);
return info.data;
} catch (error) {
return (error);
}
});
Затем со стороны клиента я написал эту функцию (в dart), которая вызывает функцию облака для любого URL:
Future httpRequestViaServer({url}) async {
HttpsCallable callable = CloudFunctions.instance.getHttpsCallable(
functionName: 'getDataFromUrl',
);
try {
final HttpsCallableResult result = await callable.call(
<String, dynamic>{
'url': url,
},
);
return (result.data);
} on CloudFunctionsException catch (e) {
print('caught firebase functions exception');
print(e.code);
print(e.message);
print(e.details);
return null;
} catch (e) {
print('caught generic exception');
print(e);
return null;
}
Теперь я могу вызывать эту функцию, чтобы получать данные для URL-адреса API (или любого URL-адреса) из любого места в моем проекте.
Я закончил создание своего собственного виджета autoComplete, который вызывает API с помощью этого функция.
Надеюсь, что этот ответ поможет кому-то, сталкивающемуся с подобной проблемой, и ожидает более качественных ответов от экспертов.