Flutter DevTools: Debugowanie i optymalizacja aplikacji
Narzędzia do debugowania i profilowania Fluttera na lepsze aplikacje
Flutter DevTools to niezastąpiony pomocnik każdego programisty Flutter, oferujący potężny zestaw narzędzi do debugowania i analizy wydajności, które pomagają w szybkim tworzeniu wysokiej jakości aplikacji.

Co to jest Flutter DevTools?
Flutter DevTools to kompletny zestaw narzędzi do analizy wydajności i debugowania, specjalnie zaprojektowany do aplikacji Flutter i Dart. Udostępnia programistom głębokie wgląd w zachowanie aplikacji, jej cechy wydajnościowe oraz potencjalne problemy – wszystko przez intuicyjny interfejs internetowy.
Myśl o DevTools jako o centrum dowodzenia dla rozwoju aplikacji Flutter. Niezależnie od tego, czy śledzisz trudny błąd, optymalizujesz wydajność, analizujesz użycie pamięci, czy badasz drzewo widgetów, DevTools daje Ci widoczność i kontrolę potrzebną do tworzenia wyjątkowych aplikacji.
Zestaw narzędzi obejmuje wiele specjalistycznych widoków:
- Widget Inspector - Wizualizacja i eksploracja drzewa widgetów
- Performance View - Profilowanie renderowania ramki i identyfikacja “janków”
- Memory View - Monitorowanie alokacji pamięci i wykrywanie przecieków
- Network Monitor - Inspekcja żądań i odpowiedzi HTTP
- Debugger - Ustawianie punktów przerwania i krokowanie przez kod
- Logging View - Wgląd w logi aplikacji i komunikaty diagnostyczne
- App Size Tool - Analiza czynników wpływających na rozmiar aplikacji
Rozpoczęcie pracy z Flutter DevTools
Instalacja i konfiguracja
Flutter DevTools jest dostarczany razem z Flutter SDK, więc jeśli masz zainstalowany Flutter, już masz DevTools. Możesz jednak również zainstalować go jako narzędzie autonomiczne. Jeśli jesteś nowy w Flutter lub potrzebujesz skonfigurować środowisko programistyczne od podstaw, nasz przewodnik instalacji i konfiguracji Flutter może pomóc upewnić się, że wszystko jest poprawnie skonfigurowane.
Podczas pracy z nowoczesnymi środowiskami programistycznymi, poprawna konfiguracja jest kluczowa. Jeśli korzystasz z VS Code jako głównego edytora, DevTools integruje się płynnie – możesz uruchomić go bezpośrednio z edytora. Poznaj podstawowe skróty i polecenia VS Code, które znacząco przyspieszą Twój workflow. Dla tych, którzy chcą tworzyć spójne środowiska programistyczne w zespołach, użycie Dev Containerów oferuje doskonałe rozwiązanie dla odwracalnych konfiguracji.
Aby sprawdzić, czy DevTools jest dostępny:
flutter doctor
Aby aktywować DevTools globalnie:
flutter pub global activate devtools
Aby uruchomić DevTools z linii poleceń:
flutter pub global run devtools
Uruchamianie DevTools
Istnieje kilka sposobów, aby uzyskać dostęp do Flutter DevTools:
Z VS Code lub Android Studio: Gdy uruchamiasz aplikację Flutter w trybie debugowania, IDE zwykle oferuje przycisk lub opcję menu DevTools. W VS Code szukaj opcji “Open DevTools” w pasku narzędzi debugowania.
Z linii poleceń: Gdy uruchamiasz aplikację Flutter, zobaczysz komunikat takий jak:
Flutter DevTools, running on http://127.0.0.1:9100
Prosto otwórz ten adres URL w swojej przeglądarce.
Uruchomienie autonomiczne:
flutter pub global run devtools
Następnie połącz go z działającą aplikacją Flutter, używając adresu URL serwera wirtualnego (VM service URL) wyświetlonego w terminalu.
Widget Inspector: Zrozumienie struktury UI
Widget Inspector jest najbardziej często używanym celem DevTools. Udostępnia wizualną reprezentację drzewa widgetów, co ułatwia zrozumienie struktury i układu aplikacji.
Kluczowe funkcje Widget Inspector
Wizualne drzewo widgetów: Przejdź przez hierarchię aplikacji, widząc dokładnie, jak widgety są zagnieżdżone i komponowane. To niezwykle przydatne przy pracy z kompozycyjnym podejściem Flutter do tworzenia interfejsów użytkownika.
Eksplorator układu: Wizualizacja, jak algorytm układu Flutter umieszcza i ustala rozmiary widgetów. Możesz zobaczyć ograniczenia, rozmiary i informacje o pozycjonowaniu dla każdego widgetu w drzewie.
Panel szczegółów widgetów: Wybierz dowolny widget, aby zobaczyć szczegółowe informacje, w tym:
- Właściwości widgetów i ich wartości
- Lokalizacja tworzenia w kodzie źródłowym
- Szczegóły obiektu renderowania
- Właściwości diagnostyczne
Tryb wyboru widgetów: Kliknij ikonę krzyża, a następnie kliknij dowolny element w działającej aplikacji, aby bezpośrednio przejść do tego widgetu w inspektorze. To idealne do analizy pytań typu „co to za widget?”.
Debugowanie wizualne: Włącz wizualne warstwy debugowania, które pokazują:
- Granice widgetów
- Odstępy i marginesy
- Linie bazowe
- Granice odświeżania
Podczas tworzenia złożonych układów, Widget Inspector staje się niezastąpiony. Wizualna reprezentacja pomaga zrozumieć dokładnie, jak Flutter buduje Twój interfejs użytkownika – kluczowa wiedza, gdy aplikacje rosną w złożoności.
Praktyczne wskazówki dotyczące Widget Inspector
- Użyj opcji „Pokaż linie kierunkowe”, aby zobaczyć problemy z wyrównaniem i odstępami
- Włącz „Podświetl odświeżania”, aby zidentyfikować widgety, które są niepotrzebnie odświeżane
- Sprawdź „Odwróć nadmierne obrazy”, aby znaleźć obrazy większe niż ich rozmiar wyświetlania
- Użyj „Pokaż linie bazowe”, gdy dokładnie wyrównujesz tekst
Widok wydajności: optymalizacja renderowania ramki
Flutter dąży do 60 fps (ramki na sekundę) na większości urządzeń i 120 fps na urządzeniach z wyższą częstotliwością odświeżania. Widok wydajności pomaga utrzymać te cele, identyfikując wąskie gardła wydajności.
Zrozumienie timeline wydajności
Widok wydajności wyświetla timeline pokazujący:
- Wykres renderowania ramki: Wizualna reprezentacja czasu wątku UI i wątku GPU
- Czas renderowania ramki: Rzeczywiste pomiary w milisekundach dla każdej ramki
- Zawieszone ramki: Ramki, które zajęły więcej niż budżet ramki (wyróżnione na czerwono)
Wątek UI vs wątek GPU:
- Wątek UI (Dart): Tam, gdzie wykonywany jest Twój kod Flutter, budowane są widgety i układ
- Wątek GPU (renderowanie): Tam, gdzie odbywają się rzeczywiste operacje rysowania
Oba wątki muszą zakończyć się w ramce, aby zapewnić płynną wydajność.
Skuteczne korzystanie z widoku wydajności
Zidentyfikuj zawieszenia: Czerwone paski wskazują ramki, które przekroczyły budżet. Kliknij zawieszoną ramkę, aby zobaczyć szczegółowe informacje o czasie i zidentyfikować, które operacje spowodowały opóźnienie.
Tryb profilowania jest kluczowy: Zawsze profiluj wydajność w trybie profilowania, a nie w trybie debugowania. Tryb debugowania zawiera dodatkowe sprawdzenia, które znacząco opóźniają aplikację.
flutter run --profile
Wydarzenia timeline: Timeline pokazuje konkretne wydarzenia, takie jak:
- Operacje budowania widgetów
- Obliczenia układu
- Operacje rysowania
- Kompilacja shaderów GPU
Zrozumienie optymalizacji wydajności jest kluczowe do dostarczania płynnego doświadczenia użytkownika. Efektywne zarządzanie stanem aplikacji może znacząco wpłynąć na wydajność renderowania, ponieważ niepotrzebne przebudowy są częstym źródłem zawieszeń. Wybieranie odpowiedniego podejścia do zarządzania stanem dla Twojej aplikacji Flutter jest kluczowe – różne wzorce, takie jak Provider, BLoC, Riverpod i inne, mają różne cechy wydajnościowe, które bezpośrednio wpływają na częstotliwość przebudowy widgetów.
Strategie optymalizacji wydajności
- Minimalizuj przebudowy widgetów: Używaj konstruktorów
constwszędzie, gdzie to możliwe - Wykorzystaj RepaintBoundary: Izoluj drogie widgety, aby zapobiec niepotrzebnym odświeżeniom
- Unikaj drogich operacji w metodach build: Przenieś obliczenia poza metodę build
- Używaj ListView.builder dla długich list: Buduj elementy zgodnie z potrzebą, a nie wszystkie naraz
- Profiliuj na rzeczywistych urządzeniach: Emulatory nie reprezentują rzeczywistej wydajności
Widok pamięci: śledzenie użycia pamięci
Przecieki pamięci i nadmierny jej wykorzystanie mogą powodować awarie aplikacji lub niską wydajność. Widok pamięci pomaga zrozumieć stopień zużycia pamięci przez aplikację i zidentyfikować potencjalne problemy.
Kluczowe metryki pamięci
Przegląd pamięci:
- Całkowita pamięć zużywana przez aplikację
- Trendy alokacji pamięci w czasie
- RSS (Resident Set Size) - rzeczywisty fizyczny obszar pamięci używany
Timeline alokacji pamięci: Wizualny wykres pokazujący zużycie pamięci w czasie. Szukaj:
- Stalych wzrostów (potencjalne przecieki pamięci)
- Dużych wstrząsów (drogie operacje lub duże struktury danych)
- Wzory typu “szyja” (normalna alokacja i zbieranie śmieci)
Analiza zrzutów pamięci
Zrób zrzuty pamięci, aby zobaczyć:
- Obiekty alokowane w stercie
- Liczby obiektów według klasy
- Zużycie pamięci według klasy
- Odwołania utrzymujące obiekty w pamięci
Porównywanie zrzutów: Zrób zrzut pamięci, wykonaj akcję, zrób kolejny zrzut pamięci, a następnie porównaj je, aby zobaczyć, które obiekty zostały utworzone i nie zwolnione.
Powszechne problemy związane z pamięcią
Pamięć obrazów: Obrazy, zwłaszcza wysokiej rozdzielczości, zużywają znaczną ilość pamięci. Używaj odpowiednio rozmiarowanych obrazów i rozważ strategie cacheowania.
Niedzwołane nasłuchiwacze: Niedzwołane StreamSubscriptions, AnimationControllers i inne nasłuchiwacze powodują przecieki pamięci.
Duże listy w pamięci: Ładowanie całego dużego zestawu danych do pamięci zamiast używania paginacji lub ładowania opóźnionego.
Monitor sieci: debugowanie ruchu HTTP
Monitor sieci oferuje widoczność wszystkich żądań i odpowiedzi HTTP, które aplikacja wykonuje, co jest kluczowe do debugowania problemów integracji API.
Funkcje widoku sieci
Lista żądań: Zobacz wszystkie żądania sieciowe, w tym:
- Metoda HTTP (GET, POST itp.)
- URL
- Kod stanu
- Czas żądania i odpowiedzi
- Rozmiar danych
Szczegóły żądania: Kliknij dowolne żądanie, aby zobaczyć:
- Nagłówki (żądanie i odpowiedź)
- Treść żądania
- Treść odpowiedzi
- Informacje o czasie
Wsparcie dla WebSocket: Monitoruj połączenia WebSocket i wiadomości w czasie rzeczywistym.
Debugowanie problemów API
Monitor sieci pomaga:
- Sprawdzić, czy żądania są wysyłane z poprawnymi adresami URL i parametrami
- Sprawdzić nagłówki uwierzytelniania, aby upewnić się, że tokeny są wysyłane
- Przeglądać dane odpowiedzi, aby zobaczyć, co rzeczywiście zwraca API
- Zidentyfikować wolne wywołania API, które wpływają na doświadczenie użytkownika
- Debugować problemy CORS w aplikacjach Flutter web
Podczas budowania aplikacji z usługami backend, zrozumienie, jak aplikacja komunikuje się z API, jest kluczowe. Niezależnie od tego, czy pracujesz z usługami RESTful, implementacją API w Go, czy integracją z AWS Amplify dla backendu Flutter, monitor sieci oferuje widoczność potrzebną do debugowania i optymalizacji komunikacji sieciowej.
Debugger: krok po kroku wykonanie kodu
Integrowany debugger pozwala na zawieszenie działania, inspekcję zmiennych i krokowanie przez kod linia po linii.
Możliwości debugera
Punkty przerwania: Ustaw punkty przerwania klikając w margines IDE lub używając interfejsu debuggera. Wykonanie zawiesza się, gdy zostanie osiągnięty punkt przerwania.
Inspekcja zmiennych: Gdy zawieszone, inspekcja:
- Lokalnych zmiennych i ich wartości
- Właściwości obiektów
- Stos wywołań
- Oceny wyrażeń
Kontrolki krokowania:
- Krok nad: Wykonaj aktualną linię i przejdź do następnej
- Krok w: Wejdź do wywołania funkcji, aby debugować wewnątrz
- Krok z: Zakończ aktualną funkcję i wróć do wywołującego
- Kontynuuj: Wznowić wykonanie do następnego punktu przerwania
Punkty przerwania warunkowe: Ustaw punkty przerwania, które aktywują się tylko wtedy, gdy spełnione są określone warunki, przydatne przy debugowaniu problemów występujących w określonych sytuacjach.
Praktyki debugowania
- Używaj znaczących nazw zmiennych dla łatwiejszej inspekcji
- Dodawaj opisowe instrukcje print w połączeniu z punktami przerwania
- Wykorzystuj stos wywołań do zrozumienia przepływu wykonania
- Używaj punktów przerwania warunkowych dla problemów występujących po wielu iteracjach
- Inspekcja stanu widgetów podczas przebudowy, aby zrozumieć zmiany stanu
- Zachowaj Dart/Flutter cheat sheet pod ręką jako szybki odniesienie do składni i typowych wzorców podczas debugowania
Widok logów: diagnostyka aplikacji
Widok logów agreguje wszystkie dane logów z aplikacji, w tym:
print()instrukcjedebugPrint()dane wyjściowedeveloper.log()komunikaty- Komunikaty diagnostyczne frameworku
- Komunikaty o błędach i stosach śladów
Skuteczne strategie logowania
Strukturalne logowanie: Używaj spójnych formatów komunikatów logów dla łatwiejszego filtrowania i wyszukiwania:
developer.log(
'Wykonano działanie użytkownika',
name: 'UserService',
error: error,
stackTrace: stackTrace,
);
Poziomy logów: Rozróżnij różne poziomy ważności:
- Informacje debugowania
- Komunikaty informacyjne
- Ostrzeżenia
- Błędy
Filtrowanie i wyszukiwanie: Użyj możliwości filtrowania widoku logów, aby skupić się na konkretnych typach komunikatów lub komponentach.
Narzędzie do analizy rozmiaru aplikacji: analiza rozmiaru budowy
Zrozumienie, co wpływa na rozmiar aplikacji, jest ważne dla utrzymania rozsądnego rozmiaru pobrania i unikania ograniczeń w sklepach aplikacji.
Funkcje analizy rozmiaru
Narzędzie do analizy rozmiaru dzieli złożoną aplikację na:
- Dart code: Twój kod aplikacji i zależności
- Assets: Obrazy, czcionki i inne zasoby
- Native code: Kod specyficzny dla platformy i biblioteki
Zmniejszanie rozmiaru aplikacji
- Usuń nieużywane zależności z pubspec.yaml
- Optymalizuj obrazy: Używaj odpowiednich formatów i rozdzielczości
- Włącz zmniejszanie kodu z flagą
--split-debug-info - Ładuj funkcje opóźnione tylko wtedy, gdy są potrzebne
- Analizuj wkład pakietów i rozważ lżejsze alternatywy
- Rozważ budowę w kontenerach: Dockerizacja aplikacji Flutter web może pomóc utworzyć zoptymalizowane budowy produkcyjne z konsekwentnymi rozmiarami wyjścia
Integracja z środowiskami programistycznymi
Integracja z VS Code
VS Code oferuje doskonałą integrację Flutter DevTools. Gdy ustawiasz swoje środowisko programistyczne, VS Code oferuje przepływ pracy dla rozwoju Flutter z wbudowanym dostępem do DevTools.
Rozszerzenie Flutter dla VS Code oferuje:
- Jeden klik DevTools
- Integrowany debugger
- Obsługę hot reload
- Inspekcja widgetów bezpośrednio w edytorze
Dla programistów, którzy chcą rozwinąć swoje ustawienia VS Code, opanowanie skrótów klawiaturowych i konfiguracji przestrzeni roboczej może znacząco poprawić wydajność. Zrozumienie, które narzędzia i frameworki są najpopularniejsze może również pomóc w podejmowaniu świadomych decyzji, które technologie warto uczyć się.
Integracja z Android Studio
Android Studio oferuje również natywną integrację DevTools:
- Przycisk DevTools w pasku narzędzi
- Integrowany z panelem Flutter Inspector
- Bezproblemowy przepływ pracy debugowania
Najlepsze praktyki korzystania z Flutter DevTools
Integracja z przepływem pracy rozwoju
Wczesno i często: Nie czekaj, aż pojawią się problemy. Regularnie używaj DevTools podczas rozwoju:
- Sprawdzaj strukturę widgetów podczas budowania
- Profiluj wydajność stopniowo
- Monitoruj użycie pamięci podczas rozwoju funkcji
Testuj na rzeczywistych urządzeniach: Emulatory i symulatory nie dokładnie reprezentują rzeczywiste wydajność. Zawsze profiluj na rzeczywistych urządzeniach, szczególnie na urządzeniach niższej klasy, które mogą mieć użytkownicy.
Tryb profilowania dla wydajności: Pamiętaj, aby używać trybu profilowania podczas mierzenia wydajności. Tryb debugowania zawiera sprawdzenia, które znacząco opóźniają aplikację.
flutter run --profile
Dokumentuj bazowe metryki: Zapisuj metryki wydajności dla kluczowych ekranów i przepływów użytkownika. Pomaga to zauważyć, gdy zmiany pogarszają wydajność.
Współpraca w zespole
Dzielenie się adresami URL DevTools: Gdy debugujesz z członkami zespołu, możesz dzielić się URL DevTools dla wspólnych sesji debugowania (upewnij się, że aplikacje działają na dostępnych sieciach).
Dowody w formie zrzutów ekranu: DevTools ułatwia załapanie zrzutów ekranu drzewa widgetów, timeline wydajności i wykresów pamięci do raportowania błędów i dokumentacji.
Ustanowienie budżetów wydajności: Jako zespół, zdefiniuj akceptowalne metryki wydajności:
- Maksymalny czas renderowania ramki
- Maksymalne użycie pamięci
- Akceptowalny rozmiar aplikacji
- Próg czasu odpowiedzi API
Zaawansowane funkcje DevTools
Głębsze łącza timeline
Możesz dzielić się konkretnymi timeline wydajności, zapisując i ładowając dane timeline. To przydatne jest do:
- Porównywania wydajności między wersjami kodu
- Udostępniania problemów wydajności z członkami zespołu
- Dokumentowania poprawek wydajności
Własne właściwości diagnostyczne
Dodaj własne właściwości diagnostyczne do widgetów dla lepszego debugowania:
@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(StringProperty('userId', userId));
properties.add(IntProperty('itemCount', items.length));
}
Te właściwości pojawiają się w Widget Inspector, co czyni debugowanie bardziej informacyjnym.
Rozszerzenia DevTools
Zespół Flutter nadal dodaje nowe funkcje i narzędzia do DevTools. Utrzymuj aktualizację swojego SDK Flutter, aby uzyskać dostęp do najnowszych możliwości:
flutter upgrade
Typowe problemy i rozwiązania
Problem: DevTools nie łączy się
Rozwiązanie:
- Upewnij się, że aplikacja działa w trybie debugowania lub profilowania
- Sprawdź, czy nie ma problemów z zaporem blokującym port DevTools
- Spróbuj uruchomić DevTools z jawnym URL serwera wirtualnego (VM service URL)
Problem: Dane wydajności wyglądają źle
Rozwiązanie:
- Potwierdź, że działa w trybie profilowania, a nie w trybie debugowania
- Testuj na rzeczywistym urządzeniu, a nie emulatorze
- Ponownie uruchom DevTools i aplikację
Problem: Widget Inspector nie pokazuje wszystkich widgetów
Rozwiązanie:
- Włącz „Pokaż banner trybu debugowania”, aby potwierdzić, że jesteś w trybie debugowania
- Spróbuj włączać i wyłączać tryb wyboru widgetów
- Ponownie uruchom aplikację, jeśli hot reload spowodował problemy z stanem
Podsumowanie
Flutter DevTools to niezastąpiona część ekosystemu Flutter. Opanowanie jego różnych funkcji – od Widget Inspectora po widok wydajności, od profilowania pamięci po monitorowanie sieci – pozwoli Ci budować wysokowydajne, bezbugowe aplikacje efektywnie.
Kluczem do uzyskania maksymalnej korzyści z DevTools jest jego regularne wykorzystywanie w swoim przepływie pracy rozwoju, a nie tylko jako narzędzie, do którego sięga się, gdy pojawią się problemy. Regularne korzystanie pomaga zrozumieć zachowanie aplikacji głęboko i wykrywać potencjalne problemy przed tym, jak stają się problemami.
Niezależnie od tego, czy debugujesz skomplikowany problem układu, optymalizujesz wydajność dla płynnych animacji 60fps, śledzisz przeciek pamięci, czy analizujesz problemy integracji API, Flutter DevTools oferuje widoczność i wgląd potrzebne do sukcesu.
Zacznij włączać DevTools do swojej codziennej pracy z Flutter od dziś, i szybko zaczniesz zastanawiać się, jak mogłeś rozwijać aplikacje bez niego.
Kiedy używać każdej funkcji DevTools
Widget Inspector:
- Budowanie nowych układów UI
- Zrozumienie istniejących struktur widgetów
- Debugowanie problemów układu
- Optymalizacja wydajności przebudowy widgetów
Widok wydajności:
- Profilowanie renderowania ramki
- Zidentyfikowanie zawieszeń i utraconych ramek
- Optymalizacja animacji
- Zapewnienie wydajności 60fps
Widok pamięci:
- Badanie awarii aplikacji
- Znajdowanie przecieków pamięci
- Optymalizacja użycia pamięci
- Zrozumienie wzorców alokacji pamięci
Monitor sieci:
- Debugowanie integracji API
- Weryfikacja danych żądania/odpowiedzi
- Zidentyfikowanie wolnych wywołań sieciowych
- Rozwiązywanie problemów z uwierzytelnianiem
Debugger:
- Badanie błędów logicznych
- Zrozumienie przepływu wykonania
- Inspekcja stanu zmiennych
- Śledzenie wyjątków
Widok logów:
- Monitorowanie zachowania aplikacji
- Śledzenie działań użytkownika
- Debugowanie problemów w budowach produkcyjnych (z odpowiednim logowaniem)
- Zrozumienie komunikatów frameworku
Gdzie się dalej uczyć
Flutter DevTools stale ewoluuje wraz z nowymi funkcjami i poprawkami. Zostań zaktualizowany dzięki:
- Oficjalnej dokumentacji Flutter
- Notatkach wersji Flutter DevTools
- Forach i dyskusjom społeczności Flutter
- Prezentacjach i tutoriach na temat rozwoju Flutter
Gdy kontynuujesz swoją podróż w rozwoju Flutter, pamiętaj, że DevTools to tylko jeden element kompleksowego zestawu narzędzi. Zrozumienie podstaw języka Dart, opanowanie swojego IDE, implementacja odpowiednich wzorców zarządzania stanem oraz przestrzeganie najlepszych praktyk wdrażania wspólnie tworzą solidny przepływ pracy rozwoju.
Zewnętrzne referencje i zasoby
Ten artykuł został napisany przy użyciu informacji z poniższych źródeł:
- Oficjalna dokumentacja Flutter DevTools - Oficjalna dokumentacja Flutter DevTools
- Repozytorium Flutter DevTools - Kod źródłowy i śledzenie problemów dla Flutter DevTools
- Przewodnik po Dart DevTools - Oficjalny przewodnik po DevTools języka Dart
- Najlepsze praktyki wydajności Flutter - Oficjalny przewodnik po optymalizacji wydajności Flutter
- Dokumentacja Widget Inspectora - Szczegółowy przewodnik po Widget Inspectorze
- Dokumentacja widoku wydajności - Oficjalny przewodnik po profilowaniu wydajności
- Dokumentacja widoku pamięci - Przewodnik po profilowaniu pamięci i wykrywaniu przecieków
- Społeczność Flutter na Reddit - Aktywne dyskusje społeczności programistów Flutter
- Kanał YouTube Flutter - Oficjalne wideo tutorial i aktualizacje Flutter
Przydatne linki
- Flutter (Dart) Cheat Sheet
- Zainstaluj i skonfiguruj środowisko programistyczne Flutter
- VSCode Cheat Sheet
- Popularność języków i frameworków
- Użycie Dev Containerów w VS Code
- 6 sposobów zarządzania stanem w aplikacjach Flutter (z przykładami kodu)
- Aplikacja Flutter z backendem AWS Amplify
- Dockerizacja aplikacji Flutter Web z dockerizowanym budowaniem Flutter i Nginx