Flutter

회기역 지하철 시간 타이머 앱 - 3 (http 연결)

HAHAKO 2023. 5. 4. 12:49

이제 http연결해서 xml파일을 받아오기만하면 parse가 된다.

http연결이 되게 복잡해 보였는데 생각보다 간단했다.

다만 동기 비동기신호를 구분하고, 1초마다 갱신해준다는 점이 조금은 어려웠다.

 

Future<xml.XmlDocument> fetchXmlData() async {
    final response = await http.get(Uri.parse('http://swopenapi.seoul.go.kr/api/subway/6a684e6f49646d733130364c4b74466e/xml/realtimeStationArrival/1/3/회기'));
    return xml.parse(response.body);
  }
  
  test('subway', () async {
    final document = await fetchXmlData();
    final items = document.findAllElements('row');
    var subway = <Subway>[];
    items.forEach((node) {
      subway.add(Subway.fromXml(node));
    });
    for (var subway in subway) {
    Text(
      '${subway.trainLineNm} : ${subway.recptnDt}',
    );
  }
  });

방법은 간단했다.

xml 라이브러리와 Future를 이용하면 됐다.

http.get으로 비동기신호로 get을 하고 xml을 받는다

이를 xml로 parse한 방법과 동일하게 parse하면 원하는 데이터를 얻을 수 있다.

생각보다 단순했는데 동기 비동기가 조금 까다로워서 오래걸렸던 것 같다.