Используйте Navigator.push (MaterialPageRoute) в методе класса

Я создаю приложение, использующее Flutter для воспроизведения музыки.

Я создал класс MusicService со всеми музыкальными функциями, реализованными в таких методах, как playMusic, seekMusic, onAudioComplete и так далее.

У меня есть TrackScreen, построенный на основе трека (с фоном трека, описанием и т. Д.). В методе инициализации экрана я вызываю функцию MusicService для воспроизведения музыки на экране. Все идет нормально.

Я хотел бы создать новый экран, когда трек будет завершен. Этот экран должен быть основан на следующем треке в списке воспроизведения. Решение, которое я думаю, - вызвать Navigator.Push в методе onAudioComplete класса MusicService. Проблема в том, что Navigator.Push требует контекста, и я не знаю, как его указать для ссылки на контекст, в котором он вызывается, то есть контекст TrackScreen.

Есть идея решить эту проблему? Я что-то не понимаю?

Спасибо вам за помощь

1 ответ

Решение

Вы можете перемещаться без context используя navigatorKey вашей MaterialApp

Во-первых, вы должны объявить GlobalKey

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

и используйте его в своем виджете MaterialApp

child: MaterialApp(
  navigatorKey: navKey,
  ...

После того, как вы сможете заставить его нажимать новые экраны

navKey.currentState.push(...)
Другие вопросы по тегам