【发布时间】:2018-09-24 16:07:57
【问题描述】:
我正处于学习Dart 和Flutter 的早期阶段。我正在研究如何实现eventbus,它可以正常工作,但我注意到小部件(和/或其关联状态)对(全局)事件总线有很强的引用,从而导致内存泄漏。解决方案是在小部件状态的 dispose 方法中取消订阅,但我想知道是否有更好的方法(我来自 Swift,它允许将变量声明为“弱”)。
编辑
我最终将状态子类化如下...有更好的建议吗?
abstract class CustomState<T extends StatefulWidget> extends State {
List<StreamSubscription> eventSubscriptions = [];
void subscribeToEvent(Object eventClass, Function callback) {
StreamSubscription subscription = eventBus.on(eventClass).listen(callback);
eventSubscriptions.add(subscription);
}
void dispose() {
super.dispose();
eventSubscriptions.forEach((subscription) => subscription.cancel());
eventSubscriptions = null;
}
}
class MyEvent {
String text;
MyEvent(this.text);
}
class _MyHomePageState extends CustomState<MyHomePage> {
@override
void initState() {
super.initState();
subscribeToEvent(MyEvent, onEventFired);
}
void onEventFired(event) {
print('event fired: ${event.runtimeType} ${event.text}');
}
}
【问题讨论】:
标签: memory-leaks dart flutter weak-references circular-reference