Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
formations:devmobile_1 [12/09/2021 12:40] – foder | formations:devmobile_1 [14/10/2024 11:38] (Version actuelle) – [Initialisation de l'application] dmassif | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Dev mobile 101 : Les bases du développement mobile ====== | ||
+ | |||
+ | Cette première formation a pour but de donner les bases de développement mobile. | ||
+ | |||
+ | **Compétences abordées :** JS, React Native, Expo | ||
+ | |||
+ | ==== Prérequis ==== | ||
+ | |||
+ | Pour suivre cette formation, il faut déjà avoir des bases en DevWeb (HTML, CSS, JS). Nous vous conseillons de suivre les formations [[formations: | ||
+ | |||
+ | ===== Installation ===== | ||
+ | |||
+ | ==== Installation des logiciels ==== | ||
+ | |||
+ | Pour cette formation, il faut installer la version LTS de [[https:// | ||
+ | |||
+ | Nous allons utiliser Expo pour compiler l' | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ==== Initialisation de l' | ||
+ | |||
+ | Afin de créer l' | ||
+ | |||
+ | npx create-expo-app@latest | ||
+ | | ||
+ | <note important> | ||
+ | En cas d' | ||
+ | < | ||
+ | Il faut lancer la commande | ||
+ | < | ||
+ | Set-ExecutionPolicy Unrestricted -Scope CurrentUser | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Ouvrez votre projet dans votre IDE et dans le terminal, tapez : | ||
+ | |||
+ | npx expo start | ||
+ | |||
+ | Une page devrait s' | ||
+ | * Pour iOS : scannez le QR code avec l' | ||
+ | * Pour Android : scannez le QR code depuis l' | ||
+ | |||
+ | <note important> | ||
+ | Il faut que votre ordinateur et votre téléphone soient connectés au même réseau Wifi. | ||
+ | </ | ||
+ | |||
+ | Félicitations, | ||
+ | |||
+ | ===== Modifier l' | ||
+ | |||
+ | Le fichier App.js est l' | ||
+ | |||
+ | ==== Structure du code ==== | ||
+ | |||
+ | Actuellement dans le App.js, nous pouvons trouver ce code : | ||
+ | |||
+ | < | ||
+ | import { StatusBar } from ' | ||
+ | import React from ' | ||
+ | import { StyleSheet, Text, View } from ' | ||
+ | |||
+ | export default function App() { | ||
+ | return ( | ||
+ | <View style={styles.container}> | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | ); | ||
+ | } | ||
+ | |||
+ | const styles = StyleSheet.create({ | ||
+ | container: { | ||
+ | flex: 1, | ||
+ | backgroundColor: | ||
+ | alignItems: ' | ||
+ | justifyContent: | ||
+ | }, | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | Et vous devriez voir ceci sur votre téléphone : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | Déjà, nous remarquons que le code est divisé en trois parties : | ||
+ | * Les import : on importe les librairies et éléments dont on a besoin | ||
+ | * Le contenu de la page | ||
+ | * La StyleSheet (qui correspond au CSS en développement web) | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | === Contenu de la page === | ||
+ | |||
+ | Comme vous pouvez le voir, le contenu de la page marche, comme en HTML, avec des balises. C'est du JSX. | ||
+ | |||
+ | Tout d' | ||
+ | |||
+ | Vous pouvez changer le contenu de la balise Text pour commencer. | ||
+ | |||
+ | < | ||
+ | Il suffit d' | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ---- | ||
+ | |||
+ | === StyleSheet === | ||
+ | |||
+ | |||
+ | Comment en CSS, il y a plusieurs façons pour changer le style d'un élément. | ||
+ | |||
+ | La première façon (déconseillé) est de le mettre dans l' | ||
+ | |||
+ | < | ||
+ | <Text style={{color: | ||
+ | </ | ||
+ | |||
+ | Comme vous pouvez le voir sur votre téléphone, | ||
+ | |||
+ | La deuxième façon (conseillé) est de tout mettre dans une StyleSheet. C'est le cas sur le App.js de base. La balise View a l' | ||
+ | |||
+ | < | ||
+ | container: { | ||
+ | flex: 1, | ||
+ | backgroundColor: | ||
+ | alignItems: ' | ||
+ | justifyContent: | ||
+ | }, | ||
+ | </ | ||
+ | |||
+ | Comme en CSS, container correspond à une classe en DevWeb. | ||
+ | |||
+ | Vous pouvez modifier la couleur de fond de votre View : | ||
+ | |||
+ | < | ||
+ | container: { | ||
+ | flex: 1, | ||
+ | backgroundColor: | ||
+ | alignItems: ' | ||
+ | justifyContent: | ||
+ | }, | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ==== Le style ==== | ||
+ | |||
+ | Comme en HTML, il y a plusieurs moyens de définir la taille et la position d'un élément. Notez que ce n'est pas uniquement le style de l' | ||
+ | |||
+ | Voilà une liste des propriétés que l'on va utiliser : | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ---- | ||
+ | |||
+ | === On va flex === | ||
+ | |||
+ | Vous avez dû vous demander à quoi correspond le flex: 1 dans le style de la View. | ||
+ | |||
+ | En développement mobile, l'une des principales difficultés est de s' | ||
+ | |||
+ | L' | ||
+ | |||
+ | Nous allons faire une exemple : | ||
+ | |||
+ | < | ||
+ | export default function App() { | ||
+ | return ( | ||
+ | <View style={{flex: | ||
+ | <View style={{flex: | ||
+ | <View style={{flex: | ||
+ | </ | ||
+ | ); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Comme vous le voyez, les deux View dans la View principale prennent chacune une part de l' | ||
+ | |||
+ | Si vous mettez flex: 2 pour la View rouge, vous obtiendrez ceci : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Maintenant, la View rouge prend 2 parts de l' | ||
+ | |||
+ | Vous pouvez jouer avec les flex en changeant les proportions ou en ajoutant des View. | ||
+ | |||
+ | Donc dans le code de base du App.js, le flex: 1 indique que la View principale prend tout l' | ||
+ | |||
+ | On vient de découper des zones horizontales, | ||
+ | |||
+ | < | ||
+ | <View style={{flex: | ||
+ | <View style={{flex: | ||
+ | <View style={{flex: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ---- | ||
+ | |||
+ | === Taille et centrage === | ||
+ | |||
+ | Pour les deux premières, '' | ||
+ | |||
+ | Pour maîtriser sa position, on va utiliser '' | ||
+ | |||
+ | Vous comprenez sûrement que l'une des propriétés sert à l' | ||
+ | |||
+ | < | ||
+ | <View style={{flex: | ||
+ | <View style={{flex: | ||
+ | <View style={{backgroundColor:' | ||
+ | <View style={{backgroundColor:' | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ---- | ||
+ | |||
+ | === Marges === | ||
+ | |||
+ | On peut aussi ajouter des marges à notre élément. Les marges extérieures sont définies par '' | ||
+ | |||
+ | C'est ici qu'on va voir un concept intéressant : les éléments fils jouent un rôle dans la taille d'un élément. En effet, si on ne précise rien, une '' | ||
+ | |||
+ | < | ||
+ | <View style={{flex: | ||
+ | <View style={{flex: | ||
+ | <View style={{backgroundColor:' | ||
+ | <View style={{backgroundColor:' | ||
+ | <View style={{backgroundColor:' | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ---- | ||
+ | |||
+ | === Position === | ||
+ | |||
+ | **Cette partie est plus compliquée, | ||
+ | |||
+ | On va maintenant aborder la propriété '' | ||
+ | |||
+ | Si l'on mets la '' | ||
+ | |||
+ | Dans cet exemple, la '' | ||
+ | |||
+ | < | ||
+ | <View style={{flex: | ||
+ | <View style={{flex: | ||
+ | <View style={{backgroundColor:' | ||
+ | <View style={{backgroundColor:' | ||
+ | <View style={{backgroundColor:' | ||
+ | </ | ||
+ | <View style={{backgroundColor:' | ||
+ | <View style={{backgroundColor:' | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ---- | ||
+ | |||
+ | === Pratiquez ! === | ||
+ | |||
+ | **Cette partie est plus compliquée, | ||
+ | |||
+ | **Exercice ** | ||
+ | |||
+ | Essayez de reproduire cela avec les propriétés que nous venons de voir : | ||
+ | |||
+ | La '' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | **Correction** | ||
+ | < | ||
+ | < | ||
+ | <View style={{flex: | ||
+ | <View style={{flex: | ||
+ | <View style={{flex: | ||
+ | <View style={{flex: | ||
+ | <View style={{backgroundColor:' | ||
+ | </ | ||
+ | </ | ||
+ | <View style={{backgroundColor:' | ||
+ | <View style={{backgroundColor:' | ||
+ | <View style={{backgroundColor:' | ||
+ | <View style={{backgroundColor:' | ||
+ | <View style={{backgroundColor:' | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== A vous de jouer ===== | ||
+ | |||
+ | Il est temps pour vous de faire votre propre page. | ||
+ | |||
+ | En cas de doute, vous pouvez utiliser la documentation de React Native : [[https:// | ||
+ | |||
+ | Voici quelques éléments : | ||
+ | * Mettre du texte : | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | * Mettre un icône de chargement : | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | * Mettre une image : | ||
+ | < | ||
+ | <Image source={{uri : ' | ||
+ | </ | ||
+ | * Mettre un lien (ne pas oublier import { Linking } from ' | ||
+ | < | ||
+ | <Text onPress={() => Linking.openURL(' | ||
+ | </ | ||
+ | |||
+ | Si vous n'avez pas d' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Un peu d'aide : | ||
+ | < | ||
+ | On doit séparer notre images en plusieurs '' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Un peu d' | ||
+ | |||
+ | Dans les prochaines formations, nous allons essayer de réaliser une application utile au GInfo. Elle permettra aux utilisateurs de laisser anonymement des feedbacks sur les formations. On peut commencer par réaliser la page d' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | L' | ||
+ | {{ : | ||
+ | |||