Flu*_*ase 2 dart flutter flutter-provider
我有Model要执行的代码。我公司提供Model有Provider。但是如果Model在完成执行之前处理我得到错误:
E/flutter (26180): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常:模型被处理后使用。E/flutter (26180):一旦你在模型上调用了 dispose(),它就不能再使用了。
例如Model,如果用户按后退按钮则处理Navigator.pop()。这是因为Model仅适用于此 Widget。
但这意味着我无法在Model?
我的代码:
class Model extends ChangeNotifier {
bool error = false;
func() {
try {
await execute();
error = false
} catch {
error = true;
print(e.toString());
}
}
}
class ExampleWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
builder: (context) => Model(),
child: Consumer<Model>(builder: (context, model, _) {
return FloatingActionButton(
child: model.error ? Icon(Icons.error) : Icon(Icons.check),
onPressed: () {
model.func();
}
);
…
Run Code Online (Sandbox Code Playgroud)
处理后如何在模型中捕获错误?
我只是遇到了同样的问题。
发生错误是因为您使用其中一种ChangeNotifier方法,通常notifyListeners()(我假设您正在调用,但未包含在粘贴的代码中)在dispose()被调用之后。顺便说一下,这是一个断言错误,所以只在调试版本中。
要消除错误,您可以在notifyListeners()使用自己的标志调用之前检查对象是否已被释放:
class Model extends ChangeNotifier {
bool error = false;
bool isDisposed = false;
func() {
try {
await execute();
error = false
} catch {
error = true;
print(e.toString());
}
if (!isDisposed) {
notifyListeners();
}
}
@override
void dispose() {
isDisposed = true;
super.dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1465 次 |
| 最近记录: |