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

时间:2020-04-20 20:12:31

标签: flutter dart materialpageroute

我正在使用Flutter开发一个应用来播放音乐。

我创建了一个名为MusicService的类,该类具有通过playMusic,seekMusic,onAudioComplete等方法实现的所有音乐功能。

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

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

您有解决此问题的想法吗?我误会了吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

通过使用context中的navigatorKey,可以不用MaterialApp进行导航

首先,您必须声明一个GlobalKey

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

并在您的MaterialApp小部件中使用

child: MaterialApp(
  navigatorKey: navKey,
  ...

在您可以将其推送到新屏幕之后

navKey.currentState.push(...)