I used the video_player package in flutter to make a UI, in which a button is in the middle of the screen, and used a logic to play video when it is tapped (and this will change the button from play to pause) and vice-versa. But my video is not playing, while button is still changing from play to pause whenever I tap on it. Last time it was working fine, but now it is only showing the first frame and nothing else is playing, just freezed. No error or exception is showed.
Here is my code -
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
class VideoEditingScreen extends StatefulWidget {
final String path;
VideoEditingScreen({Key key, this.path}) : super(key: key);
@override
_VideoEditingScreenState createState() => _VideoEditingScreenState();
}
class _VideoEditingScreenState extends State<VideoEditingScreen> {
VideoPlayerController _videoPlayerController;
@override
void initState() {
// TODO: implement initState
super.initState();
_videoPlayerController = VideoPlayerController.file(File(widget.path))
..initialize().then((value) {
setState(() {
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.black,
actions: [
IconButton(
icon: Icon(
Icons.crop_rotate,
size: MediaQuery.of(context).size.width*0.07,
),
onPressed: () {},
),
IconButton(
icon: Icon(
Icons.emoji_emotions_outlined,
size: MediaQuery.of(context).size.width*0.07,
),
onPressed: () {},
),
IconButton(
icon: Icon(
Icons.title,
size: MediaQuery.of(context).size.width*0.07,
),
onPressed: () {},
),
IconButton(
icon: Icon(
Icons.edit,
size: MediaQuery.of(context).size.width*0.07,
),
onPressed: () {},
),
],
),
body: Container(
height: MediaQuery.of(context).size.height*0.89,
width: MediaQuery.of(context).size.width,
child: Stack(
children: [
Container(
height: MediaQuery.of(context).size.height*0.89,
width: MediaQuery.of(context).size.width,
child: _videoPlayerController.value.isInitialized
? AspectRatio(
aspectRatio: _videoPlayerController.value.aspectRatio,
child: VideoPlayer(_videoPlayerController),
) : Container(),
),
Positioned(
bottom: 0,
child: Stack(
alignment: Alignment.bottomCenter,
children: [
Container(
height: MediaQuery.of(context).size.height*0.12,
color: Colors.transparent,
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Container(
color: Colors.black45,
width: MediaQuery.of(context).size.width,
padding: EdgeInsets.only(left: 5.0, right: 20.0, bottom: 2.0),
child: TextFormField(
maxLines: 6,
minLines: 1,
textAlignVertical: TextAlignVertical.bottom,
style: TextStyle(
color: Colors.white,
),
cursorColor: Color(0xFF075E54),
decoration: InputDecoration(
suffixIcon: CircleAvatar(
backgroundColor: Colors.transparent,
radius: 30.0,
),
contentPadding: EdgeInsets.only(bottom: 17.0),
prefixIcon: Container(
height: MediaQuery.of(context).size.height*0.075,
margin: EdgeInsets.only(right: 8),
decoration: BoxDecoration(
border: Border(right: BorderSide(color: Color(0xFF074E54))),
),
child: Icon(
Icons.add_photo_alternate,
color: Colors.white,
size: MediaQuery.of(context).size.width*0.07,
),
),
border: InputBorder.none,
hintText: 'Add a caption...',
hintStyle: TextStyle(
color: Colors.grey[400],
fontSize: MediaQuery.of(context).size.width*0.045,
),
),
),
),
],
),
),
Positioned(
bottom: MediaQuery.of(context).size.width*0.04,
left: MediaQuery.of(context).size.width*0.81,
child: CircleAvatar(
backgroundColor: Color(0xFF02877A),
radius: MediaQuery.of(context).size.width*0.075,
child: Icon(
Icons.check,
color: Colors.white,
size: MediaQuery.of(context).size.width*0.07,
),
),
),
],
),
),
InkWell(
onTap: () {
setState(() {
_videoPlayerController.value.isPlaying
? _videoPlayerController.pause()
: _videoPlayerController.play();
});
},
child: Align(
alignment: Alignment.center,
child: CircleAvatar(
backgroundColor: Colors.black54,
radius: MediaQuery.of(context).size.width*0.085,
child: Icon(
_videoPlayerController.value.isPlaying ? Icons.pause : Icons.play_arrow,
color: Colors.white,
size: MediaQuery.of(context).size.width*0.12,
),
),
),
),
],
),
),
);
}
}
An here is the run log -
D/AudioTrack( 7736): getTimestamp_l(32): device stall time corrected using current time 11138917046960
D/BufferPoolAccessor2.0( 7736): bufferpool2 0xec8a3788 : 4(32768 size) total buffers - 4(32768 size) used buffers - 0/5 (recycle/alloc) - 4/39 (fetch/transfer)
D/BufferPoolAccessor2.0( 7736): bufferpool2 0xec8993e8 : 4(32768 size) total buffers - 4(32768 size) used buffers - 0/5 (recycle/alloc) - 10/2124 (fetch/transfer)
D/BufferPoolAccessor2.0( 7736): bufferpool2 0xec887d88 : 4(32768 size) total buffers - 4(32768 size) used buffers - 0/5 (recycle/alloc) - 7/600 (fetch/transfer)
D/AudioTrack( 7736): stop(32): called with 32160 frames delivered
D/BufferPoolAccessor2.0( 7736): bufferpool2 0xec8993e8 : 4(32768 size) total buffers - 4(32768 size) used buffers - 0/5 (recycle/alloc) - 10/2124 (fetch/transfer)
D/BufferPoolAccessor2.0( 7736): evictor expired: 1, evicted: 1
D/AudioTrack( 7736): getTimestamp_l(32): device stall time corrected using current time 11215137849060
W/AudioTrack( 7736): Spurious audio timestamp (frame position mismatch): 4294967296, 11215137849, 11215137806, 4020000, 32160, 32160
W/AudioTrack( 7736): Spurious audio timestamp (frame position mismatch): 4294967296, 11305873576, 11305873550, 4020000, 32160, 32160
W/AudioTrack( 7736): Spurious audio timestamp (frame position mismatch): 4294967296, 11307927800, 11307927776, 4020000, 32160, 32160
W/AudioTrack( 7736): Spurious audio timestamp (frame position mismatch): 4294967296, 11309192551, 11309192517, 4020000, 32160, 32160