153 votes

setState() appelé après dispose()

Lorsque je clique sur le bouton surélevé, le sélecteur de temps s'affiche. Maintenant, si j'attends 5 secondes et que je confirme l'heure, cette erreur se produit. setState() appelé après dispose()

Je vois littéralement dans la console comment flutter met à jour les widgets parents, mais pourquoi ? - Je ne fais rien, j'attends juste 5 secondes ! Cet exemple fonctionnera dans un projet normal, mais dans mon projet, qui est beaucoup plus complexe, il ne fonctionnera pas car flutter met à jour les états pendant que j'attends... Qu'est-ce que j'ai fait de mal ? Quelqu'un a-t-il une idée de ce qui pourrait expliquer que flutter mette à jour les états de manière aléatoire dans mon projet plus complexe et pas dans un projet simple ?

[MISE À JOUR] J'ai vérifié que la mise à jour se fait à partir du niveau où se trouvent ma TabBar et ma TabBarView. Cela pourrait-il avoir un rapport avec l'élément " avec TickerProviderStateMixin "dont j'ai besoin pour la vue de la barre d'onglets ? Cela pourrait-il être dû au fait que l'application se rafraîchit régulièrement et de manière aléatoire ?

 class DateTimeButton extends State<DateTimeButtonWidget> {
  DateTime selectedDate = new DateTime.now();

  Future initTimePicker() async {
    final TimeOfDay picked = await showTimePicker(
      context: context,
      initialTime: new TimeOfDay(hour: selectedDate.hour, minute: selectedDate.minute),
    );

    if (picked != null) {
      setState(() {
        selectedDate = new DateTime(selectedDate.year, selectedDate.month, selectedDate.day, picked.hour, picked.minute);
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return new RaisedButton(
      child: new Text("${selectedDate.hour} ${selectedDate.minute}"),
      onPressed: () {
        initTimePicker();
      }
    );
  }
}

0 votes

"avec TickerProviderStateMixin" - oui, je pense que cela entraîne la reconstruction de votre widget.

2voto

Prime Points 165

Essayez ceci

Widget build(BuildContext context) {
    return new RaisedButton(
        child: new Text("${selectedDate.hour} ${selectedDate.minute}"),
        onPressed: () async {
            await initTimePicker();
        }
    );
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X