フルスクリーンのものだけで、すべてがうまく機能します。 アプリの向きを回転させるだけです。 全画面から戻ると、アプリの向きは予想外の横向きです。 また、全画面表示時に、appbarや他のウィジェットのようにすべてのウィジェットが非表示になるわけではありません。
_controller.value.isFullScreen
は最終的な値であるため、フルスクリーンの状態に基づいてウィジェットを表示または非表示にするためにそれを使用することさえできません。
こんにちは@princeteck。 同様の問題があり、ブール変数を追加してフルスクリーンを使用しているかどうかを確認することで問題を解決できたので、フルスクリーンを使用しているときにAppBarをnullに変更できます。 また、フルスクリーンでフルスクリーンを終了するときに戻るボタンを押す処理を行うWillPopScopeウィジェットを追加しました。 これが私の最終ファイルです。 パラメータとしてライブオブジェクトを受け取ります。
class LiveDetail extends StatefulWidget {
final Live live;
LiveDetail({
Key key,
<strong i="8">@required</strong> this.live,
}) : super(key: key);
<strong i="9">@override</strong>
_LiveDetailState createState() => _LiveDetailState();
}
class _LiveDetailState extends State<LiveDetail> {
YoutubePlayerController _controller;
bool showAppBar = true;
<strong i="10">@override</strong>
void initState() {
_controller = YoutubePlayerController(
initialVideoId: widget.live.videoId,
flags: YoutubePlayerFlags(autoPlay: true, isLive: widget.live.isLive, controlsVisibleAtStart: true),
);
super.initState();
}
Future<bool> _onWillPop() {
if (_controller.value.isFullScreen) {
_controller.toggleFullScreenMode();
} else {
Navigator.pop(context);
}
}
<strong i="11">@override</strong>
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: _onWillPop,
child: MaterialApp(
title: 'Live',
theme: ThemeData(primaryColor: Color(CustomColors.grena)),
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: showAppBar
? AppBar(
title: Text(widget.live.title),
leading: new IconButton(
icon: new Icon(Icons.arrow_back),
onPressed: () {
Navigator.pop(context);
},
),
)
: null,
body: Container(
child: YoutubePlayerBuilder(
player: YoutubePlayer(controller: _controller),
builder: (context, player) {
return Column(
children: <Widget>[player],
);
},
onEnterFullScreen: () {
setState(() {
showAppBar = false;
});
},
onExitFullScreen: () {
setState(() {
showAppBar = true;
});
},
),
)),
),
);
}
}
足場をYoutubePlayerBuilder
の下に置くだけです
足場を
YoutubePlayerBuilder
の下に置くだけです
これはうまくいくようですが、今私が直面している新しい問題が1つあります。 ビデオはライブデバイスでテストするとトリミングされますが、iOSシミュレーターでは正しく表示されます。 アスペクト比がめちゃくちゃだと思います。
こんにちは@princeteck。 同様の問題があり、ブール変数を追加してフルスクリーンを使用しているかどうかを確認することで問題を解決できたので、フルスクリーンを使用しているときにAppBarをnullに変更できます。 また、フルスクリーンでフルスクリーンを終了するときに戻るボタンを押す処理を行うWillPopScopeウィジェットを追加しました。 これが私の最終ファイルです。 パラメータとしてライブオブジェクトを受け取ります。
class LiveDetail extends StatefulWidget { final Live live; LiveDetail({ Key key, <strong i="9">@required</strong> this.live, }) : super(key: key); <strong i="10">@override</strong> _LiveDetailState createState() => _LiveDetailState(); } class _LiveDetailState extends State<LiveDetail> { YoutubePlayerController _controller; bool showAppBar = true; <strong i="11">@override</strong> void initState() { _controller = YoutubePlayerController( initialVideoId: widget.live.videoId, flags: YoutubePlayerFlags(autoPlay: true, isLive: widget.live.isLive, controlsVisibleAtStart: true), ); super.initState(); } Future<bool> _onWillPop() { if (_controller.value.isFullScreen) { _controller.toggleFullScreenMode(); } else { Navigator.pop(context); } } <strong i="12">@override</strong> Widget build(BuildContext context) { return WillPopScope( onWillPop: _onWillPop, child: MaterialApp( title: 'Live', theme: ThemeData(primaryColor: Color(CustomColors.grena)), debugShowCheckedModeBanner: false, home: Scaffold( appBar: showAppBar ? AppBar( title: Text(widget.live.title), leading: new IconButton( icon: new Icon(Icons.arrow_back), onPressed: () { Navigator.pop(context); }, ), ) : null, body: Container( child: YoutubePlayerBuilder( player: YoutubePlayer(controller: _controller), builder: (context, player) { return Column( children: <Widget>[player], ); }, onEnterFullScreen: () { setState(() { showAppBar = false; }); }, onExitFullScreen: () { setState(() { showAppBar = true; }); }, ), )), ), ); } }
ただし、setstateはウィジェットを再構築します。つまり、onEnterFullScreenおよびonExitFullScreenコールバックがトリガーされると、ビデオが何度も再起動します。
足場を
YoutubePlayerBuilder
の下に置くだけです
この問題を再度開いて申し訳ありませんが、この回避策を使用したところ、@ princeteckと同じ結果が得られました。 ビデオがトリミングされているため、すべてのキャプションが表示されません。
誰かがこれに対する解決策を持っているなら、それは素晴らしいでしょう:)
フルスクリーンの場合、このプラグインスケーリングプレーヤーが原因で問題が発生しています。 手動スケーリングを削除することで、この問題を解決することができました。
こんにちは@princeteck。 同様の問題があり、ブール変数を追加してフルスクリーンを使用しているかどうかを確認することで問題を解決できたので、フルスクリーンを使用しているときにAppBarをnullに変更できます。 また、フルスクリーンでフルスクリーンを終了するときに戻るボタンを押す処理を行うWillPopScopeウィジェットを追加しました。 これが私の最終ファイルです。 パラメータとしてライブオブジェクトを受け取ります。
class LiveDetail extends StatefulWidget { final Live live; LiveDetail({ Key key, <strong i="9">@required</strong> this.live, }) : super(key: key); <strong i="10">@override</strong> _LiveDetailState createState() => _LiveDetailState(); } class _LiveDetailState extends State<LiveDetail> { YoutubePlayerController _controller; bool showAppBar = true; <strong i="11">@override</strong> void initState() { _controller = YoutubePlayerController( initialVideoId: widget.live.videoId, flags: YoutubePlayerFlags(autoPlay: true, isLive: widget.live.isLive, controlsVisibleAtStart: true), ); super.initState(); } Future<bool> _onWillPop() { if (_controller.value.isFullScreen) { _controller.toggleFullScreenMode(); } else { Navigator.pop(context); } } <strong i="12">@override</strong> Widget build(BuildContext context) { return WillPopScope( onWillPop: _onWillPop, child: MaterialApp( title: 'Live', theme: ThemeData(primaryColor: Color(CustomColors.grena)), debugShowCheckedModeBanner: false, home: Scaffold( appBar: showAppBar ? AppBar( title: Text(widget.live.title), leading: new IconButton( icon: new Icon(Icons.arrow_back), onPressed: () { Navigator.pop(context); }, ), ) : null, body: Container( child: YoutubePlayerBuilder( player: YoutubePlayer(controller: _controller), builder: (context, player) { return Column( children: <Widget>[player], ); }, onEnterFullScreen: () { setState(() { showAppBar = false; }); }, onExitFullScreen: () { setState(() { showAppBar = true; }); }, ), )), ), ); } }
または、AppBarのtoolbarHeightパラメータのみを変更できます
56はデフォルト値です
AppBar(
title: Text('Your title'),
toolbarHeight: _fullScreen ? 0 : 56,
),
最も参考になるコメント
足場を
YoutubePlayerBuilder
の下に置くだけです