Flutter 在dispose方法中获取提供程序方法无效
我正在尝试访问dispose函数中的提供程序方法Flutter 在dispose方法中获取提供程序方法无效,flutter,dart,flutter-provider,Flutter,Dart,Flutter Provider,我正在尝试访问dispose函数中的提供程序方法 @override void dispose() { if (canRemoveData) Provider.of<MyProvider>(context, listen: false).clearData(); super.dispose(); } @覆盖 无效处置(){ if(canRemoveData)Provider.of(context,listen:false).clearData(); super.dispos
@override
void dispose() {
if (canRemoveData) Provider.of<MyProvider>(context, listen: false).clearData();
super.dispose();
}
@覆盖
无效处置(){
if(canRemoveData)Provider.of(context,listen:false).clearData();
super.dispose();
}
但是当它被调用时,我得到了一个错误:
完成小部件树时引发了以下断言:
查找停用小部件的祖先是不安全的
此时,小部件的元素树的状态不再是
马厩
我做错了什么?如何修复它?错误描述基本上说明了一切。
dispose()
方法用于处理小部件的状态依赖项和控制器,因此此时不应尝试查找此小部件的祖先,因为您的小部件已从小部件树中删除
您应该在您的状态中创建一个变量,并在initState()
中提供MyProvider
值。然后您可以从dispose调用MyProvider#clearData(),如下所示:
class _MyWidgetState extends State<MyWidget> {
MyProvider _myProvider;
@override
void initState() {
super.initState();
_myProvider = Provider.of<MyProvider>(context, listen: false);
}
@override
void dispose() {
if (canRemoveData) _myProvider.clearData();
super.dispose();
}
@override
Widget build(BuildContext context) {
// implement
}
}
class\u MyWidgetState扩展状态{
MyProvider\u MyProvider;
@凌驾
void initState(){
super.initState();
_myProvider=Provider.of(上下文,listen:false);
}
@凌驾
无效处置(){
if(canRemoveData)_myProvider.clearData();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
//实施
}
}
此外,如果您将MyProvider作为小部件的直接父级提供,并且在其dispose后,您将不需要MyProvider在其他任何地方,您可以使用ProxyProvider dispose方法,如下所示:
ProxyProvider<SomeDependency, MyProvider>(
update: (context, someDependency, previous) => previous ?? MyProvider(someDependency),
dispose: (context, myProvider) => myProvider.clearData(),
),
ProxyProvider(
更新:(上下文,someDependency,previous)=>previous??MyProvider(someDependency),
dispose:(上下文,myProvider)=>myProvider.clearData(),
),