Code Monkey home page Code Monkey logo

Comments (25)

YDJSZY avatar YDJSZY commented on July 20, 2024

在模拟器只要重新运行就会加一次回调

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

你好,请确定 addListener 只运行了一次,或 及时 removeListener

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

请检查是否移除监听成功

from fluttertencentimplugin.

YDJSZY avatar YDJSZY commented on July 20, 2024

我发现只要重新flutter run就不会了。但之后每次R运行就会加一次回调。确定在页面dispose时都有移除监听了。

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

因为Flutter热加载机制在部分情况下会重新运行 initState 方法,且不会运行 dispose 方法,所以请注意热加载时的问题!

from fluttertencentimplugin.

YDJSZY avatar YDJSZY commented on July 20, 2024

好的,谢谢!

from fluttertencentimplugin.

YDJSZY avatar YDJSZY commented on July 20, 2024

顺便问下getMessages能做分页么

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

getMessage 目前支持分页,只需要传 lastMessage 参数即可

from fluttertencentimplugin.

YDJSZY avatar YDJSZY commented on July 20, 2024

我想移除监听是不是有问题,就算我在initState里先remove再addlisten,回调还是一次次增加

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

removeListener 以及 addListener 需要接收一个方法引用,当你对象不相同时,就没法移除其它对象的引用。请确保 removeListener 传入的方法和addListener传入的方法相同。

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

所以在引用不相同的情况下,先remove始终会无效,这是Dart机制。

from fluttertencentimplugin.

YDJSZY avatar YDJSZY commented on July 20, 2024

TencentImPlugin.removeListener(_messageListener);
TencentImPlugin.addListener(_messageListener);
是同一个的。

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

同一个的判定条件还有对象,也就是类的对象

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

假设你在对象A中添加,是没有办法在对象B中移除,即使他们的方法是相同的。因为他们在内存中的“址”是不相同的。

from fluttertencentimplugin.

YDJSZY avatar YDJSZY commented on July 20, 2024

@OverRide
void initState() {
super.initState();
TencentImPlugin.removeListener(_messageListener);
TencentImPlugin.addListener(_messageListener);
}

_messageListener(ListenerTypeEnum type, params) {}
就这样呀,在同一个文件里。同一个类里

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

同一个文件,同一个类,不代表“对象”相同,对象是类的实例化,类只是抽象的表述。

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

你可通过Debug模式排查,在 initState 中和dispose 中进行打断点排查,确保调用 addListener 和 removeListener 是正确的.

from fluttertencentimplugin.

YDJSZY avatar YDJSZY commented on July 20, 2024

我觉得监听跟移除监听写法应该没错的。在同一个文件同一个页面里。

from fluttertencentimplugin.

YDJSZY avatar YDJSZY commented on July 20, 2024

你没遇到过吗?shift+R重新进入聊天界面,监听回调多执行了一次

from fluttertencentimplugin.

YDJSZY avatar YDJSZY commented on July 20, 2024

必须要关闭重新flutter run才回到一次

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

因为Flutter热加载机制在部分情况下会重新运行 initState 方法,且不会运行 dispose 方法,所以请注意热加载时的问题!

请检查是否多次调用 addListener 或 removeListener 不及时

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

我觉得监听跟移除监听写法应该没错的。在同一个文件同一个页面里。

据上面所说,同一个类、同一文件,创建两个对象后,他们内部的方法引用是不相同的。
如果你需要验证 先remove再add,请将回调方法更改为 static.

from fluttertencentimplugin.

YDJSZY avatar YDJSZY commented on July 20, 2024

看来是热重载时dispose没执行导致监听没被移除掉,这样在模拟器无解了?官方好像没提供解决方法

from fluttertencentimplugin.

JiangJuHong avatar JiangJuHong commented on July 20, 2024

from fluttertencentimplugin.

YDJSZY avatar YDJSZY commented on July 20, 2024

嗯,只是开发时有点麻烦。谢谢

from fluttertencentimplugin.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.