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();
}
}
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);
}
}