Przepisy UI dla React Native i Flutter
Rozwój mobilny z narzędziami AI jest trudny, ponieważ zachowanie specyficzne dla platformy ma znaczenie. Komponent działający w podglądzie webowym zawali się na prawdziwym urządzeniu, jeśli używa nieobsługiwanych API. Te przepisy generują kod uwzględniający różnice iOS/Android, obsługują bezpieczne obszary, respektują konwencje platformy i prawidłowo używają modułów natywnych.
Co z tego wyniesiesz
Dział zatytułowany „Co z tego wyniesiesz”- Przepisy komponentów React Native z obsługą specyficzną dla platformy
- Przepisy widgetów Flutter z designem Material i Cupertino
- Wzorce nawigacji dla obu frameworków z deep linkingiem
- Przepisy wydajności dla list, animacji i ładowania obrazów
Przepis 1: Adaptacyjna nawigacja platformowa (React Native)
Dział zatytułowany „Przepis 1: Adaptacyjna nawigacja platformowa (React Native)”Scenariusz: Twoja aplikacja potrzebuje nawigacji zakładkowej na iOS i nawigacji szufladowej na Android, zgodnie z konwencjami każdej platformy.
Rusztowanie nawigacji dotyka wielu plików naraz — nawigatora, każdego ekranu, typów parametrów i konfiguracji deep linkingu — więc narzędzie, po które sięgasz, zmienia sposób, w jaki nim sterujesz.
Otwórz folder nawigacji i użyj trybu agenta, aby jednym przebiegiem edytował RootNavigator.tsx, pliki ekranów i linking.ts. Zostaw checkpoint przed zaakceptowaniem — nawigatory rozdzielone na platformy to klasyczny przypadek, gdzie AI poprawnie obsługuje gałąź iOS, a po cichu psuje domyślne wartości headerShown dla Androida, więc chcesz mieć rollback jednym kliknięciem.
Uruchom w trybie headless, aby napisał nawigator, ekrany i RootStackParamList w jednej turze: claude -p "build the platform-adaptive navigator described in linking.ts and wire all four screens". Dodaj hook PostToolUse na *.tsx, który uruchamia tsc --noEmit, aby pominięty typ parametru zawiódł natychmiast, a nie w runtime.
Postaw worktree, aby przepisanie nawigacji pozostało odizolowane od reszty aplikacji, gdy przeglądasz podział iOS vs Android. Gdy diff jest czysty, wypchnij gałąź i pozwól recenzentowi w Cloud sprawdzić mapę deep linków przed scaleniem.
Oczekiwany wynik: Nawigator root, zakładki iOS, szuflada Android, konfiguracja deep linkingu, typowane params i testy.
Przepis 2: System responsywnego layoutu (React Native)
Dział zatytułowany „Przepis 2: System responsywnego layoutu (React Native)”Scenariusz: Twoja aplikacja musi działać na telefonach, tabletach i składanych urządzeniach z różnymi layoutami dla każdego punktu przerwania.
Oczekiwany wynik: Hook useResponsive, trzy komponenty layoutu, hook useScaledSize i testy.
Przepis 3: Biblioteka niestandardowych widgetów (Flutter)
Dział zatytułowany „Przepis 3: Biblioteka niestandardowych widgetów (Flutter)”Scenariusz: Twoja aplikacja Flutter potrzebuje brandowanego systemu designu działającego na iOS i Android.
Oczekiwany wynik: Pięć plików widgetów, klasa motywu, widget book i testy widgetów.
Przepis 4: Wydajna lista feedu (React Native)
Dział zatytułowany „Przepis 4: Wydajna lista feedu (React Native)”Scenariusz: Twój ekran feedu pokazuje 1000+ elementów z obrazami i zacina się przy przewijaniu. Pull-to-refresh czuje się opóźnione.
Oczekiwany wynik: Ekran feedu z FlashList, zmemoizowany FeedItem, ładowanie FastImage i test wydajności.
Przepis 5: Architektura offline-first (React Native)
Dział zatytułowany „Przepis 5: Architektura offline-first (React Native)”Scenariusz: Twoja aplikacja serwisowa w terenie musi działać bez łączności. Użytkownicy wprowadzają dane offline i synchronizują się po połączeniu.
Silnik synchronizacji obejmuje modele, adapter, hooki i UI — a najtrudniejsza część to logika rozwiązywania konfliktów last-write-wins, którą łatwo subtelnie zepsuć. Sposób, w jaki to nadzorujesz, różni się w zależności od narzędzia.
Zbuduj to w trybie agenta w plikach modelu i adaptera, ale zrób checkpoint tuż przed krokiem adaptera synchronizacji i przejrzyj ten diff osobno — rozwiązywanie konfliktów to miejsce, gdzie AI po cichu gubi uzgadnianie syncStatus. Widok inline diff sprawia, że logikę porównywania timestampów łatwo skanuje się linijka po linijce.
Wygeneruj modele i adapter w trybie headless, a następnie uczyń logikę synchronizacji weryfikowalną: claude -p "write WatermelonDB sync tests: create offline, go online, assert last-write-wins" i dodaj hook PostToolUse uruchamiający test offline-then-online przy każdej edycji sync/*.ts. Chcesz, aby ścieżka konfliktu była pokryta testem, a nie nadzieją.
Użyj worktree, aby rozwijać silnik synchronizacji w izolacji, następnie wypchnij i pozwól recenzentowi w Cloud skupić się konkretnie na ścieżce rozwiązywania konfliktów — świeży recenzent wyłapuje przypadek brzegowy zgubionego zapisu, który autor (człowiek lub AI) przeoczył.
Oczekiwany wynik: Modele WatermelonDB, silnik synchronizacji, hooki sieciowe, banner offline i testy synchronizacji.
Przepis 6: Zarządzanie stanem z Riverpod (Flutter)
Dział zatytułowany „Przepis 6: Zarządzanie stanem z Riverpod (Flutter)”Scenariusz: Twoja aplikacja Flutter używa wszędzie Provider. Migruj do Riverpod dla testowalności i bezpieczeństwa typów.
Oczekiwany wynik: Trzy pliki providerów, integracja drzewa widgetów i testy widgetów z mock overrides.
Przepis 7: Integracja modułu natywnego (React Native)
Dział zatytułowany „Przepis 7: Integracja modułu natywnego (React Native)”Scenariusz: Potrzebujesz czytania tagów NFC nieobsługiwanego przez istniejące biblioteki.
Użyj trybu agenta, aby jedną edycją wygenerował NativeNfc.ts, klasę Swift i klasę Kotlin, a następnie trzymaj symulator iOS i emulator Androida w podzielonych panelach, by mieć oba mosty na oku. Ponieważ zmiany natywne nie podlegają hot-reload, zaakceptuj checkpoint i wyzwól pełny rebuild, zamiast oczekiwać, że Fast Refresh je podchwyci.
Wygeneruj .swift, .kt i .ts w jednym przebiegu headless, a następnie wepnij rebuild w hook, aby nigdy nie testować nieaktualnych binarek: dodaj hook PostToolUse dopasowujący *.swift i *.kt, który uruchamia npx expo prebuild --clean (lub cd ios && pod install dla czystego RN). Przepływ zorientowany na terminal sprawia, że natywny rebuild jest o jedno polecenie od edycji.
Otwórz worktree, aby praca w Swift i Kotlin pozostała odizolowana od twojej gałęzi funkcji JS — edycje modułów natywnych często wymagają synchronizacji Xcode/Gradle, której nie chcesz wprowadzać do głównego checkoutu. Przejrzyj diff specyfikacji TurboModule w rozszerzeniu Codex IDE przed synchronizacją projektów natywnych.
Oczekiwany wynik: Specyfikacja TurboModule, iOS Swift, Android Kotlin, hook useNfc i testy.
Przepis 8: Animacje przesuwania kart (React Native)
Dział zatytułowany „Przepis 8: Animacje przesuwania kart (React Native)”Scenariusz: Potrzebujesz płynnych animacji 60fps dla stosu kart do przesuwania.
Oczekiwany wynik: SwipeableCard, CardStack, logika cofnij, integracja haptyczna i testy gestów.
Przepis 9: Adaptacyjny design platformowy (Flutter)
Dział zatytułowany „Przepis 9: Adaptacyjny design platformowy (Flutter)”Scenariusz: Twoja aplikacja Flutter wygląda identycznie na iOS i Android. Użytkownicy oczekują natywnych wzorców platformy.
Oczekiwany wynik: Sześć adaptacyjnych widgetów, PlatformHelper, klasa bazowa strony i testy międzyplatformowe.
Przepis 10: Powiadomienia push (React Native)
Dział zatytułowany „Przepis 10: Powiadomienia push (React Native)”Scenariusz: Twoja aplikacja potrzebuje powiadomień push na obu platformach z deep linkingiem do konkretnych ekranów.
Oczekiwany wynik: Konfiguracja Firebase, setup, handlery, parser deep linków, hook i testy.
Przepis 11: Nawigacja GoRouter (Flutter)
Dział zatytułowany „Przepis 11: Nawigacja GoRouter (Flutter)”Scenariusz: Twoja nawigacja to rozproszone wywołania Navigator.push bez bezpieczeństwa typów. Potrzebujesz deklaratywnego routingu.
Oczekiwany wynik: Konfiguracja routera, typowane helpery, konfiguracja deep linków, guardy i testy nawigacji.
Przepis 12: Przygotowanie do zgłoszenia do sklepu aplikacji
Dział zatytułowany „Przepis 12: Przygotowanie do zgłoszenia do sklepu aplikacji”Scenariusz: Twoja aplikacja jest kompletna funkcjonalnie. Przygotuj się do zgłoszenia do App Store i Play Store.
Przygotowanie do zgłoszenia to głównie edycje konfiguracji plus skrypt weryfikacyjny, więc to przepis, w którym skryptowany, powtarzalny przebieg opłaca się najbardziej.
Pozwól trybowi agenta edytować Info.plist i build.gradle razem, a następnie uruchom skrypt weryfikacji buildu ze zintegrowanego terminala. Wizualny diff przydaje się do wyłapania błędnego versionCode lub zabłąkanego uprawnienia debug, zanim wyślesz.
To najlepsze dopasowanie do skryptowania headless: niech wygeneruje prepare-release.sh, który podbija wersje, buduje obie platformy i greppuje bundle release pod kątem console.log i zależności debug — a potem uruchom go w CI, aby każdy kandydat na release był weryfikowany tak samo. Krok weryfikacji buildu to dokładnie ten rodzaj powtarzalnej bramki, do której stworzono CLI.
Odpal przygotowanie release jako zadanie Cloud ze świeżego worktree i niech otworzy PR ze zmianami konfiguracji plus RELEASE_CHECKLIST.md. Recenzent zatwierdza podbicia wersji i konfigurację podpisywania na PR, zanim cokolwiek trafi do sklepów.
Oczekiwany wynik: Zaktualizowane konfiguracje natywne, skrypt ikon, skrypt weryfikacji buildu i checklist release.
Gdy przepisy nie działają
Dział zatytułowany „Gdy przepisy nie działają”Co dalej
Dział zatytułowany „Co dalej”- Przepisy Expo dla wzorców zarządzanego workflow
- Przepisy Flutter dla głębszych workflow Flutter
- Przepisy React Native dla zaawansowanych wzorców React Native