












































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Introduzione, Installazione, Risoluzione problemi, Struttura del codice, Codice, Bottoni, Main function, Funzioni, Parametri posizionali, Accesso condizionali proprietà, Operatore ternario, switch, For (loop), While, For per gli iterable, Do-while, Break, Continue, widget, text, Usare una lista, Le classi, Operatore map, debug, setState(), font, Distanziare da sopra la scritta, Allineamento, Programmazione asincrona, Funzioni asincrone, .then(), await, errori, FutureBuilder, Sistemare la struttura dell’app, BLoC, Dipendenze e librerie, Usare un’API, Come usare il JSON, da api a oggetto dart, Extension function, layout
Tipologia: Dispense
1 / 52
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!













































● File > cmd + shift +. -> apre file nascosti ● creo file -> .zshrc ● export PATH=$PATH:/Users/flutter/bin:$PATH
● flutter doctor -> comando per vedere se ci sono errori negli IDE
installa android studio apri SDK manager
scrivere sul terminale flutter doctor --android-licenses se eseguendo l’app compare questo errore : ● chiudi emulatore ● vai su android studio
flutter doctor guardare se ci sono problemi flutter create primo_project creazione progetto ● vuole solo _, non CamelCase cd primo_project entrare dentro la cartella progetto flutter run avviare app
Su MainActivity estende FlutterActivity Cartella lib -> codice Flutter pubspeac.yaml -> simile a json (informazioni sull’app) sdk -> versione di dart
runApp -> prende un widget e l’app compila
cliccando su esegue ed ‘avvia’ si può startare l’app essere sopra un file con estensione .dart si può fare anche con ‘flutter run’ da terminale demo widget ● stateless/statefull -> possono avere uno stato oppure no. ○ nella demo -> lo stato è il contatore
● tooltip -> per gli ipovedenti (la lettura ad alta voce) ● onPressed -> comportamento quando viene premuto un bottone definita come una funzione senza () ● setta lo stato setState((){ _counter++; }); utilizzando la build si ricorda dove ha lasciato il counter
void main(){ print('hello'); } stampa ‘hello’
int add(int a, int b){ return a + b; } se non ritorna nulla si usa void int add(int a, int b) => a+b; //ritorna il valore della somma
-> obbligatori e sono quelli tra parentesi (in questo caso int) nullable -> può avere un valore null
utilizzando il? prima del. se è null allora restituirà null, altrimenti ritorna la lunghezza della stringa
true : false
?? -> restituisce quello che c’è prima dei due punti se è non null, invece se è null restituisce quello dopo ! -> sono sicuro che quella variabile non sia null se fosse null andrebbe in crash
(lista elementi)
ElevatedButton( onPressed : _answerQuestion , //se lasciamo () passiamo il valore della funzione, non la funzione quindi si scrive senza child : const Text("3") ),
class _MyHomePageState extends State
in un altro file .dart class Question{ final String text; final List
_questions[_index].answers.map((answer) => ElevatedButton( onPressed : _answerQuestion , child : Text(answer) ) ).toList(), Grazie al metodo map () , per ogni elemento dell'array sorgente, viene richiamata una funzione di callback, tramite la notazione che sfrutta il simbolo freccia "arrow", che elabora il dato e ne restituisce il valore modificato, il quale servirà per popolare un nuovo array.
debugPrint(“index : $index”):
setState() permette di dire a Flutter che qualcosa è cambiato.
width : double.infinity //prendere tutto lo spazio a sua disposizione
Text("testo", style : TextStyle( fontSize : 20, fontWeight : fontWeight.w600, color : Colors.deepOrange ) ● w600 grassetto ● w100 leggero
const SizedBox(height : 20),
textAlign : TextAlign.center maxLines :1, //taglia ad una riga overflow : TextOverFlow //metti i puntini EdgeInsets.symmetric(horizontal : 20) //spazia 20 dai lati
onError : (error) => print(error)); esempio -> immagine profilo non blocca l’app, ma caricherà un iconcina al posto dell’immagine che sta caricando
possiamo aspettare un risultato, lui in automatico fa una chiamata ed assegna ad una variabile il risultato. void main() async { var ids = await fetchLatestNewsIds(); } Future<List
void main() async { try{ var ids = await fetchLatestNewsIds(); } catch(err){ print('Something went wrong : $err'); } } esempio c’è un errore nel 3 -> va nel catch e va avanti nel programma ● se non definisco che tipo di errore, verranno messi tutti gli errori. ● se non mettiamo il try catch -> l’app va in crash
esegue un Future ed aspettare il risultato per costruire l’UI builder -> funzione ● BuildContext -> propaga il context ai suoi children ● snapshot -> fotografia stato di quel future in quel momento FutureBuilder
Separare la business logic dall’ui. Architetture software -> state management in Flutter BLoC ● business ● logick ● component Come creare un BLoC ● creare una nuova classe question_bloc.dart ● spostare le question nella nuova pagina ? -> nullable await può essere utilizzato solo in una funzione async
Le librerie sono dei package. ● due app diverse hanno un pezzo in comune -> creo un package ● condividere con altri sviluppatori (community) plugin -> tipo di package che parla con varie piattaforme i package si trovano su pub.dev , nella scelta
● Dart class serialization json ● json deserialization Dart class deserialization del json : ● passare da json a Map<String, dynamic> (dynamic perchè posso ricevere bool, string, int ecc oppure un json dentro json (annidato)) -> dart:convert ● trasforma la mappa nel nostro oggetto dart -> dentro la nostra classe si mette un altro costruttore che prenderà come input una Map<String, dynamic> import 'dart.convert' Map<String, dynamic> userMap = jsonDecode(jsonString); class User{ String? name; String? email; User({this.name, this.email}); User.fromJson(Map<String, dynamic> json){ name = json['name']; email = json['email']; } } import 'dart.convert' Map<String, dynamic> userMap = jsonDecode(jsonString); User user = User.fromJson(userMap); la serialization invece ● converto in mappa ● convertire in stringa json
class User{ String? name; String? email; User({this.name, this.email}); Map<String, dynamic> toJson(){ final Map<String, dynamic> data = Map<String, dynamic>(); data['name'] = name; data['email'] = email; return data; } } import 'dart.convert' User user = User(name : “Mario”, email : “[email protected]”); Map<String, dynamic> userMap = user.toJson(); String json = jsonEncode(userMap); import … as http -> per rinominare l’import
import alias http http.get altrimenti dovrei scrivere la forma lunga 1 vedere se la risposta (response) è negativa o negativa ● statusCode 200 -> ok convert.jsonDecode(response.body) 2 fare una classe dove verranno inseriti i parametri da ricevere fromJson(e) -> e singolo elemento 3 trasformo risposta a dart JSON to Dart