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