Diferencia entre revisiones de «Flutter StatefulWidget. Conceptos»
Ir a la navegación
Ir a la búsqueda
(Página creada con «==Introducción== * Hasta ahora hemos usado los StatelessWidget para todo. : Este tipo de Widget: :* No permiten guardar ningún tipo de dato en forma de variable y cuando…») |
|||
| Línea 6: | Línea 6: | ||
:: No impide compilar la aplicación y aparecerá un Warning en la definición del Widget. Un ejemplo de uso sería cuando tenemos un formulario y queremos guardar lo escrito por el usuario en una variable. Esto no lo podríamos realizar con este tipo de Widget. | :: No impide compilar la aplicación y aparecerá un Warning en la definición del Widget. Un ejemplo de uso sería cuando tenemos un formulario y queremos guardar lo escrito por el usuario en una variable. Esto no lo podríamos realizar con este tipo de Widget. | ||
:* No se pueden 'redibujar' para hacer que reflejen un cambio que pueda darse por programación. Imagináos el caso de que busquéis datos por Internet y se carguen nuevos datos en la lista en la que se base un ListView para visualizar el contenido... | :* No se pueden 'redibujar' para hacer que reflejen un cambio que pueda darse por programación. Imagináos el caso de que busquéis datos por Internet y se carguen nuevos datos en la lista en la que se base un ListView para visualizar el contenido... | ||
| + | |||
| + | |||
| + | <br /><br /> | ||
| + | |||
| + | <center> | ||
| + | {{#ev:youtube|VAYNogQsp5s}} | ||
| + | </center> | ||
| + | |||
| + | <br /> | ||
| + | |||
| + | :<syntaxhighlight lang="java" enclose="div" highlight="31,37" > | ||
| + | import 'package:flutter/material.dart'; | ||
| + | |||
| + | class EjemploStateLess extends StatelessWidget { | ||
| + | int _valor = 0; | ||
| + | |||
| + | @override | ||
| + | Widget build(BuildContext context) { | ||
| + | return Scaffold( | ||
| + | appBar: AppBar( | ||
| + | title: Text('StateLessWidget'), | ||
| + | ), | ||
| + | body: _boton() | ||
| + | ); | ||
| + | } | ||
| + | |||
| + | Widget _boton(){ | ||
| + | return Center(child: TextButton(child:Text('Presiona $_valor'), | ||
| + | onPressed: (){ | ||
| + | print('pulsado $_valor'); | ||
| + | _valor = _valor + 1 ; | ||
| + | }, | ||
| + | style: TextButton.styleFrom(backgroundColor: Colors.amber), | ||
| + | ) | ||
| + | ); | ||
| + | |||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | class EjemploStateful extends StatefulWidget { | ||
| + | |||
| + | @override | ||
| + | _EjemploStatefulState createState() => _EjemploStatefulState(); | ||
| + | } | ||
| + | |||
| + | class _EjemploStatefulState extends State<EjemploStateful> { | ||
| + | int _valor = 10; | ||
| + | |||
| + | @override | ||
| + | Widget build(BuildContext context) { | ||
| + | return Scaffold( | ||
| + | appBar: AppBar( | ||
| + | title: Text('appbarTitle'), | ||
| + | ), | ||
| + | body: _boton() | ||
| + | ); | ||
| + | |||
| + | } | ||
| + | Widget _boton(){ | ||
| + | return Center(child: TextButton(child:Text('Presiona valores $_valor'), | ||
| + | onPressed: (){ | ||
| + | print('pulsado $_valor'); | ||
| + | setState(() { | ||
| + | _valor++; | ||
| + | }); | ||
| + | }, | ||
| + | style: TextButton.styleFrom(backgroundColor: Colors.amber), | ||
| + | ) | ||
| + | ); | ||
| + | |||
| + | } | ||
| + | } | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | |||
| + | |||
Revisión del 19:54 19 ago 2021
Introducción
- Hasta ahora hemos usado los StatelessWidget para todo.
- Este tipo de Widget:
- No permiten guardar ningún tipo de dato en forma de variable y cuando definimos algo a nivel de clase siempre debe estar asociado al modificador final o const.
- No impide compilar la aplicación y aparecerá un Warning en la definición del Widget. Un ejemplo de uso sería cuando tenemos un formulario y queremos guardar lo escrito por el usuario en una variable. Esto no lo podríamos realizar con este tipo de Widget.
- No se pueden 'redibujar' para hacer que reflejen un cambio que pueda darse por programación. Imagináos el caso de que busquéis datos por Internet y se carguen nuevos datos en la lista en la que se base un ListView para visualizar el contenido...
import 'package:flutter/material.dart'; class EjemploStateLess extends StatelessWidget { int _valor = 0; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('StateLessWidget'), ), body: _boton() ); } Widget _boton(){ return Center(child: TextButton(child:Text('Presiona $_valor'), onPressed: (){ print('pulsado $_valor'); _valor = _valor + 1 ; }, style: TextButton.styleFrom(backgroundColor: Colors.amber), ) ); } } class EjemploStateful extends StatefulWidget { @override _EjemploStatefulState createState() => _EjemploStatefulState(); } class _EjemploStatefulState extends State<EjemploStateful> { int _valor = 10; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('appbarTitle'), ), body: _boton() ); } Widget _boton(){ return Center(child: TextButton(child:Text('Presiona valores $_valor'), onPressed: (){ print('pulsado $_valor'); setState(() { _valor++; }); }, style: TextButton.styleFrom(backgroundColor: Colors.amber), ) ); } }
Enlace a la página principal de la UD4
Enlace a la página principal del curso
-- Ángel D. Fernández González -- (2021).