我正在使用Flutter开发一个应用来播放音乐。
我创建了一个名为MusicService的类,该类具有通过playMusic,seekMusic,onAudioComplete等方法实现的所有音乐功能。
我有一个基于轨道(具有轨道的背景,说明等)构建的TrackScreen。在屏幕的init方法中,我调用MusicService的一个实例在屏幕上播放音乐。到目前为止一切顺利。
我想做的是在轨道完成后建立一个新的屏幕。该屏幕应基于播放列表中的下一首曲目。 我想到的解决方案是在MusicService类的onAudioComplete方法中调用Navigator.Push。问题在于Navigator.Push需要一个上下文,我不知道如何指定它来引用被称为该上下文的上下文,即TrackScreen上下文。
您有解决此问题的想法吗?我误会了吗?
感谢您的帮助
答案 0 :(得分:1)
通过使用context
中的navigatorKey
,可以不用MaterialApp
进行导航
首先,您必须声明一个GlobalKey
final GlobalKey<NavigatorState> navKey = GlobalKey<NavigatorState>();
并在您的MaterialApp小部件中使用
child: MaterialApp(
navigatorKey: navKey,
...
在您可以将其推送到新屏幕之后
navKey.currentState.push(...)