web-dev-qa-db-fra.com

Fournisseur Flutter dans initState

J'essaie actuellement Provider comme solution de gestion d'état, et je comprends qu'elle ne peut pas être utilisée dans la fonction initState.

Tous les exemples que j'ai vus appellent une méthode à l'intérieur d'une classe ChangeNotifier dérivée lors d'une action de l'utilisateur (l'utilisateur clique sur un bouton, par exemple), mais que faire si j'ai besoin d'appeler une méthode lors de l'initialisation de mon état?

Motivation: création d'un écran qui charge les ressources (asynchrones) et affiche la progression

Un exemple pour la classe ChangeNotifier (ne peut pas appeler add depuis initState):

import 'package:flutter/foundation.Dart';

class ProgressData extends ChangeNotifier {
  double _progress = 0;

  double get progress => _progress;

  void add(double dProgress) {
    _progress += dProgress;
    notifyListeners();
  }
}
7
user6097845

Donc, une classe AssetLoader qui rend compte de sa progression ressemblera à ceci, je suppose:

import 'package:flutter/foundation.Dart';

class ProgressData extends ChangeNotifier {
  double _progress = 0;

  ProgressData() {
    _loadFake();
  }

  Future<void> _loadFake() async {
    await _delayed(true, Duration(seconds: 1));
    _add(1.0);
    await _delayed(true, Duration(seconds: 2));
    _add(2.0);
    await _delayed(true, Duration(seconds: 3));
    _add(3.0);
  }

  // progress
  double get progress => _progress;

  // add
  void _add(double dProgress) {
    _progress += dProgress;
    notifyListeners();
  }

  // _delayed
  Future<dynamic> _delayed(dynamic returnVal, Duration duration) {
    return Future.delayed(duration, () => returnVal);
  }
}
0
user6097845