рдмрдЧ рд╡рд┐рд╡рд░рдг
рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреНрд░реЛрдбрдХреНрд╢рди рдРрдк рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд╕рднреА рдорд╣рд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЖрдИрдУрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА рдФрд░ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдлреБрд▓рд╕реНрдХреНрд░реАрди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдРрдк рдХреБрдЫ рдЖрдИрдУрдПрд╕ рдкрд░ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рд╕рдВрд╕реНрдХрд░рдг (13 рд╕реЗ рдкрд╣рд▓реЗ) рдпрд╣ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рднреА рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рдЖрдИрдУрдПрд╕ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ (13) рдкрд░ рдРрдк рдШреВрдорддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡реАрдбрд┐рдпреЛ рд╣рдХрд▓рд╛рддрд╛ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ iOS рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╣реЛрддреА рд╣реИ, Android рдбрд┐рд╡рд╛рдЗрд╕ рдЗрд╕рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдХреЛрдб
рдореИрдВ рдЬрд┐рд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддреНрд░реБрдЯрд┐ рд╣реИ (рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)
youtube_player.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
class YoutubePlayerContainer extends StatefulWidget {
const YoutubePlayerContainer(
{Key key, <strong i="15">@required</strong> this.youtubeController, <strong i="16">@required</strong> this.thumbnail})
: super(key: key);
final YoutubePlayerController youtubeController;
final String thumbnail;
<strong i="17">@override</strong>
_YoutubePlayerContainerState createState() => _YoutubePlayerContainerState();
}
class _YoutubePlayerContainerState extends State<YoutubePlayerContainer> {
bool loading;
<strong i="18">@override</strong>
void initState() {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitDown,
DeviceOrientation.portraitUp,
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight
]);
loading = true;
super.initState();
}
<strong i="19">@override</strong>
Widget build(BuildContext context) {
return Stack(children: [
Center(
child: YoutubePlayer(
bottomActions: <Widget>[
CurrentPosition(),
ProgressBar(isExpanded: true),
],
controller: widget.youtubeController,
showVideoProgressIndicator: true,
onReady: () async {
await Future.delayed(Duration(milliseconds: 700));
setState(() {
loading = false;
});
},
progressIndicatorColor: Theme.of(context).primaryColor,
),
),
if (loading)
Center(
child: Container(
height: 60,
width: 60,
child: CircularProgressIndicator(
strokeWidth: 6,
),
),
),
]);
}
<strong i="20">@override</strong>
void dispose() {
widget.youtubeController.dispose();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitDown,
DeviceOrientation.portraitUp,
]);
super.dispose();
}
}
рдФрд░ рдпрд╣рд╛рдВ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ
YoutubePlayerContainer(
thumbnail: thumbnail,
youtubeController: YoutubePlayerController(
initialVideoId:
YoutubePlayer.convertUrlToId(videoUrl),
flags: YoutubePlayerFlags(enableCaption: false)),
)
рдЯреЗрдХреНрдирд┐рдХрд▓ рдбрд┐рдЯреЗрд▓:
@ рдЕрдпрдорд╛рди-рдХреЛрд░реНрддреЛрдмрд╛ тАЛтАЛрд╣рд╛рдп, рдореИрдВ рднреА рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╕рдорд╛рдзрд╛рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рднреА рдХрд╛рдо
@ рдЕрдпрдорд╛рди-рдХреЛрд░реНрддреЛрдмрд╛ тАЛтАЛрд╣рд╛рдп, рдореИрдВ рднреА рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╕рдорд╛рдзрд╛рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рднреА рдХрд╛рдо
рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣ рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рд╡рд╣ рдерд╛ рдлреБрд▓рд╕реНрдХреНрд░реАрди рдмрдЯрди рдХреЛ рд╣рдЯрд╛рдирд╛ рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЛ рдШреВрд░реНрдгрди рдпреЛрдЧреНрдп рдмрдирд╛рдирд╛, рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореВрд▓ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣реИрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдпрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд╕рдХрддрд╛ рд╣реИред
@srinivasii рдореБрдЭреЗ рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдпрд╣ RotatedBox
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдиреАрдЪреЗ рдкреВрд░рд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдЕрднреА рддрдХ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рд╣реИред
рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
class YoutubePlayerContainer extends StatefulWidget {
const YoutubePlayerContainer({Key key, <strong i="10">@required</strong> this.youtubeController})
: super(key: key);
final YoutubePlayerController youtubeController;
<strong i="11">@override</strong>
_YoutubePlayerContainerState createState() => _YoutubePlayerContainerState();
}
class _YoutubePlayerContainerState extends State<YoutubePlayerContainer> {
int _rotation;
<strong i="12">@override</strong>
void initState() {
_rotation = 0;
super.initState();
}
<strong i="13">@override</strong>
Widget build(BuildContext context) {
return RotatedBox(
quarterTurns: _rotation,
child: Stack(
children: <Widget>[
SizedBox.expand(
child: YoutubePlayer(
bottomActions: <Widget>[
IconButton(
icon: Icon(
_rotation == 0 ? Icons.fullscreen : Icons.fullscreen_exit,
color: Colors.white,
),
onPressed: () async {
widget.youtubeController.pause();
if (_rotation == 0) {
setState(() {
_rotation = 1;
});
} else {
setState(() {
_rotation = 0;
});
}
},
),
RemainingDuration(),
ProgressBar(isExpanded: true),
CurrentPosition(),
],
controller: widget.youtubeController,
showVideoProgressIndicator: true,
progressIndicatorColor: Theme.of(context).primaryColor,
),
),
Align(
alignment: Alignment.topRight,
child: IconButton(
icon: Icon(
Icons.close,
color: Colors.white,
),
onPressed: () => Navigator.of(context).pop(),
),
),
],
),
);
}
<strong i="14">@override</strong>
void dispose() {
widget.youtubeController.dispose();
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitDown,
DeviceOrientation.portraitUp,
]);
super.dispose();
}
}
v7.0.0.0 рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд░рд╣рддреА рд╣реИ рддреЛ рдмреЗрдЭрд┐рдЭрдХ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВред