En l'aplicació que teníem fins ara, la pantalla principal estava quasi buida (només hi havia un text) fins que, en prémer el botó, es carregaven les dades. Podem fer que les dades es carreguin automàticament quan es carrega la pàgina. Per fer-ho, només cal sobrescriure el mètode initState i fer que també executi la funció llegirDades. Encara que, com ja hem dit, en aquest exemple no ens centrarem molt en el format de la pantalla, aprofitarem per posar un text més gros i en negreta al nom de cada tasca, escriure les hores correctament i alinear a l'esquerra tots els textos. La pantalla principal quedaria així:
pant_principal.dart
import 'package:flutter/material.dart'; import 'package:sheets/data/crida_dades.dart'; import 'package:sheets/data/dades_rebudes.dart';
class PantPrincipal extends StatefulWidget {
const PantPrincipal({super.key});
@override
State<PantPrincipal> createState() => _PantPrincipalState();
}
class _PantPrincipalState extends State<PantPrincipal> {
Future<DadesRebudes?>? _rebut;
CridaDades cridaDades = CridaDades();
@override
void initState() {
super.initState();
_rebut = cridaDades.llegirDades();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Tasques per a avui"),),
body: Column(
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: TextButton(
onPressed: () {
setState(() {
_rebut = cridaDades.llegirDades();
});
},
child: Text("Actualitza"),
),
),
FutureBuilder(future: _rebut, builder: (context, snapshot){
if(snapshot.connectionState == ConnectionState.waiting){
return CircularProgressIndicator();
} else if(snapshot.hasError){
return Text("Error: ${snapshot.error}");
} else if(snapshot.hasData){
return escriuResultats(snapshot.data);
} else {
return Text("No s'han trobat resultats");
}
})
],
),
);
}
}
Widget escriuResultats(DadesRebudes? dades){
if(dades != null){
if(dades.nom.isNotEmpty){
List<Widget> contingut = [];
for(int i = 0; i < dades.nom.length; i++){
Widget element = Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(dades.nom[i],
style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold)),
Text("Inici: ${dades.inici[i]} h"),
Text("Final: ${dades.fi[i]} h"),
],
),
);
contingut.add(element);
}
return Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: contingut,
),
);
}
}
return Text("No hi ha esdeveniments programats");
}

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.