Flutter SK/CZ – #1.1 – Prvá aplikácia – Jednoduché WebView

Úvod

Vitajte na stránke Himdeve development, kde pre Vás pripravujeme tie najlepšie tutoriály, ktoré Vám uľahčia a zefektívnia vývoj mobilných aplikácií.

Motivácia

Flutter umožňuje vytvoriť aplikácie v jednom jazyku (Dart) a vygenerovat ich pre Android ako aj iOS prostredie. Tieto aplikácie sú veľmi rýchle v porovnaní s iným frameworkami a z vizuálneho hladiska neskutočne pekné. Je to naozaj framework na tvorbu štýlových cool aplikácií, pretože obsahuje sadu komponentov, ktoré sú priamo k dispozícií a umožňujú jednoduché a pritom nesmierne efektívne použitie. Flutter, takisto ako aj Dart, sú priamo zastrešované GOOGLom. Flutter umožňuje aj tvorbu web a desktopových aplikácií, avšak naše zameranie je momentálne na mobilný vývoj.

Cieľ

V tomto prvom diele našej Flutter SK/CZ série tutoriálov sa zameriame na vytvorenie WebView akejkoľvek webovej stránky dostupnej na internete a spustíme (embeddneme) ju v našej vlastnej aplikácii.

Upozornenie

V tejto prvej aplikácii, použijeme čo najjednoduchší spôsob ako vytvoriť WebView aplikáciu. To znamená, že neočakávajte žiadne extra pokročilé programátorské techniky. Aplikáciu však v ďalších častiach budeme ďalej upravovať a pridávať ďalšiu zaujímavú funkcionalitu.

Požiadavky

Tento tutoriál je postavený spôsobom, že ráta aspoň s určitou znalosťou objektovo orientovaného programovania. Taktiež sa tu nepreberá základná syntax jazyka Dart.

Postup

V tomto tutoriále budeme používať VS Code (Visual Studio Code).

Po spustení VS Code, spustíme terminal (WIN: ctrl + shift + y / MAC: cmd + shift + y) a napíšeme nasledovný príkaz, ktorý nám vytvorí projekt s definovaným package name a názvom projektu. Tento prikaz striktne obmedzuje používať malé písmená a vyhnúť sa medzeriam. Takisto rovno vytvára pre Android, projekt v Kotline a pre iOS, projekt vo Swifte.

Copy to Clipboard

Následne otvoríme daný projekt.

Závislosti (dependencies)

pubspec.yaml súbor slúži na definovanie závislostí, dependencies, ktoré potrebujeme pre náš projekt. 

V tomto prípade potrebujeme závislosti od WebView packagu:

Copy to Clipboard

V tomto čase je posledná verzia WebView packagu 0.3.18+1

  • +1 -> znamená zmenu, od predchádzajúcej verzie, ktorá neovplyvňuje Public API.
  • ^0.3.18 -> znamená 0.3.x verziu, kde x >= 18. Keby bola verzia definovaná napevno: ‘0.3.18’, tak funguje len táto konkrétna verzia.
  • Čo sa týka verzií, ktoré sú v pre-release stave, tak tie sú ignorované v prípade zavolania príkazu ‘flutter packages get’, ktorý inštaluje dané packages. V prípade, že ich nechceme ignorovať, ale použiť, tak sa na konci pridáva zmanienko ‘-’ a ich nazov. Napríklad: ^1.2.3-beta.

Ako už bolo spomenuté, pre inštaláciu daných závislostí je potrebné napísať do terminálu prikaz ‘flutter packages get’ alebo v našom prípade len uložiť daný súbor (WIN: ctrl + s / MAC: cmd + s).

Cesta k pubspec.yaml súboru: project_name -> pubspec.yaml

Štruktúra projetu

Ďalej nás budú zaujímať 3 priečinky: lib, android, ios.

flutter sk #1.1 project structure

Obzvlášť priečinok ‘lib’, v ktorom sa vytvára celý náš Flutter projekt.

V priečinku ‘android’ je vygenerovaná Android verzia nášho Flutter projektu a v priečinku ‘ios’ zase iOS verzia.

 

Niekedy budeme musieť upravovať jednotlivé vygenerované verzie pre Android alebo pre iOS aby správne bežali na svojich platformách. 

V tomto prípade, čo sa týka WebView, tak je potrebné pridať nasledovné nastavenia.

Android nastavenia

