扑动YouTube播放器不旋转当我旋转屏幕



Flutter dev你好吗?我的代码中的问题是,当我旋转屏幕时,我的flutter应用程序中的YouTube播放器不旋转,这意味着YouTube播放器始终处于纵向形式,但我希望当设备处于纵向形式时,YouTube播放器自动进入纵向形式,当设备处于横向形式时,YouTube播放器进入横向形式并覆盖屏幕,如YouTube。

这是我的颤振代码

class YoutubePlayerWidget extends StatefulWidget {
final String videoUrl;
final UniqueKey newKey;
YoutubePlayerWidget({@required this.videoUrl, this.newKey});
@override
_YoutubePlayerWidgetState createState() => _YoutubePlayerWidgetState();
}
class _YoutubePlayerWidgetState extends State<YoutubePlayerWidget> {
// String videoURL = "https://www.youtube.com/watch?v=n8X9_MgEdCg";
YoutubePlayerController _controller;
void initState() {
_controller = YoutubePlayerController(
initialVideoId: YoutubePlayer.convertUrlToId(widget.videoUrl));
super.initState();
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async => false,
child: Scaffold(
body: Container(
color: Colors.black,
child: Align(
alignment: Alignment.center,
child: FittedBox(
fit: BoxFit.cover,
child: YoutubePlayer(
controller: _controller,
showVideoProgressIndicator: true,
),
),
),
),
),
);
}
}

我在这个项目中的第二个代码在这里

class YoutubeScreen extends StatefulWidget {
static const routeName = '/youtube';
@override
_YoutubeScreenState createState() => _YoutubeScreenState();
}
class _YoutubeScreenState extends State<YoutubeScreen> {
String videoURL = "https://www.youtube.com/watch?v=n8X9_MgEdCg";
YoutubePlayerController _controller;
void initState() {
_controller = YoutubePlayerController(
initialVideoId: YoutubePlayer.convertUrlToId(videoURL));
super.initState();
}
Future<bool> _willPopCallback() async {
// await showDialog or Show add banners or whatever
// then
return true; // return true if the route to be popped
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: _willPopCallback,
child: OrientationBuilder(
builder: (BuildContext context, Orientation orientation) {
if (orientation == Orientation.landscape) {
return Scaffold(
body: Container(
color: Colors.black,
child: Align(
alignment: Alignment.center,
child: FittedBox(
fit: BoxFit.fill,
child: YoutubePlayer(
controller: _controller,
showVideoProgressIndicator: true,
),
),
),
),
);
} else {
return Scaffold(
appBar: AppBar(
iconTheme: IconThemeData(
color: kSecondaryColor, //change your color here
),
title: Image.asset(
'assets/images/logo.png',
fit: BoxFit.contain,
height: 32,
),
backgroundColor: kBackgroundColor,
),
body: Container(
color: Colors.black,
child: Align(
alignment: Alignment.center,
child: FittedBox(
fit: BoxFit.fill,
child: YoutubePlayer(
controller: _controller,
showVideoProgressIndicator: true,
),
),
),
),
);
}
}),
);
}
}

按如下方式重写处置方法:

@override
void dispose() {
_controller.dispose();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
]);
super.dispose();
}

最新更新