Resumen de dispositivos
La clase Widget es muy importante en Flutter. Hereda de PreferredSizeWidget, ProxyWidget, RenderObjectWidget, StatefulWidget y StatelessWidget. La mayoría de los widgets que usamos diariamente heredan de la clase Widget. Consulte el código fuente de la clase Widget. Su implementación interna es muy simple. El constructor es el siguiente:
La creación de aplicaciones en flutter se construye a través de. árbol de widgets. arriba, por lo que la función de la tecla es controlar el reemplazo de widgets en el árbol de widgets cuando se usa. La clase Key es el identificador único de Widgets, Elements y SemanticsNode. Hereda de Key, así como de LocalKey y GlobalKey. Para obtener más información, puede visitar el archivo framework.dart para ver el código fuente y las instrucciones.
En Flutter, los widgets que usualmente personalizamos generalmente heredan de StatefulWidget o StatelessWidget (no solo estos dos), estos dos widgets son los widgets más utilizados. Si un control no cambia su estado, se mostrará directamente después de su creación y no cambiará de color debido a cambios en el valor, tamaño u otras propiedades. Este tipo de widget generalmente hereda de StatelessWidget, y los más comunes incluyen Container, ScrollView, etc. . Si un control necesita cambiar dinámicamente o corresponder a ciertos estados, como el estado del clic, el valor del color, el área de contenido, etc., generalmente se hereda de StatefulWidget. Los más comunes incluyen CheckBox, AppBar, TabBar, etc. La diferencia entre los dos es si existe estatus. La diferencia entre los dos es si existe estatus.
Para StatelessWidget, el método de compilación se llama en las siguientes tres situaciones:
Podemos ver que se usa un método de compilación similar a StatefulWidget al crear el Estado, lo que significa que es También es posible obtener un BuildContext y usarlo antes de crearlos usando StatefulWidgets. Antes de llamar a initState, el marco asocia el objeto State con BuildContext, y esta asociación es permanente: el objeto State nunca cambia su BuildContext (pero el propio BuildContext se puede mover en el árbol de control). Explicaremos el papel de este objeto BuildContext en todo el programa más adelante
El papel del Estado tiene dos aspectos:
Hay cuatro estados en el ciclo de vida del Estado:
El ciclo de vida completo es el siguiente:
Cuando la configuración del control cambia, se llamará al método State.didUpdateWidget y el marco volverá a dibujar el control. También puede utilizar el método State.setState para notificar al marco cuando cambia el estado, diciéndole que el estado interno del objeto ha cambiado, y el marco también volverá a dibujar el control después de recibir la notificación.
Uno de los métodos más importantes en State es setState, que actualiza los widgets cuando cambia el estado. Por ejemplo, si hace clic en una casilla de verificación, alternará entre estados marcados y no marcados modificando el estado. Si observa el código fuente de setState, encontrará que se generarán algunas excepciones:
Dentro de markNeedsBuild, al marcar el elemento como sucio, se reconstruirá en el siguiente cuadro.
Puede ver que setState no funciona inmediatamente, simplemente marca la pieza y la operación de reconstrucción real no ocurre hasta el siguiente fotograma.
Dos categorías principales de StatefulWidgets:
¿Debo considerar las variables que cambiarán durante la vida útil de mi widget y cuándo se forzará la reconstrucción del widget?
Si la respuesta a la pregunta es sí, entonces necesita un widget con estado; de lo contrario, necesita un widget sin estado.
Por ejemplo: