Государственное управление - это единственное, что они бросили в этом отношении.Я использовал статические переменные (если мне нужно обмениваться данными между состояниями) и GlobalKeys (только для одного быстрого, грязного решения), чтобы сделать это.Мы предположительно будем использовать InheritedWidgets, это просто невероятно для чего-то, что должно быть простым.Обычно я просто делаю это:
// top of code here - this is global
final videoPlayerKey = GlobalKey();
class VideoPlayerContainer extends StatelessWidget {
static VideoPlayerController videoPlayerController;
...
@override
Widget build(BuildContext context) {
videoPlayerController = VideoPlayerController(...);
// the static variable is empty until the container is built
return Container(
child: VideoPlayer(
child: PlayButton(onTap: () =>
videoPlayerKey.currentState.setState(
() => VideoPlayerContainer.videoPlayerController.play();
))
),
);
}
}
class VideoPlayer extends StatefulWidget {
final Key key = videoPlayerKey;
...
}
class VideoPlayerState extends State<VideoPlayer> {
...
}
Нам нужно получить currentState videoPlayerKey для использования setState () и перезапустить метод сборки, чтобы он знал, обновить , и тогда мы можем получитьконтроллер для игрока, где бы он ни хранился, используя статическую переменную.Это может быть в VideoPlayer или в любом другом месте, которого нет в VideoPlayerContainer, потому что он статический - просто важно назначить GlobalKey для любого виджета, который необходимо будет перестроить.Это будет работать, потому что всякий раз, когда пользователь может нажать на кнопку, статическая переменная будет установлена для любого пустого места для чтения методом build () VideoPlayerContainer.Для этого метода важно отметить, что более важно присоединить GlobalKey к элементу, который необходимо обновить - вы можете поместить static pageController буквально везде и установить его из любой точки в build () или initState ().
Примечания. Это не будет работать, если вы попытаетесь использовать несколько VideoPlayers в одном макете, потому что GlobalKeys должны быть уникальными, и все VideoPlayers будут инициализированы с одним и тем же ключом.Это скорее грязный взлом, чем что-либо другое.Сейчас я работаю над более надежным решением для управления состоянием, чтобы решить подобные вещи.