Mobilne Aplikacje z React
5 godz. 51 min · React Native · Full-stack i Programowanie
Piotr SzacińskiZarówno iOS jak i Android posiadają swoje natywne SDK, do obsługi którego musimy poznać nowe języki - Swift czy Kotlin, o Objective-C czy Javie nie wspominając. Z kolei React Native jest do tego świetną alternatywą, która pozwala tworzyć jeden kod na obie platformy. Dodatkowo - bazuje na najpopularniejszym frameworku webowym, co znacząco zmniejsza próg wejścia.
Tak samo jak "czysty" React, React Native opiera się na komponentach. Poznasz ich specyfikę i nauczysz się poprawnie budować UI aplikacji. Zrozumiesz też jak najwydajniej zarządzać skomplikowanym layoutem, takim jak długie listy, i jak to wszystko łatwo stylować.
Animacje to nie tylko efekty przyjemne dla oka - to przede wszystkim dobry UX, który pozwala użytkownikowi odnaleźć się w aplikacji i zrozumieć jej mechanikę. Podczas kursu poznasz wszystkie podstawowe metody i koncepcje tworzenia animacji oraz poznasz sposoby optymalizacji ich działania. Dodatkowo omówimy prawidłowe podejście do dużo bardziej skomplikowanych interaktywnych animacji, przedstawimy ciekawe biblioteki oraz best-practices.
Praktycznie każda aplikacja, niezależnie od tego, czy web, czy mobile, składa się z wielu widoków i ekranów. Zarządzanie ścieżkami, jakimi użytkownik może się poruszać, to jedna z najważniejszych rzeczy - a w tym kursie dowiesz się jakich narzędzi należy używać i jak łatwo obsługiwać zagnieżdżone ekrany.
Niewątpliwym atutem aplikacji jest to, że może praktycznie bez ograniczeń przechowywać content w urządzeniu telefonu, a przez to - dostarczać treści niezależnie od dostępności internetu. Omówimy różne koncepcje zapisywania danych oraz poznamy metody i narzędzia do ich wdrażania.
Przybliżymy ci proces wypuszczania aplikacji "w świat" oraz przedstawimy narzędzia, z których sam autor korzysta do ułatwienia tego procesu.
Kurs jest dla każdego kto zna podstawy JavaScript oraz React i chciałby się rozwijać i tworzyć mega ciekawe projekty, które mogą używać aparatu czy sensorów smartfona.
0.62.2+
No dobra w poprzedniej lekcji wykorzystaliśmy sobie komponent TextInput
ze wcześniejszych buttony jak raz to co zostało nam na koniec żeby to jakoś miało
ręce i nogi to troszeczkę fajnie byłoby to ostylować i dodać troche więcej logiki
wiec co zrobimy na końcu przez wszystkim w tej chwili ten button upgrade za wiele nie robi
więc fajnie byłoby żeby coś jednak robił wiec co
możemy zrobić to dodamy sobie dodamy sobie jakiś level
damy opcje ustawienia tego levelu useState
ale zaczynamy powiedzmy od levelu pierwszego zrobimy
sobie jakiś powiedzmy nazwijmy to indykator tego
zrobimy sobie LevelIndcator styled
View i to niech będzie
miało jakiś tam fajny kolor na przykład czerwony
niech ma powiedzmy 20 pixeli szerokości
20 pixeli wysokości border-radius
niech ma 10 pixeli i
do tego chciałbym żeby to nachodziło żeby
to gdzieś tutaj było tak przy naszym zdjęciu profilowym żeby było wiadomo jaki mamy level
czyli będzie top 0 right 0 zobaczmy
jak to wygląda czyli wejdziemy sobie w naszego ProfileImage
i dodamy coś takiego fajnie
tylko no oczywiście to się absolut nam się odnosi w tym momencie do naszego kontenera
a chciałbym żeby to się odnosiło do naszego tutaj powiedzmy
subkontenera w związku z tym no musimy sobie opakować
nasz profil w jakiś kontener
nazwiemy to ProfileImageContainer albo właściwie Wrapper
jakby bo powiedzmy że aż tak wiele rzeczy to on nie
nie opakowuje a i to właściwie chyba
nie musi mieć żadnych styli ważne żeby po prostu jakiś był
zobaczmy super
dokładnie o to nam chodziło no ale chciałbym żeby ten level się jakoś
tam wyświetlał więc muślimy sobie jeszcze dodać const
LevelIndicatorText to się równa
wystylowany tekst i
tutaj kolor niech to będzie white font-size
nie wiem 12 pixeli i a ustawmy
sobie text-align center
i tu będzie nasz level fajnie jest level no
tylko teraz ten level żeby nam się zwiększał byłoby super czyli ustawimy sobie
setLevel level plus 1 upgrade upgrade upgrade super
czyli mamy nasz upgrade'owanie naszego levelu no to może nie jest idealnie wyśrodkowane
ale to już nas aż tak bardzo nie boli drugą rzeczą którą chciałbym tutaj dodać to żeby ten przycisk
był tutaj z boku a nie tak jeden pod drugim czyli
na pewno znowu będziemy potrzebowali sobie to opakować w jakiś kontener czyli nazwiemy
to sobie const
setDescription
Wrapper to jest z wielkiej litery bo to jest komponent
View dobra zróbmy
na razie tyle okej
i to na razie nam nic nie zmieni poza tym że no widać że się
dopasowało to do szerokości tego tekstu do szerokości buttonu ale
jakbym do dłuższego dziecka więc jak będę wpisać tekst to to się po prostu bedzie tak dopasować nie
do końca o to nam chodziło więc musimy jakoś to pozamieniać
i teraz generalnie jeśli chodzi o wszystkie kontenery pozycjonowanie
elementów w kontenerach w React Native to służy do tego Flexbox
ten Flexbox jest praktycznie identyczny z tym który jest
dostępny w web-ie w przeglądarce
więc sobie ustawmy na nim display flex zróbmy
sobie flex-direction na row no
i już powinno być trochę lepiej ale
nie tu tutaj popatrzmy
okej jakoś tak to w miarę wygląda natomiast dalej nie jest kolorowo z
tego względu że z tego
względu że są jeszcze złe rozmiary tu
sobie to przynieśmy i tak DescriptionInput
widzicie ma 100% no to niefajnie bo widzicie no
wyjeżdża nam to wszystko i rozjeżdża cały widok więc usuńmy sobie to niech on się
dopasowuje do wysokości szerokości przepraszam ale nasz DescriptionButton
niech ma na sztywno na przykład 80 pixeli 80 no nie
pixeli do końca okej i to jest spoko tylko
widzimy że tutaj jeszcze ten nasz input ma jakiś margin usuwamy go
fajnie i jeszcze
tutaj jest margin którego byśmy nie chcieli okej zaczyna to wyglądać natomiast no problem jest taki
że dalej ten rozmiar jest nie tak chcielibyśmy żeby ten tekst był wypełniał
nam pełną przestrzeń i dlatego znowu sobie użyjemy Flexa jeśli tutaj podamy
flex 1 to nam się pięknie to wszystko wypozycjonowało
i możemy to już wstawić z
tą różnicą że zmienię
mu ten tekst na po prostu set no jakoś tak po co ten button ma
być taki długi i wyjustujemy
go sobie troszeczkę align content aj przepraszam justify-content center
align-items center
upgrade
okej no bo to oczywiście nie to robiłem tylko
chciałem to zrobić świetnie dokładnie o to mi chodziło piszemy piszemy pyk
tutaj jeszcze można by dodać jakiś margin na górze żeby
to tak na siebie nie nachodziło super mamy
to co chcieliśmy jest okej sprawdźmy
czy wszystko ładnie tej hula fantastycznie jest
okej tylko jest jedna rzecz uważan że ten tutaj input on
powinien być na samym dole tutaj przyklejony a nie gdzieś tak pod ten przycisk upgrade bo jakoś
to dziwnie wygląda więc jak to zrobimy mamy
sobie go opakowanego w Description natomiast to wszystko co wyżej też fajnie
byłoby opakować jako jakiś na przykład Header Wrapper czy Content Wrapper
tak to możemy nazwać no nazwijmy to po prostu Content ja już takiej uwagi w tym momencie
nie przyjmuję do nazewnictwa natomiast generalnie jednak pamiętajmy o tym żeby starać się żeby
faktycznie te nazwy tych komponentów miały logiczny
sens względem właśnie naszego dokumentu naszego widoku to
będzie oczywiście View opakujemy sobie
tutaj wszystko w ten nasz Content
zobaczmy co się stało nic się nie stało
no i teraz tak naszemu naszemu
DescriptionButtonowi Wrapperowi ustawmy na sztywno wysokość
na przykład niech to będzie te 50 pixeli stąd wywalmy
okej ustawmy
w naszym kontenerze głównym display flex
a naszemu Wrapperowi Contentowi ustawmy
flex 1 i to powoduje że no mniej więcej
to chciałem to znaczy że to się przykleiło do dołu nasz Contenent gdzieś
jest tutaj przy czym w samym Contencie chciałbym jeszcze zapożyczyć
sobie to które tutaj już nie jest potrzebne i zobaczmy jak to teraz
wygląda dokładnie dokładnie o coś takiego o co walczyłem
świetnie zobaczmy jak to działa coś tam coś tam coś tam coś tam coś tam
set jest fajnie mam
tylko jedną uwagę tego całego kodu zauważcie że zaczyna nam się robić tutaj niezły
niezły bajzel bo mamy całkiem niemały niemałą
strukturę tego profilu i tych styli jest całkiem sporo i generalnie zasada
jest taka o której chciałbym żebyście pamietali żeby te style style powinny być wyeksportowane do innego
pliku czyli powinniśmy mieć dokładnie dokument
plik ProfileScreen styled js w którym będą te wszystkie style w którym
i w tym dokumencie będzie się po prostu importować dzieki temu będziecie mieć ładny podział na wasz
komponent w którym jest po prostu struktura i te style ja
teraz nie będę tego robić z tego względu że bardzo tutaj rzeczy jeszcze będę bardzo wiele rzeczy będę zmieniać
i dopasowywać i testować wiec już zostawmy tak jak jest natomiast no chciałbym żebyście
to zapamiętali i już praktycznie na tym moglibyśmy zakończyć bo
to wygląda fajnie a zobaczmy jak to wygląda na iOS-ie no właśnie zobaczcie że na iOS-ie
nasza klawiatura fajnie że wyjeżdża tak ładnie
natomiast przykrywa nam nasz tekst i okej to działa ustawia
nam się ten opis natomiast no nie widzimy co wpisujemy na androidzie jest okej a
to wynika trochę z tego to jest jedna z różnic właśnie między platformami czyli
w jaki sposób klawiatura wpływa nam na nasz content w androidzie domyślnie cały
nasz content jest podnoszony do elementu w którym coś wpisujemy czyli jeśli tutaj mamy
właśnie text input i w nim jakby urzędujemy to klawiatura zostanie
do niego dociągnięta cały content zostanie podpięty w górę czyli domyślnie tak jakbyśmy chcieli w iOS-ie
natomiast mamy tutaj pełną dowolność możemy to obsłużyć tak jak chcemy ale domyślnie
nie jest to w żaden sposób obsłużone to co możemy z tym zrobić to
dodać dodatkowy Wrapper na to wszystko
który się nazywa KeyboardAvoidingView
i ten KeyboardAvoidingView
ma pewien parametr behavior
a oczywiście musimy zaimportować sobie ten nasz komponent bo inaczej go nie widzimy on
jest w React Native i ma nasz parametr
behavior który przyjmuje kilka opcji jeśli ustawimy sobie opcję padding
to spowoduje że w momencie jak wyjeżdża klawiatura do tego naszego widoku
dostanie zostanie dołączony padding w locie zobaczmy jak to wygląda super tak
wygląda to fajnie widzimy tutaj tylko jeden problem że nasz
tekst dziwnie się zachowuje to wynika z tego że jeśli ten tekst nieopakowany
w żaden własnie te dwa teksty są nie opakowane w żaden kontener
to tak sie po prostu dzieje więc najłatwiej po prostu zrobić tak i
w tej chwili wszystko będzie ładnie chodziło zauważyłem przy okazji jeszcze jedną rzecz to
znaczy że jeśli kliknę tutaj set to nam się ustawi pusty description a bym
nie chciał żebyś się dało ustawić pustego description'a więc zrobimy sobie na szybko taki mały tutaj check
czyli jeśli currentText.length jest
mniejszy od 3 to return i dziękujemy
państwu zobaczmy czy to działa okej dobra
okej czyli działa super i chyba na tym moglibyśmy zakończyć zobaczmy
natomiast jak to wygląda w androidzie no właśnie udało
nam się rozwiązać problem na iOS-ie ale udało nam się również zepsuć to na androidzie no
i teraz jak to rozwiązać no najłatwiej byłoby
po prostu usunąć nasz KeyboardAvoidingView tak
ewentualnie możemy spróbować stawić inny parametr spróbujmy ustawić parametr height
co to robi no prawie prawie prawie myślę że
gdybyśmy trochę podziałali z jakimiś marginesami to może nawet udałoby nam się to osiągnąć spróbujmy
trzeci parametr position no
i tutaj jeśli zapisałem plik nie zapisałem jest refreshowanie no
tutaj jest jeszcze gorzej czyli najbliżej jesteśmy tutaj tego parametru height ale
tak naprawdę to najchętniej w ogóle pozbyłbym się tego
na androidzie natomiast na iOS-ie bym to zostawił i teraz jak to
zrobić no i właśnie dochodzimy tutaj do momentu w którym musimy coś
inaczej napisać na jednej platformie a inaczej na drugiej i powiemy sobie o tym w następnym rozdziale