최근 플러터로 분실물을 신고하고 찾을 수 있는 간단한 앱을 만들고 있다.
vscode에서 Device를 편의상 크롬 웹으로 개발을 진행했었는데,
오늘 오랜만에 앱 시뮬레이터로 실행을 시켰더니 api 전송에 오류가 발생하는 것을 확인했다.

백엔드 서버를 같은 로컬환경에서 열었고, 웹과 postman에서는 정상적으로 api 요청이 되는 것을 확인했지만 정작 앱 환경에서는 아래의 오류가 발생했다.
오류 메세지
I/flutter ( 4101): {"email":"f","password":"f"}
E/flutter ( 4101): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Connection refused
E/flutter ( 4101): #0 IOClient.send (package:http/src/io_client.dart:94:7)
E/flutter ( 4101): <asynchronous suspension>
E/flutter ( 4101): #1 BaseClient._sendUnstreamed (package:http/src/base_client.dart:93:32)
E/flutter ( 4101): <asynchronous suspension>
E/flutter ( 4101): #2 _withClient (package:http/http.dart:166:12)
E/flutter ( 4101): <asynchronous suspension>
E/flutter ( 4101): #3 sendToServer (package:yu_lost_item/screens/login_page.dart:127:15)
E/flutter ( 4101): <asynchronous suspension>
E/flutter ( 4101): #4 LoginPage.build.<anonymous closure> (package:yu_lost_item/screens/login_page.dart:95:33)
E/flutter ( 4101): <asynchronous suspension>
오류메세지를 대충 보면 서버로 전송하는 과정에서 문제가 있어보인다.
구글링을 통해 원인을 찾아봤으나 마땅한 해결책이 없어 난항을 겪던 중 localhost를 본인 아이피로 바꾸라는 글을 보고 시도해보았다.
하지만, 경고메세지는 사라졌지만 여전히 벡엔드로 아무런 요청이 가지 않았다.
해결책
수 많은 구글링 끝에 해결책을 발견하였다.
안드로이드 시뮬레이터에서는 로컬호스트에 접근하기 위해서 10.0.2.2:port로 요청을 해야한다고 한다.
로컬호스트를 안드로이드 시뮬레이터에서 사용하고 있기 때문이다!
따라서, env 파일에서 서버 주소를 10.0.2.2로 바꾸니 정상적으로 작동하는 것을 확인할 수 있었다.
'앱 > flutter' 카테고리의 다른 글
| [flutter] 이미지 선택 및 전송 (+ spring s3 저장) (2) | 2025.03.23 |
|---|