Flutter: método de ejecución en la compilación del widget completa
Me gustaría poder ejecutar funciones una vez que un widget haya terminado de compilarse/cargarse, pero no estoy seguro de cómo.
Mi caso de uso actual es verificar si un usuario está autenticado y, en caso contrario, redirigirlo a una vista de inicio de sesión. No quiero verificar antes y presionar la vista de inicio de sesión o la vista principal, esto debe suceder después de que se haya cargado la vista principal.
¿Hay algo que pueda usar para hacer esto?
Podrías usar
https://github.com/slightfoot/flutter_after_layout
que ejecuta una función solo una vez después de completar el diseño. O simplemente mira su implementación y agrégala a tu código :-)
Que es básicamente
void initState() {
super.initState();
WidgetsBinding.instance
.addPostFrameCallback((_) => yourFunction(context));
}
ACTUALIZACIÓN: Aleteo v1.8.4
Ambos códigos mencionados están funcionando ahora:
Laboral:
WidgetsBinding.instance
.addPostFrameCallback((_) => yourFunction(context));
Laboral
import 'package:flutter/scheduler.dart';
SchedulerBinding.instance.addPostFrameCallback((_) => yourFunction(context));
Las mejores formas de hacer esto,
1. Vinculación de widgets
WidgetsBinding.instance.addPostFrameCallback((_) {
print("WidgetsBinding");
});
2. Enlace del programador
SchedulerBinding.instance.addPostFrameCallback((_) {
print("SchedulerBinding");
});
Se puede llamar internamente initState
, ambos se llamarán solo una vez después de que los widgets de compilación terminen con el renderizado.
@override
void initState() {
// TODO: implement initState
super.initState();
print("initState");
WidgetsBinding.instance.addPostFrameCallback((_) {
print("WidgetsBinding");
});
SchedulerBinding.instance.addPostFrameCallback((_) {
print("SchedulerBinding");
});
}
Ambos códigos anteriores funcionarán igual ya que ambos usan un marco de enlace similar.