En aquest tema, explorarem els widgets d'entrada i formulari en Flutter. Aquests widgets són essencials per crear aplicacions interactives que permetin als usuaris introduir dades. Aprendrem a utilitzar widgets com TextField, Checkbox, Radio, Switch, i a gestionar formularis amb el widget Form.

Continguts

TextField

El widget TextField és utilitzat per permetre als usuaris introduir text. És un dels widgets més comuns en les aplicacions.

Exemple de TextField

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 TextField'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: TextField(
            decoration: InputDecoration(
              border: OutlineInputBorder(),
              labelText: 'Introduïu el vostre nom',
            ),
          ),
        ),
      ),
    );
  }
}

Explicació

  • TextField: Crea un camp de text.
  • decoration: Afegeix decoració al camp de text, com ara un bord i una etiqueta.

Checkbox

El widget Checkbox permet als usuaris seleccionar o deseleccionar una opció.

Exemple de Checkbox

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool _isChecked = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Exemple de Checkbox'),
        ),
        body: Center(
          child: Checkbox(
            value: _isChecked,
            onChanged: (bool? value) {
              setState(() {
                _isChecked = value!;
              });
            },
          ),
        ),
      ),
    );
  }
}

Explicació

  • Checkbox: Crea una casella de verificació.
  • value: Indica si la casella està seleccionada.
  • onChanged: Funció que es crida quan l'estat de la casella canvia.

Radio

El widget Radio permet als usuaris seleccionar una opció d'un grup de opcions.

Exemple de Radio

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  int _selectedRadio = 1;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Exemple de Radio'),
        ),
        body: Column(
          children: <Widget>[
            Radio(
              value: 1,
              groupValue: _selectedRadio,
              onChanged: (int? value) {
                setState(() {
                  _selectedRadio = value!;
                });
              },
            ),
            Radio(
              value: 2,
              groupValue: _selectedRadio,
              onChanged: (int? value) {
                setState(() {
                  _selectedRadio = value!;
                });
              },
            ),
          ],
        ),
      ),
    );
  }
}

Explicació

  • Radio: Crea un botó de ràdio.
  • value: Valor del botó de ràdio.
  • groupValue: Valor seleccionat del grup de botons de ràdio.
  • onChanged: Funció que es crida quan l'estat del botó de ràdio canvia.

Switch

El widget Switch permet als usuaris canviar entre dos estats (activat/desactivat).

Exemple de Switch

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool _isSwitched = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Exemple de Switch'),
        ),
        body: Center(
          child: Switch(
            value: _isSwitched,
            onChanged: (bool value) {
              setState(() {
                _isSwitched = value;
              });
            },
          ),
        ),
      ),
    );
  }
}

Explicació

  • Switch: Crea un interruptor.
  • value: Indica si l'interruptor està activat.
  • onChanged: Funció que es crida quan l'estat de l'interruptor canvia.

Form

El widget Form és utilitzat per agrupar i gestionar diversos widgets d'entrada.

Exemple de Form

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 Form'),
        ),
        body: MyCustomForm(),
      ),
    );
  }
}

class MyCustomForm extends StatefulWidget {
  @override
  _MyCustomFormState createState() => _MyCustomFormState();
}

class _MyCustomFormState extends State<MyCustomForm> {
  final _formKey = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {
    return Form(
      key: _formKey,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          TextFormField(
            decoration: InputDecoration(
              labelText: 'Introduïu el vostre nom',
            ),
            validator: (value) {
              if (value == null || value.isEmpty) {
                return 'Si us plau, introduïu algun text';
              }
              return null;
            },
          ),
          Padding(
            padding: const EdgeInsets.symmetric(vertical: 16.0),
            child: ElevatedButton(
              onPressed: () {
                if (_formKey.currentState!.validate()) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Processant dades')),
                  );
                }
              },
              child: Text('Enviar'),
            ),
          ),
        ],
      ),
    );
  }
}

Explicació

  • Form: Crea un formulari.
  • _formKey: Clau global per identificar el formulari.
  • TextFormField: Crea un camp de text dins del formulari.
  • validator: Funció que valida l'entrada de l'usuari.
  • ElevatedButton: Botó per enviar el formulari.

Exercicis Pràctics

Exercici 1: Crear un Formulari de Registre

Crea un formulari de registre que inclogui els següents camps:

  • Nom
  • Correu electrònic
  • Contrasenya
  • Confirmació de contrasenya

Solució de l'Exercici 1

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('Formulari de Registre'),
        ),
        body: RegistrationForm(),
      ),
    );
  }
}

class RegistrationForm extends StatefulWidget {
  @override
  _RegistrationFormState createState() => _RegistrationFormState();
}

class _RegistrationFormState extends State<RegistrationForm> {
  final _formKey = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Form(
        key: _formKey,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextFormField(
              decoration: InputDecoration(
                labelText: 'Nom',
              ),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Si us plau, introduïu el vostre nom';
                }
                return null;
              },
            ),
            TextFormField(
              decoration: InputDecoration(
                labelText: 'Correu electrònic',
              ),
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Si us plau, introduïu el vostre correu electrònic';
                }
                return null;
              },
            ),
            TextFormField(
              decoration: InputDecoration(
                labelText: 'Contrasenya',
              ),
              obscureText: true,
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Si us plau, introduïu la vostra contrasenya';
                }
                return null;
              },
            ),
            TextFormField(
              decoration: InputDecoration(
                labelText: 'Confirmació de contrasenya',
              ),
              obscureText: true,
              validator: (value) {
                if (value == null || value.isEmpty) {
                  return 'Si us plau, confirmeu la vostra contrasenya';
                }
                return null;
              },
            ),
            Padding(
              padding: const EdgeInsets.symmetric(vertical: 16.0),
              child: ElevatedButton(
                onPressed: () {
                  if (_formKey.currentState!.validate()) {
                    ScaffoldMessenger.of(context).showSnackBar(
                      SnackBar(content: Text('Processant dades')),
                    );
                  }
                },
                child: Text('Registrar-se'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

Explicació

  • Hem creat un formulari de registre amb camps per al nom, correu electrònic, contrasenya i confirmació de contrasenya.
  • Cada camp té una validació per assegurar-se que no estigui buit.
  • Un botó Registrar-se que valida el formulari i mostra un missatge de processament de dades.

Conclusió

En aquesta secció, hem après a utilitzar diversos widgets d'entrada i formulari en Flutter, com TextField, Checkbox, Radio, Switch i Form. Aquests widgets són fonamentals per crear aplicacions interactives que permetin als usuaris introduir i gestionar dades. Hem vist exemples pràctics i hem realitzat un exercici per reforçar els conceptes apresos. En el següent mòdul, explorarem la gestió de l'estat en Flutter.

Curs de Desenvolupament Flutter

Mòdul 1: Introducció a Flutter

Mòdul 2: Conceptes Bàsics de Programació en Dart

Mòdul 3: Widgets de Flutter

Mòdul 4: Gestió de l'Estat

Mòdul 5: Navegació i Enrutament

Mòdul 6: Xarxes i APIs

Mòdul 7: Persistència i Emmagatzematge

Mòdul 8: Conceptes Avançats de Flutter

Mòdul 9: Proves i Depuració

Mòdul 10: Desplegament i Manteniment

Mòdul 11: Flutter per a Web i Escriptori

© Copyright 2024. Tots els drets reservats