HTTP-запросы и API отдыха в Flutter - PullRequest
0 голосов
/ 09 июля 2019

Прежде всего, я пытался получить HTTP-запрос во Flutter, и у меня нет опыта работы с JavaScript.

Сайт предоставляет только пример кода JavaScript, но я не знаю, как его использоватьдля флаттера.

https://kodestat.gitbook.io/flutter/flutter-http-requests-and-rest-api

Я попробовал вышеуказанную ссылку, но не смог.

Я знаю, что должен вставить URL и ServiceKey, как это.

class HomePageState extends State<HomePage> {

  //this async func will get data from the internet
  //when our func is done we return a string
  Future<String> getData() async {
    //we have to wait to get the data so we use 'await'
    http.Response response = await http.get(
      //Uri.encodeFull removes all the dashes or extra characters present in our Uri
      Uri.encodeFull("URL"),
      headers: {
        //if your api require key then pass your key here as well e.g "key": "my-long-key"
       "Accept": "application/json" 
       "key": "my-long-key"
      }
    );

    //print(response.body);

    List data = json.decode(response.body);
    //print(data);
    print(data[1]["title"]);
  }

Но как мне обращаться с encodeURIComponent и другими функциями во Flutter для получения HTTP-запроса?

Вот пример кода JavaScript.

var xhr = new XMLHttpRequest();
var url = 'http://openapi.tago.go.kr/openapi/service/ArvlInfoInqireService/getSttnAcctoArvlPrearngeInfoList'; /*URL*/
var queryParams = '?' + encodeURIComponent('ServiceKey') + '='+'ServiceKey'; /*Service Key*/
queryParams += '&' + encodeURIComponent('cityCode') + '=' + encodeURIComponent('25'); /*CityCode*/
queryParams += '&' + encodeURIComponent('nodeId') + '=' + encodeURIComponent('DJB8001793ND'); /*nodeID*/
xhr.open('GET', url + queryParams);
xhr.onreadystatechange = function () {
    if (this.readyState == 4) {
        alert('Status: '+this.status+' Headers: '+JSON.stringify(this.getAllResponseHeaders())+' Body: '+this.responseText);
    }
};

xhr.send('');

1 Ответ

2 голосов
/ 09 июля 2019

Существует пакет dart, который предоставляет некоторые вспомогательные классы для запросов http.

Github: https://github.com/Ephenodrom/Dart-Basic-Utils Установите его с помощью:

dependencies:
  basic_utils: ^1.3.0

Использование

Map<String, String> headers = {
  "Accept": "application/json",
  "key": "my-long-key"
};
Map<String, String> queryParameters = {
  "citycode": Uri.encodeFull("25"),
  "nodeId": Uri.encodeFull("123456789")
};

String URL = Uri.encodeFull("URL");
// If the api returns json
Map<String, dynamic> dataAsJson = await HttpUtils.getForJson(url,
      headers: headers, queryParameters: queryParameters);
// if the api returns plain strings
String dataAsString = await HttpUtils.getForString(url,
      headers: headers, queryParameters: queryParameters);
// if the api returns something else like XML, EPP, KV, YAML 
Response fullResponse = await HttpUtils.getForFullResponse(url,
      headers: headers, queryParameters: queryParameters);

Используйте Uri.encodeFull для данных параметров запроса.

Дополнительная информация:

Это все методы из класса HttpUtils.

Future<Map<Response> getForFullResponse(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> getForJson(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<String> getForString(String url,{Map<String, dynamic> queryParameters,Map<String, String> headers});
Future<Map<Response> postForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> postForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> postForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Response> putForFullResponse(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> putForJson(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> putForString(String url, String body,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Response deleteForFullResponse(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Future<Map<String, dynamic>> deleteForJson(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Future<String> deleteForString(String url,{Map<String, String> queryParameters,Map<String, String> headers});
Map<String, dynamic> getQueryParameterFromUrl(String url);
String addQueryParameterToUrl(String url, Map<String, dynamic> queryParameters);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...