0

我正在构建一个使用 Flutter 播放音乐的应用程序。

我创建了一个名为 MusicService 的类,其中所有音乐功能都在 playMusic、seekMusic、onAudioComplete 等方法中实现。

我有基于轨道构建的 TrackScreen(带有轨道背景、描述等)。在屏幕的 init 方法中,我调用了 MusicService 的一个实例来在屏幕上播放音乐。到目前为止,一切都很好。

我想做的是在轨道完成后构建一个新屏幕。此屏幕应基于播放列表中的下一首曲目。我认为的解决方案是在 MusicService 类的 onAudioComplete 方法中调用 Navigator.Push。问题是 Navigator.Push 需要一个上下文,我不知道如何指定它来引用它被调用的上下文,即 TrackScreen 上下文。

你有解决这个问题的想法吗?我是不是误会了什么?

感谢您的帮助

4

1 回答 1

1

您可以不context使用navigatorKey您的MaterialApp

首先,您必须声明一个 GlobalKey

final GlobalKey<NavigatorState> navKey = GlobalKey<NavigatorState>();

并在您的 MaterialApp 小部件中使用它

child: MaterialApp(
  navigatorKey: navKey,
  ...

之后你就可以让它推送新的屏幕了

navKey.currentState.push(...)
于 2020-04-20T20:34:25.543 回答