Flutter 中启动画面的视频播放器
Video Player for Splash Screen in Flutter
我为我的应用制作了启动画面。但是现在,我想在启动画面中使用 .mp4 扩展名。
我该怎么办?请帮我。
而且,这是我使用 AssetImage 启动画面的代码:
import 'package:flutter/material.dart';
import 'package:bankingapp/main.dart';
void main() {
runApp(MaterialApp(home: MySplash()));
}
class MySplash extends StatefulWidget {
@override
_MySplashState createState() => _MySplashState();
}
class _MySplashState extends State<MySplash> {
@override
void initState() {
super.initState();
Future.delayed(Duration(seconds: 3), () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => MyBottomNavigationBar()));
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
decoration: BoxDecoration(
image:
DecorationImage(image: AssetImage("assets/images/splash.jpg"))),
),
);
}
}
如果您正在寻找启动画面中的某种动画,您可以使用 lottie package. You can use this site 将 mp4
转换为 lottie.json
用这个小部件替换 container
Lottie.asset(
'assets/LottieLogo1.json',
width: 200,
height: 200,
fit: BoxFit.fill,
)
使用这个视频播放器video_player plugin
将您的 mp4 文件保存在 assets/videos 位置
试试下面的代码
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(),
],
),
),
);
}
}
我为我的应用制作了启动画面。但是现在,我想在启动画面中使用 .mp4 扩展名。
我该怎么办?请帮我。 而且,这是我使用 AssetImage 启动画面的代码:
import 'package:flutter/material.dart';
import 'package:bankingapp/main.dart';
void main() {
runApp(MaterialApp(home: MySplash()));
}
class MySplash extends StatefulWidget {
@override
_MySplashState createState() => _MySplashState();
}
class _MySplashState extends State<MySplash> {
@override
void initState() {
super.initState();
Future.delayed(Duration(seconds: 3), () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => MyBottomNavigationBar()));
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
decoration: BoxDecoration(
image:
DecorationImage(image: AssetImage("assets/images/splash.jpg"))),
),
);
}
}
如果您正在寻找启动画面中的某种动画,您可以使用 lottie package. You can use this site 将 mp4
转换为 lottie.json
用这个小部件替换 container
Lottie.asset(
'assets/LottieLogo1.json',
width: 200,
height: 200,
fit: BoxFit.fill,
)
使用这个视频播放器video_player plugin 将您的 mp4 文件保存在 assets/videos 位置 试试下面的代码
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(),
],
),
),
);
}
}