我目前正在尝试将 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();
}
}
Run Code Online (Sandbox Code Playgroud)
Rém*_*let 14
您可以从您的构造函数调用此类方法ChangeNotifier:
class MyNotifier with ChangeNotifier {
MyNotifier() {
someMethod();
}
void someMethod() {
// TODO: do something
}
}
Run Code Online (Sandbox Code Playgroud)
将您的代码更改为此
class ProgressData extends ChangeNotifier {
double _progress = 0;
double get progress => _progress;
void add(double dProgress) async {
// Loading Assets maybe async process with its network call, etc.
_progress += dProgress;
notifyListeners();
}
ProgressData() {
add();
}
}
Run Code Online (Sandbox Code Playgroud)
在 initState 中,所有 of(context) 事物都无法正常工作,因为小部件未与 initState 中的所有事物完全连接。您可以使用此代码:
Provider.of<ProgressData>(context, listen: false).add(progress);
Run Code Online (Sandbox Code Playgroud)
或者这段代码:
Future.delayed(Duration.zero).then((_) {
Provider.of<ProgressData>(context).add(progress)
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10390 次 |
| 最近记录: |