Ecco uno spezzone di codice, tratto proprio dal server che produce le pagine di questo sito:
Future<BsxTag> _bottomStrip(String lang) async {
final footerArticle = await _db.retrieveObjOfType(Site._footerId,
'article', lang: lang) as EtcArticleObj?;
if (footerArticle == null) return Div('');
return Div()
..withBsPosition(BsPosition.relative)
..withBsZindex(1)
..withStyle('font-size', '0.8em')
..withBsAlign(BsAlign.center)
..withBsMargin(size: 3, side: BsSide.bottom)
..addTags([Hr(), Text((await footerArticle.page) ?? '')]);
}
Il codice si commenta quasi da solo; si tratta della funzione che produce il tag <div> contenente il pié di pagina del sito web. Dovendo eseguire operazioni di lettura da database, lo fa utilizzando la tecnica della programmazione asincrona, in modo che il software nel suo complesso, per quanto breve sia l'attesa del risultato, non rimanda congelato nel frattempo.
Le parti relative al funzionamento asincrono della funzione sono rappresentate in grassetto:
Una funzione non può utilizzare await se a sua volta non è dichiarata async. Ecco perché talvolta si parla di contagiosità della programmazione asincrona.
Questa funzione contiene anche valori nullabili (footerArticle, footerArticle.page), e un abbondante uso di interfacce fluenti, con uso dell'operatore doppio punto. Per approfondimenti, si vedano l'articolo sulla null safety e quello sulle interfacce fluenti.
Giorgio Barchiesi
Albo degli Ingegneri Sez. A, N. 4027 della Prov. di Trento
P.IVA 02370260222, C.F. BRC GRG 58L26 C794R
Copyright © 2015-2024 Giorgio Barchiesi - Tutti i diritti riservati