Mobilna aplikacja Flutter jest publicznym klientem i nie może zawierać klucza bearer exchangerate.dev. Umieść klucz w małym serwerowym proxy /api/fx, poproś Flutter o {from,to} i przechowuj kurs, źródło, sesję rynku oraz czas obserwacji razem w typowanym modelu.
Umieść poświadczenie za serwerem
Trasa serwerowa przyjmuje from i to, dodaje Authorization: Bearer $EXCHANGERATE_API_KEY, wywołuje /v1/latest/{from}?symbols={to} i zwraca tylko pola potrzebne aplikacji. Klucz trzymaj w środowisku serwera. Aplikacja przekazuje URL proxy przez --dart-define=FX_PROXY_BASE_URL=…; nigdy nie otrzymuje klucza upstream.
Dodaj zależność HTTP
Utwórz aplikację Flutter, dodaj aktualny pakiet http do pubspec.yaml i zapisz kompletny konwerter Flutter jako lib/main.dart. Uruchom flutter run --dart-define=FX_PROXY_BASE_URL=https://your-app.example/api/fx. Pobierz minimalny proxy Node, ustaw EXCHANGERATE_API_KEY w środowisku serwera i uruchom node flutter-currency-converter-proxy.mjs na Node 20 lub nowszym. Do lokalnych testów nasłuchuje na loopback porcie 8787. Przed podłączeniem urządzenia wystaw własny uwierzytelniony backend HTTPS z limitami żądań; plik sprawdza waluty i kwotę, przekazuje klucz i zwraca tylko potrzebne typowane pola. Używa standardowych widgetów Flutter Material i typowanego modelu FxQuote. Oficjalny przepis Flutter dotyczący sieci opisuje konfigurację pakietu i wzorzec żądania.
Sprawdź kurs przed renderowaniem
Model odrzuca brakujący, niedodatni, nieskończony lub nienumeryczny rate oraz brakujące data_updated_at. Dzięki temu strona HTML z błędem, błąd proxy albo pusty JSON nie trafią do widoku konwersji. Klient ogranicza również żądanie do dziesięciu sekund i pokazuje statusy inne niż 2xx.
Pokaż ładowanie, błędy i świeżość
Ekran wyłącza przycisk podczas żądania, pokazuje wskaźnik postępu i zachowuje czytelny błąd po awarii proxy. Po sukcesie pokazuje kwotę, kurs, źródło, sesję rynku, czas obserwacji, wiek cache aplikacji (od załadowania odpowiedzi przez urządzenie) i wiek obserwacji (od data_updated_at). Użytkownik widzi, czy dane pochodzą z dnia handlowego, czy są dzienną referencją.
Zaokrąglaj do prezentacji, zachowaj wartość
Dla walut obsługiwanych w przykładzie JPY pokazuj bez miejsc dziesiętnych, a USD, EUR, GBP i IDR z 2; kurs pokazuj z 6 miejscami. To zaokrąglenie prezentacji. Zachowaj sparsowaną wartość liczbową i użyj strategii dziesiętnej lub fixed-point w produkcyjnym księgowaniu; nie używaj binarnej wartości z widoku jako rejestru rozliczenia.
Przetestuj ścieżkę klienta
Uruchom aplikację z testową odpowiedzią proxy, a następnie sprawdź timeout, HTTP 401/429, zły JSON, brak kursu i stare data_updated_at. Sieć, TLS i wdrożenie proxy specyficzne dla Flutter wymagają też testu na prawdziwym urządzeniu lub emulatorze; plik jest uruchamialnym przykładem klienta, nie hostowanym proxy.
