实施 WillPopScope 后,Flutter Video 屏幕不会在完成时关闭

Flutter Video screen not closing on completion when WillPopScope implemented

我最近在我的应用程序的 VideoPlayer 包上实现了 WillPopScope:

child: WillPopScope(
                  onWillPop: () async => false,
                  child: VideoPlayer(_controller),
                ),

我用它来停止向后滑动,那是以前发生的。效果很好。

然而,它导致了另一个错误。当 VideoPlayer 完成时,它应该关闭屏幕,并且不再发生这种情况。之前用的很好

这是我的退出屏幕代码:

void closeScreen() async {
  final _exercises = Provider.of<Exercises>(context, listen: false);
  _exercises.increasePlayCount(widget.exercise.id);
  print('VIDEO FINISHED ... CLOSE!!');
  widget.exercise.setRecentPlayed(widget.exercise);
  Navigator.of(context).maybePop();
  SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,
    overlays: [SystemUiOverlay.top]);
}

由于打印语句正在按预期执行,因此该方法被正常调用。

我试过更改 WillPopScope 的位置,但这并没有解决问题。有人可以告诉我如何纠正这个问题吗?

非常感谢

我建议确保您的小部件是 StatefulWidget,并执行如下操作:

向状态添加一个布尔值,指示视频是否已播放完毕:

bool isFinished = false;

像这样改变你的WillPopScope

WillPopScope(
  onWillPop: () async => isFinished,
  child: VideoPlayer(_controller),
)

最后,更新您的 closeVideo 以切换 isFinished

的值
void closeScreen() async {
  final _exercises = Provider.of<Exercises>(context, listen: false);
  _exercises.increasePlayCount(widget.exercise.id);
  isFinished = true;
  print('VIDEO FINISHED ... CLOSE!!');
  widget.exercise.setRecentPlayed(widget.exercise);
  Navigator.of(context).maybePop();
  SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,
    overlays: [SystemUiOverlay.top]);
}