{"id":12931,"date":"2023-04-21T10:00:00","date_gmt":"2023-04-21T01:00:00","guid":{"rendered":"https:\/\/www.gigas-jp.com\/appnews\/?p=12931"},"modified":"2023-04-19T19:19:33","modified_gmt":"2023-04-19T10:19:33","slug":"%e5%8b%95%e7%94%bb%e3%81%ae%e5%86%8d%e7%94%9f%e3%83%bb%e4%b8%80%e6%99%82%e5%81%9c%e6%ad%a2%e3%82%92flutter%e3%81%a7%e8%a1%8c%e3%81%86%e3%81%9f%e3%82%81%e3%81%aetips","status":"publish","type":"post","link":"https:\/\/www.gigas-jp.com\/appnews\/archives\/12931","title":{"rendered":"\u52d5\u753b\u306e\u518d\u751f\u30fb\u4e00\u6642\u505c\u6b62\u3092flutter\u3067\u884c\u3046\u305f\u3081\u306eTips"},"content":{"rendered":"\n<p class=\"has-text-align-left\">1.video_player\u306eDependency\u3092\u8ffd\u52a0\u3059\u308b\u3002<br>2.\u30a2\u30d7\u30ea\u306b\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\uff08\u8a31\u53ef\uff09\u3092\u8ffd\u52a0\u3059\u308b\u3002<br>3.VideoPlayerController\u3092\u4f5c\u6210\u3057\u3001\u521d\u671f\u8a2d\u5b9a\u3057\u307e\u3059\u3002<br>4.\u52d5\u753b\u518d\u751f\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u8868\u793a\u3059\u308b\u3002<br>5.\u52d5\u753b\u3092\u518d\u751f\u30fb\u4e00\u6642\u505c\u6b62\u3059\u308b\u3002<\/p>\n\n\n\n<h4>1.video_player\u306eDependency\u3092\u8ffd\u52a0\u3059\u308b\u3002<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>dependencies:\n  flutter:\n    sdk: flutter\n  video_player:\n<\/code><\/pre>\n\n\n\n<h4>2.\u30a2\u30d7\u30ea\u306b\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\uff08\u8a31\u53ef\uff09\u3092\u8ffd\u52a0\u3059\u308b\u3002<\/h4>\n\n\n\n<p>Android <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"&gt;\n    &lt;application ...&gt;\n\n    &lt;\/application&gt;\n\n    &lt;uses-permission android:name=\"android.permission.INTERNET\"\/&gt;\n&lt;\/manifest&gt;\n<\/code><\/pre>\n\n\n\n<p>iOS<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;key&gt;NSAppTransportSecurity&lt;\/key&gt;\n&lt;dict&gt;\n  &lt;key&gt;NSAllowsArbitraryLoads&lt;\/key&gt;\n  &lt;true\/&gt;\n&lt;\/dict&gt;\n<\/code><\/pre>\n\n\n\n<h4>3.VideoPlayerController\u3092\u4f5c\u6210\u3057\u3001\u521d\u671f\u8a2d\u5b9a\u3059\u308b<\/h4>\n\n\n\n<p>VideoPlayerController\u3092\u4f5c\u308a\u3001\u521d\u671f\u5316\u3059\u308b\u65b9\u6cd5\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>1.StatefulWidget\u3092\u4f5c\u6210\u3057\u3066\u3001State Class\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<br>2.State class\u306b\u5909\u6570\u3092\u8ffd\u52a0\u3057\u3001VideoPlayerController\u3092\u8a18\u61b6\u3055\u305b\u307e\u3059\u3002<br>3.VideoPlayerController.initialize\u304b\u3089\u8fd4\u3055\u308c\u305fFuture\u3092\u4fdd\u6301\u3059\u308b\u305f\u3081\u306b\u3001State class\u306b\u5909\u6570\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<br>4.initState method\u3067Controller\u4f5c\u6210\u3057\u3001\u521d\u671f\u5316\u3057\u307e\u3059\u3002<br>5.dispose method\u3067Controller\u3092\u524a\u9664\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class VideoPlayerScreen extends StatefulWidget {\n  const VideoPlayerScreen({super.key});\n\n  @override\n  State&lt;VideoPlayerScreen&gt; createState() =&gt; _VideoPlayerScreenState();\n}\n\nclass _VideoPlayerScreenState extends State&lt;VideoPlayerScreen&gt; {\n  late VideoPlayerController _controller;\n  late Future&lt;void&gt; _initializeVideoPlayerFuture;\n\n  @override\n  void initState() {\n    super.initState();\n \n    _controller = VideoPlayerController.network(\n      '\u52d5\u753b.mp4',\n    );\n\n    _initializeVideoPlayerFuture = _controller.initialize();\n  }\n\n  @override\n  void dispose() {\n    _controller.dispose();\n\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Container();\n  }\n}<\/code><\/pre>\n\n\n\n<h4>4.\u52d5\u753b\u518d\u751f\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u8868\u793a\u3059\u308b\u3002<\/h4>\n\n\n\n<p>_initializeVideoPlayerFuture() \u304c\u5b8c\u4e86\u3057\u305f\u5f8c\u306bWidget\u3092\u8868\u793a\u3057\u307e\u3059\u3002Controller\u306e\u521d\u671f\u5316\u304c\u7d42\u4e86\u3059\u308b\u307e\u3067\u3001FutureBuilder \u3092\u4f7f\u7528\u3057\u3066\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u30b9\u30d4\u30ca\u30fc\u3092\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FutureBuilder(\n  future: _initializeVideoPlayerFuture,\n  builder: (context, snapshot) {\n    if (snapshot.connectionState == ConnectionState.done) {\n      return AspectRatio(\n        aspectRatio: _controller.value.aspectRatio,\n        child: VideoPlayer(_controller),\n      );\n    } else {\n      return const Center(\n        child: CircularProgressIndicator(),\n      );\n    }\n  },\n)<\/code><\/pre>\n\n\n\n<h4>5.\u52d5\u753b\u3092\u518d\u751f\u30fb\u4e00\u6642\u505c\u6b62\u3059\u308b<\/h4>\n\n\n\n<p>\u521d\u671f\u72b6\u614b\u3067\u306f\u3001\u52d5\u753b\u306f\u4e00\u6642\u505c\u6b62\u72b6\u614b\u3067\u958b\u59cb\u3055\u308c\u307e\u3059\u3002\u518d\u751f\u3092\u958b\u59cb\u3059\u308b\u306b\u306f\u3001VideoPlayerController\u304c\u6301\u3063\u3066\u3044\u308bplay() \u3068\u3044\u3046\u95a2\u6570\u3092\u547c\u3073\u51fa\u3057\u307e\u3059\u3002\u4e00\u6642\u505c\u6b62\u3057\u305f\u3044\u5834\u5408\u306f\u3001pause\u3092\u547c\u3073\u51fa\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FloatingActionButton(\n  onPressed: () {\n    setState(() {\n      if (_controller.value.isPlaying) {\n        _controller.pause();\n      } else {\n        _controller.play();\n      }\n    });\n  },\n  child: Icon(\n    _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,\n  ),\n)<\/code><\/pre>\n\n\n\n<p>\u53c2\u8003 :&nbsp;<a href=\"https:\/\/flutter.dev\/\">Flutter.dev<\/a><\/p>\n\n\n\n<p>\u91d1\u66dc\u62c5\u5f53 \u2013 Ami<\/p>\n<div class='wp_social_bookmarking_light'>\n            <div class=\"wsbl_google_plus_one\"><g:plusone size=\"medium\" annotation=\"none\" href=\"https:\/\/www.gigas-jp.com\/appnews\/archives\/12931\" ><\/g:plusone><\/div>\n            <div class=\"wsbl_hatena_button\"><a href=\"\/\/b.hatena.ne.jp\/entry\/https:\/\/www.gigas-jp.com\/appnews\/archives\/12931\" class=\"hatena-bookmark-button\" data-hatena-bookmark-title=\"\u52d5\u753b\u306e\u518d\u751f\u30fb\u4e00\u6642\u505c\u6b62\u3092flutter\u3067\u884c\u3046\u305f\u3081\u306eTips\" data-hatena-bookmark-layout=\"standard\" title=\"\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0\"> <img src=\"\/\/b.hatena.ne.jp\/images\/entry-button\/button-only@2x.png\" alt=\"\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0\" width=\"20\" height=\"20\" style=\"border: none;\" \/><\/a><script type=\"text\/javascript\" src=\"\/\/b.hatena.ne.jp\/js\/bookmark_button.js\" charset=\"utf-8\" async=\"async\"><\/script><\/div>\n            <div class=\"wsbl_twitter\"><a href=\"https:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-url=\"https:\/\/www.gigas-jp.com\/appnews\/archives\/12931\" data-text=\"\u52d5\u753b\u306e\u518d\u751f\u30fb\u4e00\u6642\u505c\u6b62\u3092flutter\u3067\u884c\u3046\u305f\u3081\u306eTips\" data-via=\"GIGASJAPAN_APPS\" data-lang=\"ja\">Tweet<\/a><\/div>\n            <div class=\"wsbl_facebook_like\"><div id=\"fb-root\"><\/div><fb:like href=\"https:\/\/www.gigas-jp.com\/appnews\/archives\/12931\" layout=\"button_count\" action=\"like\" width=\"100\" share=\"false\" show_faces=\"false\" ><\/fb:like><\/div>\n            <div class=\"wsbl_facebook_send\"><div id=\"fb-root\"><\/div><fb:send href=\"https:\/\/www.gigas-jp.com\/appnews\/archives\/12931\" colorscheme=\"light\" ><\/fb:send><\/div>\n    <\/div>\n<br class='wp_social_bookmarking_light_clear' \/>\n","protected":false},"excerpt":{"rendered":"<p>1.video_player\u306eDependency\u3092\u8ffd\u52a0\u3059\u308b\u30022.\u30a2\u30d7\u30ea\u306b\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\uff08\u8a31\u53ef\uff09\u3092\u8ffd\u52a0\u3059\u308b\u30023.VideoPlayerController\u3092\u4f5c\u6210\u3057\u3001\u521d\u671f\u8a2d\u5b9a\u3057\u307e\u3059\u30024.\u52d5\u753b\u518d\u751f\u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u8868\u793a\u3059\u308b\u30025.\u52d5 [&hellip;]<\/p>\n","protected":false},"author":19,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[100],"tags":[],"acf":[],"_links":{"self":[{"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/posts\/12931"}],"collection":[{"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/comments?post=12931"}],"version-history":[{"count":4,"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/posts\/12931\/revisions"}],"predecessor-version":[{"id":12937,"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/posts\/12931\/revisions\/12937"}],"wp:attachment":[{"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/media?parent=12931"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/categories?post=12931"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gigas-jp.com\/appnews\/wp-json\/wp\/v2\/tags?post=12931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}