在 class 方法中使用 Navigator.push (MaterialPageRoute)

Use Navigator.push (MaterialPageRoute) in a class method

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

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

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

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

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

感谢您的帮助

您可以使用 MaterialApp

navigatorKey 在没有 context 的情况下导航

首先,您必须声明一个 GlobalKey

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

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

child: MaterialApp(
  navigatorKey: navKey,
  ...

拿到后就可以推新屏了

navKey.currentState.push(...)