現在、状態管理ソリューションとしてProviderを試していますが、initState関数内では使用できないことを理解しています。
私が見たすべての例では、ユーザーアクション(たとえば、ユーザーがボタンをクリックする)時に派生ChangeNotifier
クラス内のメソッドを呼び出しますが、状態を初期化するときにメソッドを呼び出す必要がある場合はどうなりますか?
動機:アセットを読み込み(非同期)、進行状況を表示する画面を作成する
ChangeNotifier
クラスの例(add
からinitState
を呼び出すことはできません):
import 'package:flutter/foundation.Dart';
class ProgressData extends ChangeNotifier {
double _progress = 0;
double get progress => _progress;
void add(double dProgress) {
_progress += dProgress;
notifyListeners();
}
}
したがって、その進捗状況を報告するAssetLoaderクラスは次のようになります。
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);
}
}