Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 调用dispose()方法内部具有Provider.of(context)的方法会导致;查找停用的小部件';他的祖先是不安全的。”;_Flutter_Dart_Flutter Layout - Fatal编程技术网

Flutter 调用dispose()方法内部具有Provider.of(context)的方法会导致;查找停用的小部件';他的祖先是不安全的。”;

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

当我试图调用状态内的一个方法dispose方法时,如下所示

  @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();
  }