Copy to Clipboard
  • Pre Android, aby bolo možné otvoriť webové stránky vo WebView, ktoré nemajú SSL certifikát, čiže nemajú šifrovaný hypertextový prenosový protokol HTTPS, ale prenášajú dáta len jednoduchou textovou komunikáciou cez HTTP protokol, je nutné nastaviť cleartext prenos na ‘true’ v AndroidManifest.xml od verzie Androidu 9 (API level 28).
  • Cesta k AndroidManifest.xml súboru: project_name -> android -> app -> src -> main -> AndroidManifest.xml

iOS nastavenia

Copy to Clipboard
  • Aby bolo možné spustiť WebView na iOS platforme, je potrebné v Info.plist povolit embedded views, v tomto prípade WebViews.
  • Cesta k Info.plist súboru: project_name -> ios -> Runner -> Info.plist
Copy to Clipboard
  • Čo sa týka iOS, tak takisto je potrebné povoliť spustenie stránok vo WebView, ktoré nemajú SSL certifikát a to pridaním ‘NSAppTransportSecurity’ klúča do Info.plist.

Avšak moc neodporúčam pridať tieto nastavenia, obzvlášť pre iOS, pretože ak nastavíte hodnotu kľúča na TRUE, musíte uviesť odôvodnenie počas kontroly nahrávania aplikácie do App Store. Čím sa samozrejme skomplikuje dodanie aplikácie pre Vášho zákazníka.

main.dart

Defaultne je v ‘lib’ Flutter priečinku súbor ‘main.dart’. Tento súbor je našim vstupným súborom do aplikácie a metóda ‘void main()’ je našim vstupným bodom (entry-point) Flutter aplikácie.

Kód vyzerá nasledovne:

Copy to Clipboard

Ahoj Svet kód by vyzeral nasledovne:

Copy to Clipboard

V tomto prípade, čo chceme spraviť, je spustiť aplikáciu. Na to slúži metóda ‘runApp’. Ako parameter má widget.

V tomto bode je dobré si povedať, že všetko UI vo Flutteri je widget. Nech vytvoríte akýkoľvek komponent, tak je to vlastne widget. A každý widget je samozrejme reprezentácia nejakej triedy (classy) v jazyku Dart. V skutočnosti je každý widget vytvorený použítím Flutter renderovacieho stromu, čo je určitý low-level vykresľovací systém založený na strome objektov, ktoré sú zdedené od RenderObject. Avšak väčšina programátorov nebude priamo interagovať s týmto renderovacím stromom, namiesto toho budú používať widgety, ktoré sú vytvorené pomocou tohto renderovacieho stromu. 

V tomto prípade, našim prvým widgetom je StatelessWidget, ktorý má vstavanú metódu ‘build’, ktorá vracia strom alebo hierarchiu ďalších widgetov

Flutter funguje skôr ako herný engine. Používateľské rozhranie je zostavené a vykreslené na plátno (canvas Skia) podľa toho, ako sa mení pomocou metódy každého widgetu ‘build()’. Flutter aktualizuje používateľské rozhranie rýchlosťou 60 snímok / s (60 fps) alebo 120 fps na zariadeniach, ktoré sú schopné sa aktualizovať frekvenciou 120 Hz.

V našom prípade ideme najskôr vykresliť ‘MaterialApp’ widget. Material je vizuálny dizajnový jazyk, ktorý je štandardom pre mobily a web. Flutter ponúka bohatú sadu widgetov pre material dizajn. Samozrejme je možné použiť aj ‘CupertinoApp’ widget, ktorý reprezentuje Cupertino dizajn iOS aplikácií a takisto je možné aj kombinovat oba tieto dizajny dokopy.

Ďalej zadefinujeme názov aplikácie, nastavíme tému a zadefinujeme atribút ‘home’, ktorý reprezentuje další widget v tejto hierarchii widgetov. V našom prípade ‘ShopPage’.

shop_page.dart

flutter sk #1.1 shop page

Copy to Clipboard

Táto trieda, alebo tento widget ‘ShopPage’ má konštruktor a build metódu, ktorá vracia další widget a to je WebView.

WebView

WebView widget sme importovali z dependency packagu ‘webview_flutter’, ktorý sme definovali v pubspec.yaml súbore.

WebView má niekoľko atribútov, my sa však v tomto prvom priklade zameráme len na 2 – javascriptMode a initialUrl.

InitialUrl definuje url adresu webovej stránky, ktorú chceme zobraziť a JavascriptMode.unrestricted povoľuje spustenie Javascriptu vo WebView.

Záver

Týmto je naša prvá aplikácia ukončená a zdrojový kód môžete samozrejme nájsť na githube.

Rád by som na záver spomenul úžasné tutoriály, ktoré môžete nájsť na stránke: flutter.education, od Mateja Rešetára z @resocoder.