Czy Flutter jest gotowy dla korporacyjnego projektu?

22.09.2022 | Jakub Biliński

Wstęp

Technologie mobilne rozwijają się w dzisiejszych czasach niesamowicie szybko. Dzięki temu możemy efektywnie rozwiązywać problemy, które kiedyś były bardzo czasochłonnym wyzwaniem. W tym artykule zostanie poruszona tematyka technologii Flutter, która to napędza jedną z naszych kluczowych aplikacji w banku - ING Business Mobile.

 

Podstawy Fluttera

Flutter to wieloplatformowy zestaw narzędzi, który umożliwia reużywanie kodu w różnych systemach operacyjnych takich jak iOS czy Android, a jednocześnie umożliwia aplikacjom bezpośrednią komunikację z usługami platformy. Tak przynajmniej możemy przetłumaczyć pierwsze zdanie oficjalnej dokumentacji Fluttera. Myślę, że jest to świetne podsumowanie koncepcji tej technologii, ale warto jednak przyjrzeć się kluczowym aspektom Fluttera dokładniej.

Po pierwsze, we Flutterze możemy „mieszać” kod natywny z kodem współdzielonym. Dzięki temu możemy współdzielić zdecydowaną większość kodu, którą piszemy w języku Dart, a reszta kodu może pozostać w językach natywnych dla danej platformy. Flutter pozwala nam na przykład z poziomu współdzielonego kodu napisanego w języku Dart, wywoływać kod natywny z Androida (np. w Javie) oraz iOS (np. w Swift). Dzięki temu możemy korzystać z bibliotek natywnych dla tych systemów operacyjnych bez żadnych problemów.

Źródło: opracowanie własne

Kolejny ważny element to łatwość tworzenia interfejsów graficznych. Dzięki wykorzystaniu języka Dart, możliwe jest opisywanie wyglądu elementów na ekranie w sposób deklaratywny. Dzięki temu, kod jest łatwo utrzymaniu i wygodny w rozszerzeniu o funkcjonalności.

Trzecim i ostatnim elementem, o którym warto wspomnieć jest szybkość działania Flutera. Wszystkie animacje na ekranie są odtwarzane w 60 FPS lub wyższej (zależnie od możliwości urządzenia). Dzięki temu użytkownicy otrzymują bardzo płynne oraz przyjemne dla oka doświadczenie. Jeżeli chodzi o szybkość, należy również zaznaczyć, że zmiany wprowadzone w kodzie dzięki mechanizmowi „Hot Reload” również są prawie natychmiast widoczne.

 

Jak to działa?

Flutter brzmi świetnie, ale jak to jest możliwe, że on działa? Było już wiele podejść do aplikacji wieloplatformowych jak Xamarin czy Ionic. Ale dopiero Flutterowi udało się porwać deweloperów za sobą.

Po pierwsze, Flutter rysuje swoje elementy niezależnie od platformy, na której działa w taki sam sposób. Wynika to z tego, że elementy są rysowane jako elementy graficzne poprzez komunikację z odpowiednim API graficznym. Dzięki temu UI może wyglądać identycznie na różnych systemach operacyjnych, ponieważ każdy element jest swego rodzaju rysowany przez Fluttera jako piksele na ekranie z pominięciem systemowej obsługi UI. Jeżeli zeszlibyśmy niskopoziomowo do działania Fluttera, to działa to dokładnie tak samo jak gry, które to również rysują różne elementy na ekranie niezależnie od systemu operacyjnego, czy architektury procesora.

Źródło: opracowanie własne

 

Mechanizm, który opisałem brzmi świetnie, ale jest bardzo skomplikowany. W końcu wspieranie różnych API graficznych jak Metal, Vulkan czy OpenGL, to nie jest proste zadanie. Na szczęście firma Google wykorzystała jedną z bibliotek ze swojego inwentarza – Skia. Dzięki temu osobny zespół mógł zajmować się zwiększaniem wsparcia dla coraz większej ilości API graficznych, a co za tym idzie platform, a drugi mógł skupić się na stworzeniu wygodnego mechanizmu dla tworzenia UI o nazwie Flutter.

Źródło: opracowanie własne

 

Sam silnik renderujący jest ważny, ale nie jest jedynym kluczowym elementem. Istnieje jeszcze jeden, wyjątkowy składnik technologii Flutter, który zapewnia wysoką wydajność oraz łatwość pracy z kodem.

Praca z językami interpretowanymi jest bardzo wygodna, ponieważ daje nam możliwość bardzo szybkiego zobaczenia zmian w kodzie, bez potrzeby przebudowywania naszego projektu przez długi czas. Kompilowanie naszej aplikacji do kodu maszynowego jest bardzo czasochłonne, ale za to efekt końcowy jest o wiele bardziej wydajny dla użytkownika końcowego. Specjaliści odpowiedzialni za Fluttera postanowili połączyć te dwa światy. W trybie testowym (debug) aplikacja jest odpalana na wirtualnej maszynie i kod jest przez nią interpretowany na bieżąco (JIT), a jeżeli aplikacji budujemy w trybie produkcyjnym (release) to kod jest budowany do kodu maszynowego (AOT). Dzięki temu możemy korzystać z zalet obu rozwiązań bez ich wady.

Źródło: opracowanie własne

 

Flutter w ING

W ING wykorzystujemy Fluttera w jednej z naszych aplikacji mobilnych - ING Business Mobile dostępnej dla systemów Android oraz iOS. Aplikacja jest używana przez ponad 40 tys. firm w naszym kraju. Dzięki wykorzystaniu Fluttera mogliśmy przepisać nasze dwie natywne aplikacje na jeden współdzielony kod. Dzięki temu utrzymanie aplikacji stało się o wiele łatwiejsze, ponieważ czas możemy poświęcić na dodawanie nowych funkcjonalności biznesowych raz, zamiast powielać tą samą pracę w dwóch różnych technologiach. Tylko niektóre elementy (np. związane z bezpieczeństwem czy biblioteki z poprzedniej wersji aplikacji) zostały zaimplementowane natywne. Dzięki temu baza kodowa jest o wiele mniejsza i bardziej spójna.

Źródło: opracowanie własne

 

Podsumowanie

Flutter jako technologia, jest ciekawym podejściem do tworzenia wieloplatformowych aplikacji. W wielu przypadkach warto go zastosować jako alternatywę do czysto natywnych rozwiązań. Jednak tak jak w przypadku każdego narzędzia, należy je dobrać do problemu, który potrzebujemy rozwiązać, a nie narzędzie do problemu.

 

Wolisz obejrzeć wideo? 

W czerwcu uczestniczyłem w konferencji Code Europe, podczas której z ramienia ING Banku Śląskiego wygłosiłem wystąpienie - Is Flutter any good for enterprise-grade projects. Jeśli wolisz wideo, zapraszam do obejrzenia nagrania z mojego wystąpienia. Miłego oglądania!