Dart 有没有办法找到对象的范围?

Dart 有没有办法找到对象的范围?,dart,flutter,Dart,Flutter,我正在开发一个flatter插件,它在dart代码中实例化对象,映射本机端的其他对象。我希望在本机代码中的对象的作用域在dart代码处结束后,通过删除它们来保留内存。如果您对管理资源的Flatter框架没有意见,您可以将它们包装在状态对象中。 一旦引用的有状态小部件从小部件树中永久删除,框架将调用dispose() (1) 易于实现-无需控制 class ResourceManager extends StatefulWidget { @override State<Statefu

我正在开发一个flatter插件,它在dart代码中实例化对象,映射本机端的其他对象。我希望在本机代码中的对象的作用域在dart代码处结束后,通过删除它们来保留内存。

如果您对管理资源的Flatter框架没有意见,您可以将它们包装在状态对象中。 一旦引用的有状态小部件从小部件树中永久删除,框架将调用dispose()

(1) 易于实现-无需控制

class ResourceManager extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => ResourceManagerState();
}

class ResourceManagerState extends State<ResourceManager>{
  Resource referenceToResource;
  @override
  void initState() {
    // create/open your unmanaged resource here
    super.initState();
  }

  @override
  void dispose() {
    // close/destroy your resource here
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return SomeWidgetThatUsesTheResource();
  }
}
class ResourceManager扩展StatefulWidget{
@凌驾
State createState()=>ResourceManagerState();
}
类ResourceManagerState扩展状态{
资源参考资源;
@凌驾
void initState(){
//在此处创建/打开非托管资源
super.initState();
}
@凌驾
无效处置(){
//关闭/销毁您的资源
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回使用Resource()的someWidget;
}
}
如果你需要对资源有更多的控制,事情会变得更复杂。垃圾收集器不会在小部件超出范围时释放资源,而是在稍后(或者可能仅在应用程序终止时)释放资源

或者,您可以使用didChangeDependencies管理资源,并停用状态对象的方法。我希望这些调用更加可靠,并且在时间上更接近资源的实际范围更改:

(2) 仍然很简单-稍微更易于控制

class ResourceManager extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => ResourceManagerState();
}

class ResourceManagerState extends State<ResourceManager>{
  Resource referenceToResource;

  @override
  void didChangeDependencies() {
    if(referenceToResource = null) {
      // open/create resource here
    }
    super.didChangeDependencies();
  }

  @override
  void deactivate() {
    // close/destroy your resource here
    super.deactivate();
  }

  @override
  Widget build(BuildContext context) {
    return SomeWidgetThatUsesTheResource();
  }
} 
class ResourceManager扩展StatefulWidget{
@凌驾
State createState()=>ResourceManagerState();
}
类ResourceManagerState扩展状态{
资源参考资源;
@凌驾
void didChangeDependencies(){
if(referenceToResource=null){
//在此处打开/创建资源
}
super.didChangeDependencies();
}
@凌驾
无效停用(){
//关闭/销毁您的资源
super.deactivate();
}
@凌驾
小部件构建(构建上下文){
返回使用Resource()的someWidget;
}
} 
(3) 需要一些工作-甚至更多的控制

如果您需要可靠地管理有限数量的资源,您可以查看Flatter的池插件:

您想如何从内存中删除它们?它们是在应用生命周期内保存的静态列表中创建的。一旦它们的作用域在dart代码中结束,我想将它们从列表中删除。它们的作用域如何提前结束?你刚才说列表会一直持续到应用程序死亡。事情是这样的:作为插件的用户,你可以实例化一个对象,例如在一个有限范围的函数中。此对象通过ID将一个新对象添加到本机代码的列表中。我想要的是,如果对象的范围以dart结尾,请从本机代码的列表中删除该对象。该列表将持续存在,直到应用程序死亡,但此列表仅位于本机端。