En aquest tema, explorarem els widgets bàsics de Flutter, que són els blocs de construcció fonamentals per a qualsevol aplicació Flutter. Els widgets són elements visuals que es poden combinar per crear interfícies d'usuari complexes. Aprendrem sobre alguns dels widgets més utilitzats i com utilitzar-los en les nostres aplicacions.
- Text
El widget Text
s'utilitza per mostrar text a la pantalla. És un dels widgets més senzills i més utilitzats en Flutter.
Exemple:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Exemple de Text Widget'), ), body: Center( child: Text( 'Hola, Flutter!', style: TextStyle(fontSize: 24, color: Colors.blue), ), ), ), ); } }
Explicació:
Text('Hola, Flutter!')
: Crea un widget de text amb el contingut "Hola, Flutter!".TextStyle
: Permet personalitzar l'estil del text, com la mida de la font i el color.
- Container
El widget Container
és un widget versàtil que pot contenir altres widgets i permet aplicar marges, farcits, decoracions i transformacions.
Exemple:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Exemple de Container Widget'), ), body: Center( child: Container( width: 200, height: 200, color: Colors.amber, child: Center( child: Text('Dins del Container'), ), ), ), ), ); } }
Explicació:
Container(width: 200, height: 200, color: Colors.amber)
: Crea un container amb una amplada i alçada de 200 píxels i un color de fons ambre.child: Center(child: Text('Dins del Container'))
: El container conté un widgetCenter
que al seu torn conté un widgetText
.
- Row i Column
Els widgets Row
i Column
s'utilitzen per disposar widgets en una fila horitzontal o una columna vertical, respectivament.
Exemple de Row:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Exemple de Row Widget'), ), body: Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Icon(Icons.star, color: Colors.red), Icon(Icons.star, color: Colors.green), Icon(Icons.star, color: Colors.blue), ], ), ), ); } }
Exemple de Column:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Exemple de Column Widget'), ), body: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Icon(Icons.star, color: Colors.red), Icon(Icons.star, color: Colors.green), Icon(Icons.star, color: Colors.blue), ], ), ), ); } }
Explicació:
Row
iColumn
tenen una propietatmainAxisAlignment
que controla l'alineació dels seus fills al llarg de l'eix principal.children
: Una llista de widgets que es disposaran en una fila o columna.
- Image
El widget Image
s'utilitza per mostrar imatges a la pantalla. Es poden carregar imatges des d'Internet, des de fitxers locals o des de recursos.
Exemple:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Exemple de Image Widget'), ), body: Center( child: Image.network( 'https://flutter.dev/images/flutter-logo-sharing.png', ), ), ), ); } }
Explicació:
Image.network('URL')
: Carrega una imatge des d'una URL.
- Button
Els widgets de botó permeten als usuaris interactuar amb l'aplicació. Hi ha diversos tipus de botons, com RaisedButton
, FlatButton
, IconButton
, etc.
Exemple:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Exemple de Button Widget'), ), body: Center( child: ElevatedButton( onPressed: () { print('Botó premut!'); }, child: Text('Prem-me'), ), ), ), ); } }
Explicació:
ElevatedButton(onPressed: () { ... }, child: Text('Prem-me'))
: Crea un botó elevat amb un text i una funció que s'executa quan es prem el botó.
Exercicis Pràctics
Exercici 1:
Crea una aplicació que mostri un text centrat dins d'un container amb un color de fons verd i una mida de 300x300 píxels.
Solució:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Exercici 1'), ), body: Center( child: Container( width: 300, height: 300, color: Colors.green, child: Center( child: Text( 'Text Centrat', style: TextStyle(fontSize: 24, color: Colors.white), ), ), ), ), ), ); } }
Exercici 2:
Crea una aplicació que mostri tres icones d'estrella en una fila, amb colors diferents (vermell, verd i blau).
Solució:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Exercici 2'), ), body: Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Icon(Icons.star, color: Colors.red), Icon(Icons.star, color: Colors.green), Icon(Icons.star, color: Colors.blue), ], ), ), ); } }
Conclusió
En aquesta secció, hem après sobre alguns dels widgets bàsics de Flutter, com Text
, Container
, Row
, Column
, Image
i Button
. Aquests widgets són fonamentals per construir interfícies d'usuari en Flutter. Hem vist exemples pràctics de com utilitzar-los i hem realitzat exercicis per reforçar els conceptes apresos. En la següent secció, explorarem widgets de disseny més avançats per crear interfícies d'usuari més complexes.
Curs de Desenvolupament Flutter
Mòdul 1: Introducció a Flutter
- Què és Flutter?
- Configuració de l'Entorn de Desenvolupament
- Comprensió de l'Arquitectura de Flutter
- Creació de la Teva Primera Aplicació Flutter
Mòdul 2: Conceptes Bàsics de Programació en Dart
- Introducció a Dart
- Variables i Tipus de Dades
- Sentències de Flux de Control
- Funcions i Mètodes
- Programació Orientada a Objectes en Dart
Mòdul 3: Widgets de Flutter
- Introducció als Widgets
- Widgets Stateless vs Stateful
- Widgets Bàsics
- Widgets de Disseny
- Widgets d'Entrada i Formulari
Mòdul 4: Gestió de l'Estat
Mòdul 5: Navegació i Enrutament
- Introducció a la Navegació
- Navegació Bàsica
- Rutes Nomenades
- Passar Dades Entre Pantalles
- Deep Linking
Mòdul 6: Xarxes i APIs
- Obtenir Dades d'Internet
- Analitzar Dades JSON
- Gestió d'Errors de Xarxa
- Ús d'APIs REST
- Integració de GraphQL
Mòdul 7: Persistència i Emmagatzematge
- Introducció a la Persistència
- Preferències Compartides
- Emmagatzematge de Fitxers
- Base de Dades SQLite
- Ús de Hive per a l'Emmagatzematge Local
Mòdul 8: Conceptes Avançats de Flutter
- Animacions en Flutter
- Pintura Personalitzada i Canvas
- Canals de Plataforma
- Isolates i Concurrència
- Optimització del Rendiment
Mòdul 9: Proves i Depuració
- Introducció a les Proves
- Proves Unitàries
- Proves de Widgets
- Proves d'Integració
- Tècniques de Depuració
Mòdul 10: Desplegament i Manteniment
- Preparació per al Llançament
- Construcció per a iOS
- Construcció per a Android
- Integració i Desplegament Continu (CI/CD)
- Manteniment i Actualització de la Teva Aplicació