实施 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]);
}
我最近在我的应用程序的 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]);
}