Closed abellee closed 2 years ago
@abellee 我理解不存在你说的问题或者是我没太理解。 因为热重载的时只是重新执行build相关的代码,如果初始化和添加监听放到initState应该不会重复执行的。 所以添加监听放到initState里,移除监听放到dispose里就可以。
1、 登出会释放所有已有监听; 2、热重载不会断开socket; 3、单例的话不需要单独处理,但是登出的话需要重新添加监听;
如果方便可以给我提供一个简单的demo,发到邮箱 dujiepeng@easemob.com 或者是加我的QQ 347302029来进一步沟通。
我现在的处理是: 1、
reassemable
下移除监听 2、main
的build
下添加监听,条件是在
模拟器A
运行后,日志输出 只看到触发了一次监听事件,我理解的这是正确的结果。然后这时候我在另外一个
模拟器B
下发起添加好友,但是模拟器A
相应的监听未触发,这个时候我保存一下,即触发热重载,这个时候等于是移除监听并添加监听,添加好友的监听被触发。之后我做了另一个处理,我在登录的时候,会先调用一次登出,登出里会检测
isLoginBefore
,如果true
的话,会先进行登出,登出成功后,取消所有监听。登录成功后,再次添加监听。 这样处理过后,重新运行至模拟器A
,在模拟器B
里添加好友,模拟器A
相应的监听触发成功。经过我反复的测试,结合热重载的环境考虑,我之前的理解是,由于热重载后,导致监听混乱,而无法接收到事件,所以我做了第1、2两点的处理后,得到了解决,后面我把登陆做了细化,是在我们用户登录后再去登陆环信,这个时候我发现,貌似
连接成功
的事件,是在登陆
之后被触发的,也就是说,初始化并添加事件监听之后,其实还并没有连接环信服务器。但是监听又不正常了。 我也尝试了一下直接run
到模拟器里,也就是不用热重载,上面的监听也还是有问题的。我没做过flutter的原生插件,所以我不太理解这里的问题,想请教一下: 1、从现象来看,貌似登出会影响到监听? 2、热重载的时候,原生那边的
socket
会断开? 3、在单例的情况下,这个监听到底需要如何处理,才能保持稳定?感谢!