【问题标题】:Flutter Splash Screen Video PlayerFlutter 闪屏视频播放器
【发布时间】:2020-08-18 00:13:37
【问题描述】:

我正在尝试为我的应用创建背景视频闪屏。 目前,我通过运行此代码实现了一个空白屏幕。

 void main() => runApp(WalkThrough());

class WalkThrough extends StatefulWidget {
  @override
  _WalkThroughState createState() => _WalkThroughState();
}

class _WalkThroughState extends State<WalkThrough> {
  VideoPlayerController _controller;

  @override
  void initState() {
    super.initState();
    // Pointing the video controller to our local asset.
    _controller = VideoPlayerController.asset('assets/video.mp4')
      ..initialize().then((_) {
        // Once the video has been loaded we play the video and set looping to true.
        _controller.play();
        _controller.setLooping(true);
        _controller.setVolume(0.0);
        _controller.play();
        // Ensure the first frame is shown after the video is initialized.
        setState(() {});
      });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: <Widget>[

我怀疑问题可能出在此处,并且我的研究基于此Full screen video background in Flutter on Login,因为我正试图获得类似的结果。

          SizedBox.expand(
            child: FittedBox(
              // If your background video doesn't look right, try changing the BoxFit property.
              // BoxFit.fill created the look I was going for.
              fit: BoxFit.fill,
              child: SizedBox(
                width: _controller.value.size?.width ?? 0,
                height: _controller.value.size?.height ?? 0,
                child: VideoPlayer(_controller),
              ),
            ),
          ),

【问题讨论】:

  • 你的设备是什么?
  • @PayamZahedi iPhone 11 Pro
  • 是真机还是模拟器?
  • 您也没有使用 MaterialApp 小部件。你用它包裹脚手架后试过吗?
  • @PayamZahedi 模拟器

标签: flutter flutter-layout flutter-dependencies


【解决方案1】:

我认为视频播放器包在 Ios 模拟器中显示视频时存在问题。我有同样的问题并搜索它并找出这个issue in Github。到目前为止,这个问题是开放的。我在真机上测试了视频播放器,没有问题。

【讨论】:

    【解决方案2】:

    使用此视频播放器video_player plugin 并将您的 mp4 文件保存在资产/视频位置 试试下面的代码

    import 'dart:async';
    
    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 'package:video_player/video_player.dart';
    
    import 'HomePage.dart';
    
    class SplashPage extends StatefulWidget {
      SplashPage({Key key}) : super(key: key);
    
      @override
      State<StatefulWidget> createState() => _SplashPageState();
    }
    
    class _SplashPageState extends State<SplashPage> {
      VideoPlayerController _controller;
      bool _visible = false;
    
      @override
      void initState() {
        super.initState();
    
        SystemChrome.setPreferredOrientations([
          DeviceOrientation.portraitUp,
        ]);
    
        _controller = VideoPlayerController.asset("assets/video/splash_video.mp4");
        _controller.initialize().then((_) {
          _controller.setLooping(true);
          Timer(Duration(milliseconds: 100), () {
            setState(() {
              _controller.play();
              _visible = true;
            });
          });
        });
    
        Future.delayed(Duration(seconds: 4), () {
          Navigator.pushAndRemoveUntil(
              context,
              MaterialPageRoute(
                  builder: (context) => HomePage(param_homepage: 'Welcome Home')),
              (e) => false);
        });
      }
    
      @override
      void dispose() {
        super.dispose();
        if (_controller != null) {
          _controller.dispose();
          _controller = null;
        }
      }
    
      _getVideoBackground() {
        return AnimatedOpacity(
          opacity: _visible ? 1.0 : 0.0,
          duration: Duration(milliseconds: 1000),
          child: VideoPlayer(_controller),
        );
      }
    
      _getBackgroundColor() {
        return Container(color: Colors.transparent //.withAlpha(120),
            );
      }
    
      _getContent() {
        return Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.start,
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: Stack(
              children: <Widget>[
                _getVideoBackground(),
              ],
            ),
          ),
        );
      }
    }
     
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多