Flutter 颤振:在构建方法之外的小部件实例变量中存储依赖项可以吗?
在我的flatter应用程序中,我使用Flutter 颤振:在构建方法之外的小部件实例变量中存储依赖项可以吗?,flutter,Flutter,在我的flatter应用程序中,我使用get_it检索与小部件无关的依赖项(例如http服务) 我看到的大多数flatterWidget示例没有在Widget类中保存任何变量,而是在#build方法中检索它们。这对于依赖于上下文的依赖项是有意义的,但是对于不依赖于上下文的其他依赖项,调用构造函数时是否可以将它们保存为实例变量? 我不太熟悉小部件的生命周期,所以我不确定如果丢弃小部件实例,这是否会导致内存泄漏等。我想将它们保存为变量,因为它更清楚地记录了依赖关系 获取#构建 我看不出为什么不能将它
get_it
检索与小部件无关的依赖项(例如http服务)
我看到的大多数flatterWidget
示例没有在Widget类中保存任何变量,而是在#build
方法中检索它们。这对于依赖于上下文的依赖项是有意义的,但是对于不依赖于上下文的其他依赖项,调用构造函数时是否可以将它们保存为实例变量?
我不太熟悉小部件的生命周期,所以我不确定如果丢弃小部件实例,这是否会导致内存泄漏等。我想将它们保存为变量,因为它更清楚地记录了依赖关系
获取#构建
我看不出为什么不能将它们存储为实例变量
显然,您不能以手动/干净的方式处理实例变量,必须依靠垃圾收集器来完成它应该做的事情。这可能被视为一个缺点。在您的情况下,我认为这不是一个问题,因为该服务可能贯穿应用程序的整个生命周期
如果您对内存泄漏非常紧张,请使用有状态的小部件并处理需要处理的东西
如果您非常清楚地想要记录依赖关系,您可以进一步要求它作为小部件的参数。它还将使小部件更易于测试。我认为没有理由不能将它们存储为实例变量
显然,您不能以手动/干净的方式处理实例变量,必须依靠垃圾收集器来完成它应该做的事情。这可能被视为一个缺点。在您的情况下,我认为这不是一个问题,因为该服务可能贯穿应用程序的整个生命周期
如果您对内存泄漏非常紧张,请使用有状态的小部件并处理需要处理的东西
如果您非常清楚地想要记录依赖关系,您可以进一步要求它作为小部件的参数。它还将使小部件更易于测试
class MyWidget extends StatelessWidget {
@override
Widget build() {
var myService = GetIt.instance.get<MyService>();
}
}
class MyWidget extends StatelessWidget {
final MyService myService;
MyWidget(): myService = GetIt.instance.get();
@override
Widget build() {
}
}