在 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(...)
我正在构建一个使用 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(...)