Flutter: método de ejecución en la compilación del widget completa

Resuelto KingLagalot asked hace 6 años • 0 respuestas

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?

KingLagalot avatar Mar 24 '18 22:03 KingLagalot
Aceptado

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));
  }
Thomas avatar Jun 04 '2018 14:06 Thomas

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));
anmol.majhail avatar Feb 06 '2019 11:02 anmol.majhail

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.

Jitesh Mohite avatar Oct 03 '2020 16:10 Jitesh Mohite