Flutter, originalment dissenyat per a aplicacions mòbils, ha evolucionat per suportar múltiples plataformes, incloent-hi el web i l'escriptori. En aquest tema, explorarem com Flutter pot ser utilitzat per desenvolupar aplicacions d'escriptori per a Windows, macOS i Linux.
- Què és Flutter Desktop?
Flutter Desktop és una extensió del framework Flutter que permet crear aplicacions d'escriptori amb la mateixa base de codi que les aplicacions mòbils. Això significa que pots reutilitzar gran part del teu codi existent per crear aplicacions que funcionin en ordinadors de sobretaula i portàtils.
Avantatges de Flutter Desktop:
- Reutilització de Codi: Utilitza el mateix codi per a aplicacions mòbils i d'escriptori.
- Rendiment Natiu: Les aplicacions de Flutter Desktop es compilen a codi natiu, oferint un rendiment excel·lent.
- Consistència de Disseny: Manté una experiència d'usuari consistent a través de diferents plataformes.
- Configuració de l'Entorn per a Flutter Desktop
Requisits del Sistema:
- Windows: Windows 10 o superior.
- macOS: macOS 10.14 (Mojave) o superior.
- Linux: Una distribució moderna de Linux.
Instal·lació de les Dependències:
- Flutter SDK: Assegura't de tenir el Flutter SDK instal·lat. Pots seguir les instruccions oficials a flutter.dev.
- Entorn de Desenvolupament: Un editor de codi com Visual Studio Code o Android Studio.
- Compiladors i Eines:
- Windows: Visual Studio 2019 amb les càrregues de treball "Desktop development with C++".
- macOS: Xcode.
- Linux: Dependències de GTK i altres eines de compilació.
Configuració del Projecte:
-
Crear un Nou Projecte:
flutter create my_desktop_app cd my_desktop_app
-
Activar el Suport per a Desktop:
flutter config --enable-windows-desktop flutter config --enable-macos-desktop flutter config --enable-linux-desktop
-
Executar l'Aplicació:
flutter run -d windows flutter run -d macos flutter run -d linux
- Estructura del Projecte
Un projecte de Flutter Desktop té una estructura similar a un projecte mòbil, amb algunes carpetes addicionals per a cada plataforma d'escriptori:
my_desktop_app/ ├── lib/ │ └── main.dart ├── windows/ ├── macos/ ├── linux/ ├── pubspec.yaml └── ...
Fitxers Clau:
- lib/main.dart: El punt d'entrada de l'aplicació.
- windows/, macos/, linux/: Carpetes específiques de la plataforma que contenen configuracions i codi natiu.
- Exemple Pràctic
A continuació, crearem una aplicació d'escriptori simple que mostra un text al centre de la pantalla.
Codi de main.dart
:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Desktop Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(), ); } } class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Flutter Desktop Home Page'), ), body: Center( child: Text( 'Hello, Flutter Desktop!', style: TextStyle(fontSize: 24), ), ), ); } }
Explicació del Codi:
- main(): El punt d'entrada de l'aplicació que crida a
runApp()
. - MyApp: Un widget sense estat que defineix el tema i la pàgina principal de l'aplicació.
- MyHomePage: Un widget sense estat que mostra un text al centre de la pantalla.
- Exercici Pràctic
Objectiu:
Crea una aplicació d'escriptori que mostri un botó. Quan es faci clic al botó, el text al centre de la pantalla ha de canviar.
Passos:
- Crea un nou projecte de Flutter Desktop.
- Modifica
main.dart
per incloure un botó i un text. - Utilitza un
StatefulWidget
per gestionar l'estat del text.
Solució:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Desktop Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { String _displayText = 'Hello, Flutter Desktop!'; void _updateText() { setState(() { _displayText = 'Button Clicked!'; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Flutter Desktop Home Page'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( _displayText, style: TextStyle(fontSize: 24), ), SizedBox(height: 20), ElevatedButton( onPressed: _updateText, child: Text('Click Me'), ), ], ), ), ); } }
Explicació del Codi:
- _MyHomePageState: Un widget amb estat que gestiona el text que es mostra.
- _updateText(): Una funció que actualitza l'estat del text quan es fa clic al botó.
- Conclusió
Flutter Desktop ofereix una manera poderosa i eficient de crear aplicacions d'escriptori reutilitzant el codi de les aplicacions mòbils. Amb una configuració mínima, pots començar a desenvolupar aplicacions per a Windows, macOS i Linux, aprofitant la consistència i el rendiment natiu que ofereix Flutter.
En el següent tema, explorarem com construir aplicacions d'escriptori més complexes i com gestionar les diferències específiques de cada plataforma.
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ó