web-dev-qa-db-ja.com

initStateのFlutterプロバイダー

現在、状態管理ソリューションとして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();
  }
}
7
user6097845

したがって、その進捗状況を報告する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);
  }
}
0
user6097845