Skip to content

RN Lezione 13: Progetto — Setup, Idee e Wireframe

  • Scegliere un’idea progetto tra quelle proposte
  • Progettare wireframe su carta
  • Impostare il progetto Expo con navigazione
  • Creare schermate vuote

ProgettoCosa faFeature tecniche
Todo ListAggiungi, completa, elimina taskFlatList, AsyncStorage, Alert
RubricaContatti con telefono e emailFlatList, navigazione, form
DiarioPost con titolo, testo, dataAsyncStorage, FlatList, form
ProgettoFeature tecniche
App MeteoAPI, ricerca città, FlatList, AsyncStorage preferiti
Gestore SpeseTransazioni, categorie, calcolo totale, AsyncStorage
Raccolta RicetteCategorie, dettaglio, ricerca, immagini
ProgettoFeature tecniche
Flashcard QuizTimer, punteggio, navigazione, animazioni
Social WallPost, like, commenti, FlatList, form
Catalogo ProdottiLista, dettaglio, carrello (AsyncStorage), ricerca

CriterioPuntiCosa valuta
Funzionalità30L’app fa ciò che promette?
Codice25Componenti, stato, organizzazione?
UI/UX20Layout pulito, stili coerenti?
Persistenza10AsyncStorage funziona?
Navigazione10Stack/Tab funzionanti?
Extra5Oltre il minimo richiesto?
Totale100

Terminal window
npx create-expo-app@latest MioProgetto
cd MioProgetto
npx expo start
MioProgetto/
├── app/
│ ├── _layout.js ← Configurazione navigazione
│ ├── index.js ← Home / lista
│ ├── aggiungi.js ← Form aggiunta
│ └── dettaglio.js ← Dettaglio elemento
├── components/
│ ├── Card.js ← Card riutilizzabile
│ ├── FormInput.js ← Input con label
│ └── Loading.js ← ActivityIndicator
├── utils/
│ └── storage.js ← Funzioni AsyncStorage
└── data/
└── iniziali.js ← Dati di esempio

import AsyncStorage from '@react-native-async-storage/async-storage';
const CHIAVE = '@app_dati';
export const caricaDati = async () => {
try {
const json = await AsyncStorage.getItem(CHIAVE);
return json ? JSON.parse(json) : [];
} catch {
return [];
}
};
export const salvaDati = async (dati) => {
try {
await AsyncStorage.setItem(CHIAVE, JSON.stringify(dati));
return true;
} catch {
return false;
}
};
export const resettaDati = async () => {
await AsyncStorage.removeItem(CHIAVE);
};

import { Stack } from 'expo-router';
export default function Layout() {
return (
<Stack
screenOptions={{
headerStyle: { backgroundColor: '#3498db' },
headerTintColor: 'white',
headerTitleStyle: { fontWeight: 'bold' },
}}
>
<Stack.Screen name="index" options={{ title: 'Home' }} />
<Stack.Screen name="aggiungi" options={{ title: 'Aggiungi' }} />
<Stack.Screen name="dettaglio" options={{ title: 'Dettaglio' }} />
</Stack>
);
}

  • Idea scelta e descritta in una frase
  • Wireframe di almeno 2 schermate su carta
  • Progetto Expo creato e funzionante
  • @react-native-async-storage/async-storage installato
  • Navigazione (Stack) configurata con schermate vuote
  • Dati di esempio definiti
  • storage.js creato con funzioni salva/carica
  • Test su Expo Go: navigazione funziona