
03 lip 2024 POIT #251: Flutter
Witam w dwieście pięćdziesiątym pierwszym odcinku podcastu „Porozmawiajmy o IT”. Tematem dzisiejszej rozmowy jest Flutter.
Dziś moim gościem jest Adam Stelmaszyk – od ponad pięciu lat komercyjnie projektuje i tworzy aplikacje mobilne w technologii Flutter. Obecnie pełni rolę Senior Flutter Developera w jednej z największych firm Flutterowych w Czechach – EmbedIT. Po godzinach działa jako freelancer oraz rozwija swoje własne projekty. W swojej karierze napisał kilkanaście różnych Flutterowych aplikacji mobilnych i webowych, z których jedna osiągnęła ponad 1 milion pobrań. W wolnym czasie jest pasjonatem podróży, zwłaszcza tych dalekich i nieoczywistych, następny przystanek Indie.
W tym odcinku o Flutter rozmawiamy w następujących kontekstach:
- czym jest Flutter?
- dlaczego powstał?
- kto go stworzył?
- jaką Flutter posiada konkurencję?
- jakie funkcje/zalety wyróżniają Flutter na tle konkurencyjnych technologii?
- kiedy lepiej wybrać Flutter, a gdzie użyć natywnego rozwiązania (Android/iOS) ?
- co potrzeba do stworzenia pierwszej aplikacji we Flutterze ?
- jak testować aplikacje we Flutterze ?
- jakie firmy korzystają z Fluttera ?
- czy Flutter ma przyszłość? Jak ona wygląda?
- od czego zacząć, żeby wejść do świata Fluttera ?
- jak wygląda rynek pracy dla programistów Flutter?
Subskrypcja podcastu:
- zasubskrybuj w Apple Podcasts, Google Podcasts, Spreaker, Sticher, Spotify, przez RSS, lub Twoją ulubioną aplikację do podcastów na smartphonie (wyszukaj frazę „Porozmawiajmy o IT”)
- ściągnij odcinek w mp3
- poproszę Cię też o polubienie fanpage na Facebooku
Linki:
- Profil Adama na LinkedIn – https://www.linkedin.com/in/adam-stelmaszyk/
Wsparcie na Patronite:
Wierzę, że dobro wraca i że zawsze znajdą się osoby w bliższym lub dalszym gronie, którym przydaje się to co robię i które zechcą mnie wesprzeć w misji poszerzania horyzontów ludzi z branży IT.
Patronite to tak platforma, na której możesz wspierać twórców internetowych w ich działalności. Mnie możesz wesprzeć kwotą już od 5 zł miesięcznie. Chciałbym oddelegować kilka rzeczy, które wykonuję przy każdym podcaście a zaoszczędzony czas wykorzystać na przygotowanie jeszcze lepszych treści dla Ciebie. Sam jestem patronem kilku twórców internetowych i widzę, że taka pomoc daje dużą satysfakcję obu stronom.
👉Mój profil znajdziesz pod adresem: patronite.pl/porozmawiajmyoit
Pozostańmy w kontakcie:
- 📧 Jeśli masz jakieś pytania lub komentarze, pisz do mnie śmiało na krzysztof@porozmawiajmyoit.pl
- 📩 Zapisz się na newsletter, aby nie przegapić kolejnych ciekawych odcinków
- 🎙 Subskrybuj podcast w
lub
Muzyka użyta w podcaście: „Endless Inspiration” Alex Stoner (posłuchaj)
Transkrypcja podcastu
To jest 251. odcinek podcastu Porozmawiajmy o IT, w którym z moim gościem rozmawiam o technologii Flutter.
Wszystko, co potrzebujesz, notatka, linki, transkrypcja, czekają na Ciebie na porozmawiajmyoit.pl/251.
Myślisz o zmianie pracy lub przebranżowieniu do IT? Zajrzyj na Solid.jobs, gdzie znajdziesz przejrzyste oferty z informacją o zarobkach, technologiach i projektach.
Nazywam się Krzysztof Kempiński, prowadzę ten podcast oraz jestem autorem książki Marka osobista w branży IT. Mam misję polegającą na poszerzaniu horyzontów ludzi z branży IT. Tak się składa, że możesz bardzo mi w tym pomóc poprzez wystawienie oceny w aplikacji, w której tego słuchasz, lub podzielenie się odcinkiem w social mediach.
A teraz zapraszam Cię już do odcinka.
Odpalamy!
Cześć!
Mój dzisiejszy gość od ponad 5 lat komercyjnie projektuje i tworzy aplikacje mobilne w technologii Flutter. Obecnie pełni rolę senior Flutter developera w jednej z największych firm Flutterowych w Czechach EmbedIT. Po godzinach działa jako freelancer oraz rozwija swoje własne projekty. W swojej karierze napisał kilkanaście różnych Flutterowych aplikacji mobilnych i webowych, z których jedna osiągnęła ponad 1 mln pobrań. W wolnym czasie jest pasjonatem podróży, zwłaszcza tych dalekich i nieoczywistych. Moim i Waszym gościem jest Adam Stelmaszyk.
Cześć, Adam. Bardzo miło mi gościć Cię w podcaście.
Cześć, miło się spotkać.
Dla tych wszystkich, którzy uważnie słuchali Twojego przedstawienia, jasna już jest tematyka tego odcinka. Będzie o Flutter, masz dużo doświadczenia zawodowego związanego z tą technologią, więc bardzo się cieszę, że będziemy mogli o niej porozmawiać. Sam będę miał okazję się przy tym czegoś nauczyć, bo nigdy nie miałem sposobności działać we Flutterze, więc tym bardziej się cieszę na nasze spotkanie.
Zanim przejdziemy do tych technicznych pytań, to chciałbym Ci zadać takie bardziej otwierające pytanie, czy słuchasz podcastów. Jeśli tak, to może masz jakieś ciekawe audycje, o których chciałbyś powiedzieć słuchaczom?
Tak, nie słucham może jakoś bardzo intensywnie podcastów, ale na pewno bardzo ciekawym podcastem jest Porozmawiajmy o IT. Nie wiem, czy też słuchasz. Ale też z takich popularnonaukowych, trochę technicznych, ale nie aż tak bardzo, to Techstorie. Ich słuchanie wyszło przez przypadek, bo panią Sylwię Czubaszek spotkałem w Japonii, wymieniliśmy się po krótkiej rozmowie instagramami i tak dowiedziałem się, że ona nagrywa te Techstoria i dlatego zostałem z nimi dłużej. Poza podcastami korzystam np. z TechCruncha, czytam blogi lub też z Medium lubię pozyskiwać informacje.
Fajnie, dzięki za te rekomendacje. To może zacznijmy od tego, czym w ogóle ten Flutter jest, skąd się wywodzi, dlaczego powstał i na jakim języku programowania bazuje. Myślę, że to są takie podstawy, które pozwolą nam później pójść dalej.
Flutter to platforma, framework od Google’a, który bazuje na języku Dart. W zasadzie Dart tak naprawdę w niczym innym nie jest wykorzystywany czy znany, jak tylko we Flutterze. Obecnie we Flutterze można stworzyć tak naprawdę wszystko, od aplikacji mobilnych, webowych, poprzez desktopowe, i jest nawet framework do backendu. Ale takim głównym corem Fluttera są aplikacje mobilne i najczęściej w firmach jest on wykorzystywany do tego.
I może trochę wróćmy do początku, porozmawiajmy o tym języku, Darcie. Powstał on w 2011 roku, został wtedy zaprezentowany w Korphus, w Danii przez komórkę Google’a, a prace zaczęły się podobno rok wcześniej. Flutter miał też nawet takie zamierzenie, żeby trochę zastąpić JavaScript w webie, ale to się nie udało, Flutter nie jest popularnym frameworkiem dla weba, więc Dart też oczywiście nie poszedł w tę stronę. Ale tak naprawdę, jakby Dart miał swój framework albo bibliotekę Angular Dart, co jest też dość ciekawe, że chcieli coś stworzyć na wzór świata Angularowego, JavaScriptowego, ale finalnie skończyło się na tym, że Dart jest bardzo sprzężony z Flutterem i Flutter go zaadaptował i tak naprawdę pierwsza wzmianka o Darcie była w 2015 roku i w zasadzie nie nazwali tego frameworka Flutterem, ale Sky. I ten framework miał takie założenie, że był dostępny tylko na androida i mógł wyświetlać 120 klatek/sekundę, co w mojej ocenie wówczas było bardzo dużo jak na platformy mobilne. I oni to przez cały czas rozwijali, a w 2017 roku zmienili nazwę na Flutter.
To była bardzo prozaiczna rzecz, dlaczego zmienili nazwę, a mianowicie wyszły względy prawne. W 2018 roku wyszła pierwsza stabilna wersja Fluttera, na androida i iOS-a, później zrobili release, ale jeszcze niestabilny, że można było we Flutterze budować weba i desktopa, i w 2021 roku, kiedy Flutter osiągnął wersję 2.0, platforma webowa stała się stabilna i było już bardziej rekomendowane, żeby budować produkcyjnie aplikacje internetowe we Flutterze, co niektóre firmy zaadaptowały i nawet przed tą stabilną wersją budowały aplikacje webowe.
Rok później Flutter wszedł na 3.0 i wtedy, lub trochę później, weszły stabilne wersje dla Windowsa, Ubuntu i Macrosa, więc Flutter wszedł już również na stabilną wersję dla desktopa. I dla takich geeków technologicznych, Flutter 2024 ma stabilną wersję web assembly dla weba.
Czyli mamy relatywnie młodą technologię, ale z dużym graczem stojącym za nią. Mówiłeś o tej multi platformowości jako o czymś takim, co od początku stało za tworzeniem technologii Flutter, ale to nie jest jedyna technologia multi platformowa, spośród których możemy na rynku wybierać. Jak wygląda konkurencja, obecny rynek, jakie są różnice, mocne strony konkurentów Fluttera?
Właśnie to, co powiedziałeś. Flutter faktycznie ma dość dużą konkurencję i jest w zasadzie jedną z najmłodszych technologii multi platformowych, ale jest bardzo dojrzały i stabilny w porównaniu do innych technologii. Na pewno największym graczem jest React Native, później jest np. Xamarin, Kotlin multiplatform i Cordova.
I zacznijmy od końca, od tych trochę najsłabszych graczy: Cordova albo Ionic. Ja nigdy nie programowałem w tych technologiach, ale o ile wiem, one wykorzystują JavaScript, HTML i CSS do budowania widoków, i to wszystko jest odpalane w web view, tzn., że nie korzystamy z natywnych komponentów środowiska natywnego albo tak jak Flutter nie renderujemy swojego własnego widoku, ale tak jakby zaszyta jest przeglądarka w aplikacji.
To powoduje, że jeżeli chcielibyśmy sobie zrobić jakąś skomplikowaną aplikację, która by miała wiele animacji i wiele jakichś innych rzeczy, mogłoby to nie być do końca optymalne. Po pierwsze nie jest to dobrze przystosowane, sami widzimy, że np. jak korzystamy z jakiejś aplikacji w telefonie, która jest na przeglądarce, to wolimy sobie ściągnąć aplikację mobilną, która działa o wiele płynniej. Możemy to zobaczyć np. na Instagramie – w telefonie, nawet jeśli ktoś ma iPhone’a 14, to działa trochę słabiej od aplikacji mobilnej.
Później następnym takim graczem jest Kotlin multiplatform. Jest on natywnym językiem dla androida. JetBrains stworzył Kotlin multiplatform, w którym można przenieść logikę biznesową z androidowej aplikacji do iOS-owej. Ostatnio czytałem, że stworzyli nawet Compose multiplatform, co jest takim ukłonem nie tylko w stronę budowania logiki dla iOS-a, ale też budowania wyglądu, tego UI-a dla iOS-a, że można korzystać z komponentów, które wytworzy się na androida, na iOS-ie. Jeszcze pół roku temu zależności były tylko logiczne, a wygląd trzeba było tworzyć osobno dla androida i iOS-a, a teraz podobno jest ten Compose multuplatform.
Zabawna rzecz: dla androida jest stabilny, ale dla iOS-a jest cały czas w wersji BETA, co powoduje, że przez cały czas lepiej tworzyć wszystko natywnie, w SWIFT.
Jeszcze mamy dwóch takich graczy. Pierwszy to Xamarin. On ma dużo problemów z wersjonowaniem, z nowymi update’ami. Czasami się okazywało, że jak wyszedł nowy update, to trzeba było przebudowywać cały projekt, więc ja jestem bardzo sceptyczny akurat dla takiego rozwiązania.
I największym konkurentem jest React Native. Oni są na początku tego peletonu i się tylko prześcigają, ile aplikacji jest napisanych we Flutterze, a ile w React Native. I jest on fajnym frameworkiem i jeśli ktoś nie chce wybrać Fluttera, to warto wybrać w mojej ocenie React Native. Dużą jego zaletą i wadą zarazem jest to, że korzysta on z natywnych komponentów iOS-a i androida. To polega na tym, że jeśli iOS sprawi, że strzałka wygląda trochę inaczej, to automatycznie React Native się do tego zaadaptuje, czego akurat Flutter w tym przypadku nie ma.
Ale trzeba pamiętać, że ten kod, który napiszemy w React Native, musi być przetransformowany do kodu natywnego, tego iOS-owego albo androidowego, co powoduje, że mogą być np. problemy z animacjami albo ta multiplatformowość nie jest wcale taka łatwa, bo coś widokowo nam zadziała na androidzie, ale już nie zadziała na iOS-ie, bo pod spodem jest już inna biblioteka, jakieś dependency mogą się zmienić, więc tutaj mogą być takie problemy.
Co jest fajne i co też akurat posiada Flutter, to jest hot reload. Czyli programujemy sobie aplikację i np. chcemy od razu zobaczyć te zmiany, które zaimplementowaliśmy na widoku, więc klikamy sobie komendę i automatycznie nie tracimy skanu ekranu, który posiadamy ani nie cofamy się do początku aplikacji, tylko automatycznie te zmiany są podmieniane, co jest akurat bardzo fajnym rozwiązaniem, bo development jest o wiele szybszy.
I wydaje mi się też, że np. state menadżer, który jest jednym z bardziej popularnych w React Native, tj. Redux. Też jest adaptacja tego Reduxa, tego state menadżera do Fluttera.
Szybki disclaimer: state menadżer to jest taka rzecz w aplikacji, która trzyma stany aplikacji, dane, które są jakimiś danymi biznesowymi. Albo np. state menadżer w zależności od architektury łączy np. widok z warstwą serwisową, czyli tą, z której pobieramy dane z backendu bądź z jakiejś bazy danych, którą mamy wewnętrznie w aplikacji.
Bardzo uczciwie pokazałeś wady i zalety konkurentów Fluttera, to myślę, że teraz warto byłoby powiedzieć, czym ten flutter się wyróżnia, jakie ma zalety na tle konkurencyjnych technologii.
Flutter został stworzony też do bardzo fajnych animacji. Ma swój własny renderer, który nazywa się do dzisiaj Skia, w zasadzie to jest silnik graficzny 2D, który nie został stworzony dla Fluttera i jeszcze niedawno był głównym silnikiem graficznym, ale tak naprawdę flutter teraz zaadaptował do iOS-a Impeller i jest on już w pełni stabilny. I jest on w 100% dedykowany do Fluttera. Czyli on jest stworzony pod niego i na iOS-a jest w stabilnej wersji, ale np. na androida, jeżeli nie obsługuje on innego silnika Volcano, to wtedy Skia wchodzi do gry i przejmuje tę rolę, czyli są tutaj jeszcze jakieś zależności, które są tutaj jakimś problemem. Ale tak ogólnie powiedziałbym, że to jest bardzo fajne, bo te animacje we Flutterze są płynne, co powoduje, że nasz kod Flutterowy nie używa żadnych pomostów do kodu natywnego androidowego i iOS-owego, dzięki czemu możemy robić optymalizację tych widoków, że one mogą się o wiele szybciej odświeżać, mogą być o wiele płynniejsze, co jest w mojej ocenie bardzo dużym benefitem.
Flutter jest też w pełni zaadaptowany do Material Appa, co jest standardem stylistycznym od Google’a, i jest też zaadaptowany do Apple Cupertino. Jeżeli ktoś wpadłby na taki pomysł, co nie jest oczywistym rozwiązaniem przy tworzeniu we Flutterze, bo raczej zawsze się myśli, żeby był jeden design dla dwóch platform (iOS-a i androida), ale jeżeli ktoś chciałby stworzyć dwa osobne designy, to jest taka możliwość.
Wydaje mi się też, że ma dojrzałą multiplatformowość. W mojej ocenie to jest dobre, ale czasami również złe, bo jak zajmujesz się wszystkim, to może się okazać, że nie zajmujesz się niczym, ale Flutter trochę idzie w stronę mobilną, z tym że jeżeli ktoś stworzy aplikację mobilną i fajnie, jakby ona była też na weba, i to nie jest żadna strona internetowa, która musi się pozycjonować, ale backoffice’owa aplikacja, że korzysta z tego pół firmy i fajnie, jakby było też w webie, bo macie komputery. Więc łatwo można zmigrować aplikację mobilną do webowej i w zasadzie nawet można, jeżeli nie będzie jakichś bibliotek, które są dedykowane tylko dla androida i iOS-a, odpalić ją tak naprawdę w ciągu 5 minut, ale wygląd okna powiększonego z aplikacji mobilnej do weba będzie straszny. Ale jeżeli chodzi o funkcjonalności, to będzie spełniał te same, które są w aplikacji mobilnej.
Flutter został stworzony też do bardzo fajnych animacji. Ma swój własny renderer, który nazywa się do dzisiaj Skia, w zasadzie to jest silnik graficzny 2D, który nie został stworzony dla Fluttera i jeszcze niedawno był głównym silnikiem graficznym, ale tak naprawdę flutter teraz zaadaptował do iOS-a Impeller i jest on już w pełni stabilny. I jest on w 100% dedykowany do Fluttera. Czyli on jest stworzony pod niego i na iOS-a jest w stabilnej wersji, ale np. na androida, jeżeli nie obsługuje on innego silnika Volcano, to wtedy Skia wchodzi do gry i przejmuje tę rolę, czyli są tutaj jeszcze jakieś zależności, które są tutaj jakimś problemem. Ale tak ogólnie powiedziałbym, że to jest bardzo fajne, bo te animacje we Flutterze są płynne, co powoduje, że nasz kod Flutterowy nie używa żadnych pomostów do kodu natywnego androidowego i iOS-owego, dzięki czemu możemy robić optymalizację tych widoków, że one mogą się o wiele szybciej odświeżać, mogą być o wiele płynniejsze, co jest w mojej ocenie bardzo dużym benefitem.
Pamiętam, kiedy te technologie multiplatformowe zaczęły się pojawiać, trochę doświadczeń z Cordovą też miałem, to one, łagodnie mówiąc, nie domagały, natomiast teraz są to już mocno dojrzałe rozwiązania, które też czerpią z tych natywnych rozwiązań dla poszczególnych platform, w związku z czym może pojawić się taka ciągota do tego, żeby aplikacje mobilne robić tylko i wyłącznie w tych rozwiązaniach multiplatformowych, oszczędzając w domyśle czas, support itd.
Teraz pytanie, Adam, do Ciebie, kiedy lepiej jest wybrać Fluttera w naszym przypadku, a kiedy rozwiązania natywne?
Sądziłem, że zadasz takie pytanie, i nawet zrobiłem sobie lekki research. Powiem szczerze, że trudno znaleźć tę granicę, kiedy skorzystać z natywnego frameworka, a kiedy z Futtera. W mojej ocenie to zależy mocno od biznesowych założeń, bo np. jeżeli jesteśmy pewni, że nigdy nie użyjemy tej aplikacji na innej platformie, to oczywiście, że wtedy warto napisać to natywnie. Ale jeżeli wiemy, że aplikacja będzie i na androida, i na iOS-a, to tak naprawdę w 95% przypadków warto wykorzystać Fluttera, o ile nie korzystamy z bardzo dedykowanych bibliotek. Bo nawet jeżeli chcemy skorzystać z bluetooth, to Flutter oferuje taki package i tak naprawdę pod spodem łączymy się z natywnymi bibliotekami, bo takie rozwiązanie musi być dedykowane dla konkretnej platformy.
Nawet miałem taki case w pracy, kiedy mieliśmy aplikację na androida, i była też oczywiście na iOS-a, i przyszedł do ans case biznesowy, że fajnie, jakby ta aplikacja była na terminale płatnicze, które mają androida. Terminale płatnicze zazwyczaj kojarzą się z tym, że mają mało pamięci RAM i to nie są zoptymalizowane narzędzia, mają po prostu wykonywać płatności. Ale jest taka możliwość, że można wrzucać tam też inne aplikacje i Flutter po pewnych dostosowaniach aplikacji, powiem szczerze, że nawet debug działał trochę wolniej od tego, co jest na aplikacji mobilnej, ale jeżeli on był już w realisowej formie, to aplikacja działała bardzo płynnie; i korzystała z kamery, i korzystała z drukarki, i wszystko działało poprawnie, łączyła się z natywnymi bibliotekami androidowymi, np. od drukarki, i nie było żadnych problemów.
Myślę, że teraz warto byłoby rozpocząć od tworzenia czegoś. Nie będziemy w podcaście tworzyć kodu, ale może dla osób zainteresowanych warto byłoby powiedzieć, co potrzebujemy, żeby rozpocząć tworzenie naszej pierwszej aplikacji we Flutterze.
Żeby stworzyć pierwszą aplikację we Flutterze, potrzebujemy komputer. Jeżeli ktoś chce tworzyć od razu rozwiązania na iOS-a, to na pewno fajnie, jakby mieć MacBooka. Ostatnio nawet miałem taką rozmowę, ktoś do mnie przychodzi i mówi: Ja chciałbym odpalić tę naszą aplikację na iOS-ie, ale nie mogę. Pytam: A z czego korzystasz? A on mówi: z Ubuntu. Mówię, że do tego potrzebujesz MacBooka. Są jakieś obejścia, ale w 99% jest potrzebny MacBook, więc jeżeli multiplatformowość, to definitywnie MacBook. Z IDE ja np. najbardziej lubię Visual Studio Code, jest to darmowe narzędzie Microsoftu i są bardzo fajne wtyczki do Fluttera, podświetlające różne rzeczy. I oczywiście musimy sobie zasetupować całe środowisko, czyli najlepiej wejść na flutter.dev i tam przeczytać sobie całą instrukcję, co jest nam potrzebne, bo na pewno jest też nam potrzebne Android Studio (na androida), Xcode (na iOS-a) i tak naprawdę możemy startować, bo nic więcej już nie potrzebujemy.
Całkiem niewiele, spodziewałem się dużo dłuższej listy. Wspomniałeś, że te pierwsze technologie związane z multiplatformowością były np. po prostu embedowanym UYW, natomiast teraz to działa zupełnie na innych zasadach. Dlatego powiedz, proszę, o tych podstawowych elementach, na których Flutter działa, żebyśmy wiedzieli, w jaki sposób ta aplikacja jest nam wyświetlana.
Jest takie powiedzenie, że wszystko we Flutterze jest widżetem. To jest chyba wzięte kopiuj/wklej z Javy, że wszystko jest w Javie obiektem, jeśli się nie mylę. W większości przypadków faktycznie wszystko jest widżetem i jeżeli mówimy o stronie widoku w aplikacji, rozróżniamy trzy podstawowe widżety. Czasami ludzie rozróżniają tylko dwa. I to jest stateful widget, stateless widget i inherited widget.
Stateful widget jest wykorzystywany po to, że jeżeli chcemy np. stworzyć jakąś animację albo coś ma się zmienić na ekranie, to musimy trzymać stan tej zmiany, musimy mieć wielostanowość. Dlatego wykorzystujemy sobie tego stateful widgeta. Np. mamy jakiś loader i po 5 sekundach timera ma coś się stać.
Jeżeli mamy jakieś elementy ekranu, które są statyczne, czyli np. jakiś tekst bądź jakiś inny element na ekranie, który w ogóle nie zawiera animacji, to wystarczy, że wykorzystamy stateless widget. To powoduje, że on nie ma żadnego przeładowania, więc jest lżejszy dla aplikacji.
Inherited widget to jest taki widżet, że jeśli np. mamy go na samej górze aplikacji widżetów i pod nim są inne, mniejsze, to można przekazywać parametry z elementu do elementu, ale jeżeli byśmy tak robili, to byśmy mieli straszny korkociąg, bo z jednego lotu do drugiego, z drugiego do trzeciego, z trzeciego do czwartego, i tak naprawdę te elementy z tego w ogóle nie korzystają, bo np. z drugiego do piątego chcemy coś przekazać. Więc bez sensu przekazywać, dlatego mamy inherited widget. I załóżmy, ze mamy go na górze i w drugim elemencie coś chcemy przekazać do piątego, więc mamy funkcję, która pobiera tą daną, zapisuje i przekazujemy ją od razu do piątego, przez wywołanie tej funkcji przekazujemy ten element.
Więc to jest bardzo fajna rzecz do przekazywania elementów, ale wiadomo, że w bardziej skomplikowanych aplikacjach to jest oczywiście nadbudowane przez jakąś bibliotekę i to sobie działa pod spodem, ale my tak naprawdę używamy czegoś innego.
Jest takie powiedzenie, że wszystko we Flutterze jest widżetem. To jest chyba wzięte kopiuj/wklej z Javy, że wszystko jest w Javie obiektem, jeśli się nie mylę. W większości przypadków faktycznie wszystko jest widżetem i jeżeli mówimy o stronie widoku w aplikacji, rozróżniamy trzy podstawowe widżety. Czasami ludzie rozróżniają tylko dwa. I to jest stateful widget, stateless widget i inherited widget.
Dla mnie takim wyznacznikiem dojrzałości Fluttera i innych konkurencyjnych rozwiązań jest to, że możemy wykorzystać natywne funkcjonalności, jakie istnieją na iOS-ie i androidzie, to jest jedna z głównych mocy, jaka obecnie w tych rozwiązaniach technologicznych jest zaszyta.
Jak to wygląda we Flutterze? Czy to jest proste, trudne, czy da się te natywne funkcjonalności wywoływać? Jaki to jest poziom skomplikowania?
W mojej ocenie jest bardzo proste, bo jeżeli np. nie korzystamy z jakiejś biblioteki, tylko mamy taki case, że chcemy sobie stworzyć jeden ekran, który jest natywny w androidzie. Mamy coś takiego jak platform channels i to pomaga nam zintegrować kod natywny z Flutterem. Czyli możemy sobie napisać to np. w Kotlinie lub Swift i wywołać to sobie z poziomu Fluttera poprzez method channels. Dodatkowo jeżeli chcielibyśmy przekazać jakieś dane z Fluttera do tej funkcji, która jest w androidzie bądź w iOS-ie, bądź na innej platformie, to jest taka opcja wysłania tych danych i najlepiej to zrobić przez Jasona, że deserializujemy to do Stringa i wysyłamy. I oczywiście w drugą stronę też tak to działa.
Natomiast jest jeszcze druga opcja, w drugą stronę, np. natywna aplikaja chciałaby skorzystać z jakichś rzeczy, które są napisane we Flutterze. Flutter pozwala na to i to się nazywa add-to-app. Szczerze mówiąc, nigdy z tego nie korzystałem, więc nie mogę się uważać za eksperta, ale jest to warte do rozpatrzenia, jeżeli np. mamy swoją natywną aplikację, którą przez cały czas musimy utrzymywać, ale sobie ją przepisujemy powoli na Fluttera. I np. nowa funkcjonalność, którą napisaliśmy, już jest napisana we Flutterze, więc fajnie tę naszą funkcjonalność nową przekazać do tej natywnej aplikacji i ta funkcjonalność już może być, a my sobie ze spokojem możemy przepisywać tę aplikację na Fluttera.
A powiedz, jak to jest z testowaniem we Flutterze. Czy musimy się posiłkować jakimiś zewnętrznymi bibliotekami, czy możemy skorzystać z czegoś wbudowanego? Jak wygląda temat testów na tej platformie?
Testy są bardzo ciekawe, bo w mojej ocenie jest dość mało narzędzi do testowania we Flutterze w porównaniu np. do natywnych frameworków. We Flutterze w większości przypadków korzysta się z Flutterowych rozwiązań. Testy Flutterowe dzielimy na unit testy, widget testy i integration testy.
Unit test to testowanie logiki, która jest w aplikacji, poszczególnych funkcji, bardzo szybkie testy. Widget testy to są np. testy pojedynczego ekranu bądź pojedynczego elementu, który jest bardziej skomplikowany. Czyli nie testujemy całej aplikacji albo jakiegoś scenariusza, tylko jakiś jeden kawałek ekranu bądź cały ekran. A integration test to taki end-to-end test, czyli mamy jakiś scenariusz, framework Flutterowy przechodzi sobie po tych ekranach i sprawdza, czy się poprawnie wszystko renderuje. Są też inne frameworki, np. nawet testy end-to-end można pisać w Appium.
I ostatnie testy, o których mogę powiedzieć, to gold testy, czyli testy screenshotowe.
Jeśli mówimy o aplikacjach mobilnych czy webowych, to ostatnio mocno zyskuje na popularności temat dostępności. Czy ten temat jest jakoś adresowany przez Fluttera?
Tak. W komponentach Flutterowych dostępnych jako domyślne są te accessibility już wbudowane i można skorzystać z gotowych opcji, które są w domyślnych komponentach, że np. jeżeli chcemy, żeby ten przycisk nie był czytany jako przycisk, ale jako przycisk kosza, dodajemy daną opcję do tego domyślnego komponentu i ona jest i tam działa pod spodem i osoba niewidoma, która używa Talkbacka bądź Voiceovera, gdy przesuwa w specyficzny sposób dla niej po ekranie telefonu, automatycznie dowiaduje się, że to jest właśnie ten przycisk.
A jeżeli tworzymy swoje własne komponenty i np. któreś komponenty Fluttera nie mają tej opcji, to powinniśmy użyć widżetu, który się nazywa Semantix i wrapujemy sobie ten nasz komponent i automatycznie tam podajemy jakiś tekst bądź podajemy, co to jest za typ komponentu i automatycznie tak samo to działa, jak wcześniej tłumaczyłem, że TalkBack i Voiceover to odczytują.
Każdy, kto słyszał co nieco o Flutterze, to na pewno pierwsze co kojarzy, to aplikacje mobilne, ale wspomniałeś, że ta gałąź webowa jest tu też dość mocno dojrzała. Właśnie, jak bardzo jest dojrzała? Czy faktycznie strony z wykorzystaniem Fluttera są tworzone, czy ten framework ma szansę na to, żeby kiedyś zastąpić najbardzije rozpoznawalne na rynku chociażby React.js?
Myślę, że na ten moment na pewno nie, bo brakuje mu paru rzeczy, np. nie ma SEO albo jakby ktoś chciał stworzyć SEO, to musiałby się bardzo natrudzić, więc lepiej tak naprawdę wybrać coś innego.
To rozwiązanie jest na pewno dobre, jeżeli ta strona nie musi się pozycjonować albo np. część strony byłaby napisana w HTML, ale część aplikacji miałaby jakiegoś iframe’a i byśmy w niego wtłoczyli tę naszą aplikację Flutterową. Bo te animacje od Fluttera są bardzo fajne, ale tak naprawdę największym casem, gdzie Flutter wygrywa, to że ktoś stworzył aplikację mobilną i chciałby ją przerzucić na weba. To jest największy udział w rynku, a w przyszłości zobaczymy. Jeżeli Flutterowi udałoby się jakoś to SEO wrzucić do Fluttera, byłoby to naprawdę bardzo ciekawe.
Gdybyś mógł podać jakiś social proof w stylu: jakie firmy korzystają obecnie z Fluttera, to jakie marki, organizacje przychodzą Ci do głowy?
Na pewno nie będzie żadnym zaskoczeniem, że Google korzysta z Fluttera. Takie aplikacje jak Google Pay, Google Classroom, ale też np. bank Lubank z Brazylii, i on ma ponad 100 mln pobrań, więc widzimy, że Flutter pod względem security jest też bezpieczny, jeżeli banki chcą go wykorzystywać. Aplikacja BMW jest napisana we Flutterze, więc to też jest raczej dość krytyczna aplikacja, bo z poziomu aplikacji też można manipulować autem.
Ale też powiedziałbym, że i na polskim rynku są firmy, które stworzyły aplikacje we Flutterze, i są to dwa banki, np. Credit Agricole i ING Biznes.
To faktycznie, skoro takie rozpoznawalne i poważne instytucje jak banki wybierają tę technologię, to znaczy, że tam jakiś odpowiedni research za tym musiał być i musiano dojść do wniosku, że ta technologia jest stabilna i wystarczająca.
A skoro przy tym jesteśmy, to pewnie warto byłoby zadać pytanie, jak wygląda przyszłość Fluttera, jak Ty ją widzisz, w jakich kierunkach według Ciebie będzie się rozwijać?
Mam nadzieję, że w najlepszych. Dużo ludzi pisze, że Flutter nie ma dużego community, a mnie się wydaje, że ma, bo te biblioteki, które są najbardziej core’owe, są bardzo często update’owane, są wypuszczane nowe patche do tych bibliotek. Dodatkowo Google ma dużą kontrybucję w utrzymywaniu Fluttera, więc to jest z jednej strony fajne, z drugiej może być trochę ryzykowne, ponieważ Google lubi czasem opuszczać swoje dzieci i projekty i nawet ostatnio była sytuacja, że Google zwolnił pracowników, którzy pracują nad Flutterem, ale nie było wiadomo, z jakiego działu, i powiedzieli tym samym, że projekt cały czas idzie do przodu, jest utrzymanie, wyszła niedawno wersja 3.2.2, więc wydaje mi się, że powinniśmy być spokojni ze względu na to, że Flutter w mojej ocenie jest jednym z liderów na rynku multiplatformowości. Dodatkowo ma bardzo fajną integrację z Gemini Ai, który jest też od Google’a w zasadzie.
Dużo ludzi pisze, że Flutter nie ma dużego community, a mnie się wydaje, że ma, bo te biblioteki, które są najbardziej core’owe, są bardzo często update’owane, są wypuszczane nowe patche do tych bibliotek. Dodatkowo Google ma dużą kontrybucję w utrzymywaniu Fluttera, więc to jest z jednej strony fajne, z drugiej może być trochę ryzykowne, ponieważ Google lubi czasem opuszczać swoje dzieci i projekty i nawet ostatnio była sytuacja, że Google zwolnił pracowników, którzy pracują nad Flutterem, ale nie było wiadomo, z jakiego działu, i powiedzieli tym samym, że projekt cały czas idzie do przodu, jest utrzymanie, wyszła niedawno wersja 3.2.2, więc wydaje mi się, że powinniśmy być spokojni ze względu na to, że Flutter w mojej ocenie jest jednym z liderów na rynku multiplatformowości.
Ma to sens. Myślę, że ostatnie pytanie, które chciałbym Ci zadać, jest związane z tym, że pewnie co niektórzy ze słuchaczy zastanowią się, czy nie wejść w tę technologię, więc myślę, że warto byłoby jeszcze pokazać, jak wygląda rynek pracy dla programistów Fluttera.
To jest bardzo ciekawe pytanie. Osobiście sądzę, że jest trochę mniej ofert niż np. na React Native i bardzo dużo szuka się seniorów i midów, mało jest ofert dla juniorów. Mam nadzieję, że w przyszłości to się zmieni. Ostatnio z kimś rozmawiałem i nie wiem, czy to prawda, ale przez cały czas React Native jest bardziej popularny w Europie niż Flutter, ale np. w Azji bardziej popularny jest Flutter, a w Stanach wymiennie.
Świetnie. W dzisiejszej rozmowie Adam Stelmaszyk opowiadał o Flutterze, tak że wszystkie osoby zainteresowane tą technologią odsyłam do miejsc w sieci Adama. Właśnie, Adam, gdzie Cię można znaleźć, gdzie możemy odesłać osoby, które chciałyby się dowiedzieć coś więcej o tej technologii?
Zapraszam na mojego LinkedIna.
Oczywiście link będzie w notatce do odcinka. Adam, bardzo Ci dziękuję za poświęcony czas, za rozmowę. Dzięki wielkie.
Dzięki bardzo.
I to na tyle z tego, co przygotowałem dla Ciebie na dzisiaj. Więcej wartościowych treści znajdziesz we wcześniejszych odcinkach.
Masz pytania? Napisz do mnie na krzysztof@porozmawiajmyoit.pl lub przez social media.
Ja się nazywam Krzysztof Kempiński, a to był odcinek podcastu Porozmawiajmy o IT o Flutter.
Do usłyszenia w następnym odcinku!
Cześć!