Flutter:从 Dart 隔离打印到控制台?

Flutter: Print to console from Dart isolates?

无法在线查找有关此内容的信息。我只是想弄清楚 Dart isolate 中的特定函数是否实际上是 运行。我知道如何做到这一点的唯一方法是使用 print() 函数,但要么我的函数不是 运行,要么来自 isolate 的 print()s 没有出现在控制台使用 flutter run。我什至不知道是哪种情况。

这是我要验证的代码 运行,即 onStart 函数:

void _entrypoint() => AudioServiceBackground.run(() => AudioPlayerTask());

class AudioPlayerTask extends BackgroundAudioTask {
  
  onStart(Map<String, dynamic> params) async {
    print('*** HELLO ***');
  }
}

这是调用代码,来自 Flutter 应用程序的状态:

  initAudio() async {
    // Not sure if this is necessary, but according to some, it is.
    await AudioService.connect();

    // This should run the `onStart` function above.
    await AudioService.start(backgroundTaskEntrypoint: _entrypoint);

    print('*** THIS IS RUNNING ***');
  }

  @override
  void initState() {
    super.initState();

    initAudio();
  }

initAudio() 确实是 运行,正如 print() 中的语句所证明的那样。

所以问题是:我可以从 Dart isolate 中 print() 吗?如果不能,我怎样才能使 isolate 以某种方式表明它是 运行?

所有这些只是为了尝试让 Flutter 包 audio_service 正常工作(特别是版本 0.16.2)。我一直被困在这一点上,只是弄清楚 onStart 是否是 运行。据我所知,它不是运行,但我没有办法证明它。

(额外问题:如果 不是 运行,我想知道为什么不。但这使得问题 audio_service 变得特定,这可能需要一个单独的问题。我已经在使用 home: AudioServiceWidget(child:... 并且 _entrypoint 是顶级的。)

我已经得到一个 isolate 来工作,答案是 是的,打印的字符串应该在 isolate 中可见,至少在调试模式下。

是的,隔离打印在日志上可见。在某些情况下,例如使用 Logger 包时,您可以只将消息从 isolate 发送到主线程并在那里调用记录器。

查看 easy_isolate 插件,它提供了一种使用 isolates 和详尽解释文档的简单方法

https://pub.dev/packages/easy_isolate