使用FlutterStreaming时在FlutterEngine运行之前发送消息

x6h2sr28  于 2023-10-22  发布在  Flutter
关注(0)|答案(1)|浏览(204)

我正在使用flutter_live_activities在我的应用上添加对Live Activities的支持。最近我注意到一个不一致的异常:

NSInternalInconsistencyException
Sending a message before the FlutterEngine has been run.

通过进一步的调查,我意识到这个异常是从flutter_live_activities的侦听器抛出的,该侦听器是在Flutter主应用程序处于后台时引发的。此侦听器调用使用FlutterEventSink协议创建的FlutterEventSink流。当尝试添加到此流时,应用程序崩溃,出现上述异常。下面是重现问题的调用堆栈:

  • 应用程序进入后台
  • 在这里,
  • 引发异常

看起来流必须以某种方式处理,但插件似乎在这里正确地实现了流处理:

public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
    if let args = arguments as? String{
      if (args == "urlSchemeStream") {
        urlSchemeSink = events
      } else if (args == "activityUpdateStream") {
        activityEventSink = events
      }
    }
    
    return nil
  }
  
  public func onCancel(withArguments arguments: Any?) -> FlutterError? {
    if let args = arguments as? String{
      if (args == "urlSchemeStream") {
        urlSchemeSink = nil
      } else if (args == "activityUpdateStream") {
        activityEventSink = nil
      }
    }
    return nil
  }

在这种情况下,什么应该被处理,而它没有被处理?

vql8enpb

vql8enpb1#

当引擎被破坏时,通过在插件iOS端处理Flutter接收器和侦听器来修复该问题。
请参阅https://github.com/flutter/flutter/issues/135613以获得更深入的解释和其他详细解释此问题的有用链接。

相关问题