Flutter 调用dispose()方法内部具有Provider.of(context)的方法会导致;查找停用的小部件';他的祖先是不安全的。”;
当我试图调用状态内的一个方法dispose方法时,如下所示Flutter 调用dispose()方法内部具有Provider.of(context)的方法会导致;查找停用的小部件';他的祖先是不安全的。”;,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,当我试图调用状态内的一个方法dispose方法时,如下所示 @override void dispose() { Provider.of<AppProvider>(context, listen: false).close(); super.dispose(); } 我用AppProvider包装了MaterialApp return Provider<AppProvider>( create: (_) => AppProv
@override
void dispose() {
Provider.of<AppProvider>(context, listen: false).close();
super.dispose();
}
我用AppProvider包装了MaterialApp
return Provider<AppProvider>(
create: (_) => AppProvider(),
child: MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomeScreen(),
},
),
);
@覆盖
无效停用(){
Provider.of(上下文,侦听:false)
.close();
super.deactivate();
}
似乎您正在尝试关闭AppProvider类中定义的某个对象。如果AppProvider类正在扩展ChangeNotifier,则change notifier类提供dispose方法,您可以重写它,然后仅在AppProvider类内调用close函数。据我记忆所及,这种行为很久以前就出现了,我通常使用以下方法来解决:
类MyWidget扩展了StatefulWidget{
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState使用AfterLayoutMixin扩展状态{
AppProvider\u AppProvider;
@凌驾
void afterFirstLayout(BuildContext上下文){
_appProvider=Provider.of(上下文,侦听:false);
}
@凌驾
无效处置(){
_appProvider.close();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回容器(
// ...
);
}
}
我没有扩展ChangeNotifier。我不确定,但当尝试在dispose()
的内部使用context
时,它会引发异常。
class AppProvider {
close() {}
}
return Provider<AppProvider>(
create: (_) => AppProvider(),
child: MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomeScreen(),
},
),
);
AppProvider _appProvider;
@override
void didChangeDependencies() {
_appProvider = Provider.of<AppProvider>(context, listen: false);
super.didChangeDependencies();
}
@override
void dispose() {
_appProvider.close();
super.dispose();
}
@override
void deactivate() {
Provider.of<AppProvider>(context, listen: false)
.close();
super.deactivate();
}