Aplikacje mobilne - React Native
Lab. nr 1 - aplikacja startowa: kalkulator
-
- należy utworzyć repozytorium o nazwie
aplikacje-mobilne-dane-nr_grupy
, gdzie zamiast 'dane' wpisujemy nazwisko lub nr indeksu; będzie ono podstawą zaliczenia przedmiotu, - - w ww. repozytorium umieszczamy kolejne zrealizowane zadania w osobnych folderach i z osobnymi plikami README.md,
- - dokumentacja startowa dla React Native,
- - dokumentacja startowa Android Developers,
- - dokumentacja startowa dla Xamarin,
-
- poniższe zagadnienia powinny zostać zrealizowane:
- dla wybranej technologii: instalacja pakietów i tworzenie projektu, ustawienia projektu, korzystanie z serwera deweloperskiego,
- wykorzystanie podstawowych komponentów i API dla wybranej technologii, np. dla React Native,
- zapoznanie z komponentami dla wybranej technologii i ich użycie, np. dla React Native,
- projekt prostego kalkulatora wraz z opisem, przykłady tutaj.
- - w każdym z zadań można użyć Expo lub React Native CLI lub create-react-native-app,
- - należy opisać w pliku README.md co zostało zrealizowane, za co odpowiada wybrany fragment kodu (komponent, funkcja lub klasa) oraz dołączyć zrzuty aplikacji (lub zdjęcia ekranu telefonu, jeśli nie uda się zrobić standardowego zrzutu).
Lab. nr 2 - responsywne layouty + nawigacja
Start- - zadanie bazuje na rozdziałach nr 15 i 16 literatury bazowej,
-
- należy zapoznać się z:
- koncepcją Flexboxa
- dokumentacją React Native na temat Flexboxa,
- Platform API dla React Native,
- międzyplatformowymi komponentami dla React Native.
-
- poniższe zagadnienia powinny zostać zrealizowane:
- należy utworzyć 3 ekrany za pomocą react-navigation,
- do przechodzenia między ekranami można użyć stack-navigator,
- na każdym ekranie powinny się znaleźć przyciski pozwalające przejść do dwóch pozostałych ekranów,
- każdy ekran powinien byc "ostylowany" w innym stylu niż pozostałe ekrany, z wykorzystaniem Flexboxa (m.in. poprzez moduły StyleSheet i Platform),
-
style należy utworzyć w pliku
styles.js
i zaimportować w odpowiednim miejscu, - należy umieścić na ww. ekranach informacje, czym jest spread operator, czym są rest parameters oraz do czego służy 'hook' useState,
- ➕ za modyfikacje layoutów (tak, by były inne niż te w przykładach).
Lab. nr 3 - renderowanie listy danych + obsługa progresu Start
- - zadanie bazuje na rozdziałach nr 17 i 18 literatury bazowej,
-
- wskazane zapoznanie się (odświeżenie wiedzy) z:
- funkcjami strzałkowymi - głównie przykłady z map(),
- metodą map() dla tablic,
- podobnie jak wyżej,
- zastosowaniem iteratorów i generatorów,
- ze strukturami danych Map() i Set(),
- dokumentacją FlatList w RN,
- dokumentacją ActivityIndicator w RN,
- przykładami użycia funkcji Math.random(),
- przykładami ww. zastosowań JS.
-
- poniższe zagadnienia powinny zostać zrealizowane:
- wskazane użycie kodu z lab. nr 2, po to żeby mieć kilka ekranów 🌞
- na pierwszym ekranie należy zaimplementować sortowanie i filtrowanie danych; danymi niech będzie 100 pseudolosowych liczb całkowitych z zakresu (0, 1000),
- na drugim ekranie należy zaimplementować "leniwe ładowanie" (lazy loading) listy danych; danymi niech będą pseudolosowe litery,
- na ekranach od nr 3 do nr 5 należy zaimplementować progres krokowy (step progress); na kolejnych ww. ekranach powinny znaleźć się elementy ActivityIndicator, ostylowane inaczej na każdym z ekranów 3-5,
- ➕ za modyfikacje kodu (tak, by były inne niż te w przykładach).
Lab. nr 4 - obsługa danych wprowadzanych przez użytkownika + modale Start
- - zadanie bazuje na rozdziałach nr 20 i 21 literatury bazowej,
-
- wskazane zapoznanie się (odświeżenie wiedzy) z:
- komponentem TextInput w React Native,
- obsługą komponentu TextInput w React Native,
- obsługą komponentu DateTimePicker w React Native,
- obsługą komponentu DatePicker w React Native (nie działa w Expo!),
- obsługą komponentu Picker w React Native,
- obsługą komponentu Switch w React Native,
- obsługą komponentu Modal w React Native,
- obsługą komponentu Alert w React Native,
- dokumentacją ToastAndroid API w RN.
-
- poniższe zagadnienia powinny zostać zrealizowane:
- wskazane użycie kodu z lab. nr 2, po to żeby mieć kilka ekranów 🌞
- na pierwszym ekranie należy zaimplementować "przegląd" możliwości komponentu 'TextInput'; należy wykorzystać odpowiednie propsy i/lub stan danego komponentu.
- na drugim ekranie należy zaimplementować obsługę co najmniej dwóch komponentów 'Select'; niech zmiana w jednym selektorze powoduje zmiany w pozostałych selektorach; można pokusić się o pobieranie danych do selektorów z wybranych API (np. z ćwiczeń dotyczących asynchronicznego Javascript).
- na trzecim ekranie należy zaimplementować obsługę przełącznika 'Switch', tak aby po zmianie jego położenia pojawiał się modal z pseudolosową liczbą.
- na czwartym ekranie należy zaimplementować wybór daty i czasu; po wciśnięciu przycisku 'Wyświetl termin' powinien pojawić się alert z wybranymi parametrami czasowymi.
- na piątym ekranie należy zaimplementować "aktywny" modal + pasywne powiadomienia za pomocą ToastAndroid (lub jego odpowiednika w iOS); można wykorzystać funkcję setTimeout() na czas trwania obietnicy (Promise) i w tym czasie powinien być aktywny modal; ww. powiadomienie powinno się pojawić po rozwiązaniu obietnicy (resolve of Promise object).
- ➕ za modyfikacje kodu (tak, by były inne niż te w przykładach).
Lab. nr 5 - obsługa gestów użytkownika Start
- - zadanie bazuje na rozdziale nr 22 literatury bazowej,
-
- wskazane zapoznanie się (odświeżenie wiedzy) z:
- Gesture Responder System w React Native,
- obsługą komponentu ScrollView w React Native,
- metodą fill(),
- obsługą komponentu TouchableOpacity w React Native,
- obsługą komponentu Pressable w React Native,
- obsługą komponentu TouchableHighlight w React Native,
- obsługą komponentu Swipeable w React Native,
- jak wyżej, ale z innego pakietu.
-
- poniższe zagadnienia powinny zostać zrealizowane:
- wskazane użycie kodu z lab. nr 2, po to żeby mieć kilka ekranów 🌞
- na pierwszym i na drugim ekranie należy zaimplementować użycie komponentu ScrollView, na każdym z nich powinnny być różne style (Flexbox) oraz widoczny pasek przewijania (scrollbar)
- na trzecim ekranie należy zaimplementować użycie komponentów TouchableOpacity i TouchableHighlight; na ➕ można pokusić się o użycie komponentu WebView po naciśnięciu przycisku,
- na czwartym ekranie należy zaimplementować obsługę przesunięć palcem (komponent Swipeable);
- ➕ za modyfikacje kodu (tak, by były inne niż te w przykładach) i za dodatkowe ekrany (np. druga wersja z komponentem Swipeable lub użycie komponentu Pressable).
Lab. nr 6 - obsługa obrazów + tryb offline Start
- - zadanie bazuje na rozdziałach nr 23 i 24 literatury bazowej,
-
- wskazane zapoznanie się (odświeżenie wiedzy) z:
- obsługą komponentu Image w React Native,
- obsługą komponentu NetInfo w React Native,
- obsługą komponentu Slider w React Native,
- zastosowaniem ikon w React Native,
- zastosowaniem ikon w Expo,
- obsługą komponentu/modułu AsyncStorage w React Native.
-
- poniższe zagadnienia powinny zostać zrealizowane:
- wskazane użycie kodu z lab. nr 2, po to żeby mieć kilka ekranów 🌞
- na pierwszym ekranie należy zaimplementować ładowanie dwóch obrazków (komponent Image) - pierwszy za pomocą właściwości 'uri', a drugi z użyciem metody require(),
- na drugim ekranie należy zaimplementować zmianę rozmiaru ładowanego obrazka za pomocą komponentu Slider, (można też na pierwszym ekranie załadować jeden obrazek ze sliderem i na drugim ekranie podobnie),
- na trzecim ekranie należy zaimplementować 'leniwe' ładowanie obrazka oraz renderowanie wybranego zestawu ikon,
- na kolejnym ekranie należy zaimplementować detekcję łączności z siecią i wyświetlić odpowiednią informację,
- na kolejnym ekranie należy zaimplementować obsługę zapisu danych aplikacji za pomocą AsyncStorage,
- na ostatnim ekranie należy zaimplementować obsługę synchronizacji danych aplikacji (np. stanu wybranych elementów), w przypadkach łączności z siecią i jej braku,
- ➕ za modyfikacje kodu (tak, by były inne niż te w przykładach).
Lab. nr 7 - wykorzystanie bazy danych w aplikacji mobilnej Start
- - zadanie bazuje na nw. linkach z dokumentacją,
-
- wskazane zapoznanie się (odświeżenie wiedzy) z:
- dostęp do bazy SQLite z wykorzystaniem Expo,
- użycie modułu react-native-sqlite-storage dla bazy SQLite tworzonej w momencie uruchomienia aplikacji,
- przykłady użycia zapytań do bazy SQLite w aplikacji React Native,
- użycie modułu react-native-sqlite-storage dla istniejącej bazy SQLite,
- informacje nt. lokalnych baz danych w React Native,
- aplikacja do obsługi bazy SQLite,
- dokumentacją mobilnej baza danych Realm, oferującej większe możliwości niż SQLite,
- przykład (na repo przedmiotowym) z bazą SQLite tworzoną w momencie uruchomienia ,
- użycie bazy Realm w aplikacji z React Native,
- dokumentacja modułu react-native-sqlite-storage.
-
- poniższe zagadnienia powinny zostać zrealizowane:
- możliwe użycie kodu z lab. nr 2, po to żeby mieć kilka ekranów 🌞
- należy zaimplementować użycie bazy danych (SQLite lub innej) w dwóch wariantach, opisanych poniżej,
- w pierwszym wariancie tworzymy bazę w momencie uruchomienia aplikacji, a w drugim korzystamy z bazy danych już istniejącej
- można ww. warianty zrealizować w jednej aplikacji na osobnych ekranach lub stworzyć dwie osobne aplikacje,
- dane w bazie danych zależą od twórcy aplikacji,
- ➕ za modyfikacje kodu (tak, by były inne niż te w przykładach), za użycie bazy danych innej niż SQLite.
Lab. nr 8 - obsługa map + geolokacja Start
- - (marzec 2021 r.) mogą wystąpić problemy z uruchomieniem projektów React Native, wykorzystujących geolokację!!!
- - zadanie bazuje na rozdziale nr 19 literatury bazowej i wybranej dokumentacji (linki poniżej),
-
- wskazane zapoznanie się (odświeżenie wiedzy) z:
- obsługą geolokacji w React Native CLI (artykuł ze stycznia 2021, sugerujący konkretne pakiety do geolokacji).
- dokumentacją pakietu react-native-geolocation-service,
- dokumentacją pakietu react-native-location,
- obsługą komponentu MapView w Expo,
- dokumentacją pakietu react-native-maps,
-
- poniższe zagadnienia powinny zostać zrealizowane:
- wskazane użycie kodu z lab. nr 2, po to żeby mieć kilka ekranów 🌞
- na kolejnych ekranach należy zaimplementować obsługę geolokacji w React Native,
- z powodu braku kompatybilności między odpowiednimi wersjami pakietów (m.in. do geolokacji) wybór zagadnień do praktycznego opracowania (dotyczących geolokacji), pozostawiam autorowi 🌻,
- ➕ za modyfikacje kodu (tak, by były inne niż te w przykładach).
Zasady zaliczenia przedmiotu Start
- Dowolny język do realizacji zadań, tam gdzie da sie zastosować inne niż wskazane w czasie zajęć. Preferowany React Native, ale można używać innych technlogii i języków (np. Java, Ionic, Xamarin itp. itd.). Inne opcje po konsultacji z prowadzącym.
-
Zadanie należy zrealizować do kolejnych zajęć - max. 5 punktów,
- do tygodnia opóźnienia w realizacji zadania - max. 3 punkty,
- przekroczenie obu terminów - max. 1 punkt,
- za wysyłanie linków do cudzych repozytoriów - max. 1 punkt,
- ww. daty wskazane są w pliku z ocenami. - Zrealizowane zadanie należy umieścić na portalu GitHub (lub BitBucket) i wysłać link do prowadzącego (Slack).
- Zadanie należy zaprezentować osobiście prowadzącemu na laboratorium (zdalnie popre udostępnianie ekranu).
- Pierwsze laboratorium jest "rozruchowe" - można oddawać zadania, ale nie trzeba.
- Zadania dla React Native bazują na omawianej na zajęciach literaturze bazowej.
- Brak odpowiedniej liczby punktów spowoduje konieczność stworzenia nowych projektów.
- Do każdego zadania dobrze jest dodać pliki (dodać do repozytorium) zawierające zrzuty działającej aplikacji. Przyspieszy to proces sprawdzania.
- Brak znajomości utworzonej aplikacji powoduje obniżenie oceny.