-
-
Notifications
You must be signed in to change notification settings - Fork 55
监听回调多次触发 #45
Comments
在模拟器只要重新运行就会加一次回调 |
你好,请确定 addListener 只运行了一次,或 及时 removeListener |
请检查是否移除监听成功 |
我发现只要重新flutter run就不会了。但之后每次R运行就会加一次回调。确定在页面dispose时都有移除监听了。 |
因为Flutter热加载机制在部分情况下会重新运行 initState 方法,且不会运行 dispose 方法,所以请注意热加载时的问题! |
好的,谢谢! |
顺便问下getMessages能做分页么 |
getMessage 目前支持分页,只需要传 |
我想移除监听是不是有问题,就算我在initState里先remove再addlisten,回调还是一次次增加 |
removeListener 以及 addListener 需要接收一个方法引用,当你对象不相同时,就没法移除其它对象的引用。请确保 removeListener 传入的方法和addListener传入的方法相同。 |
所以在引用不相同的情况下,先remove始终会无效,这是Dart机制。 |
TencentImPlugin.removeListener(_messageListener); |
同一个的判定条件还有对象,也就是类的对象 |
假设你在对象A中添加,是没有办法在对象B中移除,即使他们的方法是相同的。因为他们在内存中的“址”是不相同的。 |
@OverRide _messageListener(ListenerTypeEnum type, params) {} |
同一个文件,同一个类,不代表“对象”相同,对象是类的实例化,类只是抽象的表述。 |
你可通过Debug模式排查,在 initState 中和dispose 中进行打断点排查,确保调用 addListener 和 removeListener 是正确的. |
我觉得监听跟移除监听写法应该没错的。在同一个文件同一个页面里。 |
你没遇到过吗?shift+R重新进入聊天界面,监听回调多执行了一次 |
必须要关闭重新flutter run才回到一次 |
请检查是否多次调用 addListener 或 removeListener 不及时 |
据上面所说,同一个类、同一文件,创建两个对象后,他们内部的方法引用是不相同的。 |
看来是热重载时dispose没执行导致监听没被移除掉,这样在模拟器无解了?官方好像没提供解决方法 |
我认为这是不需要解决的,因为在发布app时,它不会再出现热加载。
|
嗯,只是开发时有点麻烦。谢谢 |
dispose时有移除监听,但下次进来还是会多次触发
The text was updated successfully, but these errors were encountered: