모바일 Flutter 앱은 공개 클라이언트이므로 exchangerate.dev bearer key를 포함하면 안 됩니다. 키를 서버 측 /api/fx proxy에 두고 Flutter가 {from,to}를 요청하게 하며 rate, source, market session, 관측 시각을 타입 모델에 함께 보관합니다.
자격 증명을 서버 뒤에 두기
서버 route는 from과 to를 받고 Authorization을 추가해 /v1/latest/{from}?symbols={to}를 호출하며 필요한 필드만 반환합니다. 키는 서버 환경에 두고 앱에 전달하지 않습니다.
HTTP 의존성 추가하기
Flutter 앱을 만들고 현재 http 패키지를 추가한 뒤 Flutter converter를 lib/main.dart로 저장하세요. proxy를 Node 20 이상에서 서버 환경의 EXCHANGERATE_API_KEY와 함께 node flutter-currency-converter-proxy.mjs로 실행합니다. 로컬에서는 loopback 8787을 사용하고 기기 연결 전 인증 HTTPS와 요청 제한을 준비하세요. Flutter의 공식 networking 레시피도 참고하세요.
렌더링 전 quote 검증하기
rate가 없거나 양수가 아니거나 유한하지 않거나 숫자가 아니거나 data_updated_at이 없으면 거부합니다. 10초 제한과 2xx가 아닌 상태도 표시합니다.
loading, 오류, 신선도 표시하기
요청 중 버튼을 끄고 progress를 표시하며 성공 시 금액, 환율, source, session, 관측 시각, 앱 cache age와 관측 age를 보여줍니다.
표시용 반올림과 값 보존
지원 통화에서 JPY는 소수 0자리, USD/EUR/GBP/IDR는 2자리, 환율은 6자리로 표시합니다. 원래 숫자값을 보존하고 표시값을 정산 기록으로 쓰지 않습니다.
고객 경로 테스트하기
테스트 proxy로 timeout, 401/429, 잘못된 JSON, rate 누락, 오래된 data_updated_at을 시험하세요. 실제 기기나 emulator에서 Flutter 네트워크, TLS, proxy 배포도 확인해야 합니다.
