如何解决调用 close 后无法添加新事件
颤动
我正在使用 video_trimmer: ^0.5.2
插件,它允许在上传前剪切和编辑视频,按下后一切正常,但如果我通过单击底部再次重新打开编辑器,视频将不显示带有此错误 Cannot add new events after calling close
的 TrimmerEditor 小部件但如果离开页面并再次重新进入,一切都会正常工作,除非我一次又一次地单击并保持在同一 UI 页面中!
我已经知道会发生这种情况,因为小部件再次从堆栈 IF(真或假)中关闭,但我需要一个具有相同代码的解决方案,因为我在相同的代码中有大而复杂的项目
class VideoTrimmer extends StatefulWidget {
const VideoTrimmer({Key key}) : super(key: key);
@override
_VideoTrimmerState createState() => _VideoTrimmerState();
}
class _VideoTrimmerState extends State<VideoTrimmer> {
Trimmer _trimmer = Trimmer(); // this object from the package its self
double _startValue = 0.0;
double _endValue = 0.0;
bool _isPlaying = false;
bool displayWidget = false;
_loadVideo() {
_trimmer.loadVideo(videoFile: file);
}
@override
void dispose() {
super.dispose();
_trimmer.dispose(); // i tried to remove this too,but same issue
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),body: Stack(
children: [
TextButton(
onpressed: (){
final result = await FilePicker.platform.pickFiles(allowMultiple: false );
if (result == null) return;
final path = result.files.single.path;
setState(() => file = File(path));
_loadVideo();
setState(() => displayWidget = true);
},child: Text("selectVideo")
),displayWidget ?
Center(
child: Container(
padding: EdgeInsets.only(bottom: 30.0),color: Colors.black,child: Column(
mainAxisAlignment: MainAxisAlignment.center,mainAxisSize: MainAxisSize.max,children: <Widget>[
Expanded(
child: VideoViewer(trimmer: _trimmer),),Center(
child: TrimEditor( // here is the issue happen
trimmer: _trimmer,viewerHeight: 50.0,viewerWidth: MediaQuery.of(context).size.width,maxVideoLength: Duration(seconds: 60),onChangeStart: (value) {
_startValue = value;
},onChangeEnd: (value) {
_endValue = value;
},onChangePlaybackState: (value) {
if(!mounted) {
setState(() =>
_isPlaying = value);
}
},TextButton(
child: _isPlaying
? Icon(
Icons.pause,size: 80.0,color: Colors.white,)
: Icon(
Icons.play_arrow,onpressed: () async {
bool playbackState = await _trimmer.videPlaybackControl(
startValue: _startValue,endValue: _endValue,);
if(!mounted) {
setState(() =>
_isPlaying = playbackState);
}
},ElevatedButton(
child: Text("SAVE"),onpressed: () {
uploadVideo();
setState(() => displayWidget = false);
},],);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。