import 'package:flutter/material.dart'; import 'package:liftmanager/net/api_service.dart'; import 'package:liftmanager/utils/toast.dart'; import 'package:liftmanager/widgets/app_bar.dart'; import 'package:liftmanager/routers/fluro_navigator.dart'; import 'package:liftmanager/widgets/selected_image_change.dart'; import 'package:image_picker/image_picker.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:liftmanager/internal/wode/wode_router.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:liftmanager/utils/oss_upload.dart'; import 'dart:async'; import 'package:liftmanager/utils/fast_notification.dart'; import 'package:chewie/chewie.dart'; import 'package:flutter/services.dart'; import 'package:liftmanager/utils/utils.dart'; import 'package:orientation/orientation.dart'; import 'package:video_player/video_player.dart'; import 'package:liftmanager/utils/theme_utils.dart'; import 'package:liftmanager/widgets/selected_video_change.dart'; import 'dart:io'; class ConfirmOrder extends StatefulWidget { ConfirmOrder(this.id); final String id; @override State createState() { return ConfirmOrderState(); } } class ConfirmOrderState extends State { VideoPlayerController _controller; VideoPlayerController _controllerFile; // final FijkPlayer player = FijkPlayer(); // List imagesUrl = []; // List videoUrl = []; String videoUrl; String str; String imagesUrl; double percent = 0.0; @override void initState() { super.initState(); } ///选择图片 void selectPicker() { showDialog( context: context, builder: (BuildContext context) { return SimpleDialog( title: Text("选择方式"), children: ["拍照", '从手机相册选择'].map((String value) { print("$value"); return SimpleDialogOption( child: Text( "${value}", style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500), ), onPressed: () { _getImage(value == '拍照' ? 1 : 0); Navigator.of(context).pop(); }, ); }).toList(), ); }, ); } void _getImage(int key) async { print(key); print(333); try { await ImagePicker.pickVideo( source: key == 1 ? ImageSource.camera : ImageSource.gallery, ) .then((File f) async{ if (f != null) { _controllerFile = VideoPlayerController.file(f); _controllerFile.initialize().then((val){ _controllerFile.setLooping(true); int seconds = _controllerFile.value.duration.inSeconds; print("视频时长:$seconds"); int fileSize=f.lengthSync();//单位B print("视频大小:${fileSize}"); print("视频大小:${f.path}"); if (seconds <= 300) { _uploadImage(f.path); // upLoadFileOnce(_imageFile.path); // setState(() {}); }else { toasts("视频时长不能大于5分钟!"); } });} }) ; } catch (e) { toasts("没有权限,无法打开相册!"); } } void _uploadImage(filePath) async { showPercent(context, (){ dismissLoading(context); toasts("上传失败"); },(){ if(videoUrl == null && str != null){ setState(() { videoUrl = str; print("videoUrl:"+videoUrl); dismissLoading(context); toasts("上传成功"); }); } }); String uploadName = OssUtil.instance.getImageUploadName(filePath); await NewApiService.uploadImage(context, uploadName, filePath).then((data) { if (data.statusCode == 200) { str = NewApiUrl.URL_UPLOAD_IMAGE_OSS + "/" + uploadName; print("str:"+str); print(videoUrl); if(str != null){ Map obj = { "uploadName":uploadName, "success":true }; FastNotification.push("percent",obj); } }else { Map obj = { "uploadName":uploadName, "success":false }; FastNotification.push("percent",obj); } }).catchError((data) { Map obj = { "uploadName":uploadName, "success":false }; FastNotification.push("percent",obj); }); } upLoadFileOnce(path) { showLoading(context, "正在上传..."); NewApiService().upload(path, onSuccess: (res) { dismissLoading(context); setState(() { videoUrl = res.pathUrl; imagesUrl = res.coverUrl; }); }, onError: (code, msg) { dismissLoading(context); toasts(msg); }); } submitApply() { if (videoUrl == null || videoUrl == '') { toasts("请上传视频"); return; } showLoading(context); NewApiService().chargeMakeSureCase({ "id": widget.id, "afterRepair": videoUrl, }, onSuccess: (res) { dismissLoading(context); toasts("确认完成"); NavigatorUtils.push(context, "${WodeRouter.orderPageMaster}?checkType=0"); setState(() {}); }, onError: (code, msg) { dismissLoading(context); toasts(msg); }); } // 文本编辑控制 GlobalKey _formKey = new GlobalKey(); @override Widget build(BuildContext context) { double width = MediaQuery.of(context).size.width; return Scaffold( resizeToAvoidBottomPadding: false, //不让键盘弹上去 appBar: MyAppBar( centerTitle: "确认订单", ), body: Container( child: ListView( children: [ Form( key: _formKey, //设置globalKey,用于后面获取FormState // autovalidate: true, //开启自动校验 child: Column( children: [ Container( width: width, padding: EdgeInsets.only(left:15,bottom:15), child: Text( "(建议时长3分钟,建议大小50M)", style: TextStyle( color: Colors.red, fontSize: ScreenUtil() .setSp(14), ), textAlign: TextAlign.left, ), ), // Container( // color: Colors.white, // child: GridView.builder( // shrinkWrap: true, // padding: const EdgeInsets.fromLTRB(8.0, 12, 8.0, 12.0), // physics: NeverScrollableScrollPhysics(), // gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( // crossAxisCount: 3, childAspectRatio: 1.18), // itemCount: 1, // itemBuilder: (_, index) { // return Stack( // children: [ // Center( // child: SelectedImage( // image: imagesUrl, // index: index, // onTap: () { // selectPicker(); // FocusScope.of(context).requestFocus(FocusNode()); // }, // ), // ), // videoUrl != null // ? Positioned( // top: 0, // right: 0, // child: GestureDetector( // onTap: () { // print(index); // videoUrl = null; // imagesUrl = null; // setState(() {}); // }, // child: Icon( // IconData(0xe62a, fontFamily: "myfont"), // size: 24.0, // color: Color(0xff999999), // ), // ), // ) // : Container( // child: null, // ) // ], // ); // }, // ), // ), Container( color: ThemeUtils.getDialogTextFieldColor(context), child: GridView.builder( shrinkWrap: true, padding: const EdgeInsets.fromLTRB(8.0, 12, 8.0, 12.0), physics: NeverScrollableScrollPhysics(), gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 1, childAspectRatio: 1.18), itemCount: 1, itemBuilder: (_, index) { return Stack( children: [ Center( child: SelectedVideo( image: videoUrl, index: index, videoPlay:videoPlay(), onTap: () { if(videoUrl == null){ selectPicker(); } }, ), ), videoUrl != null ? Positioned( top: 0, right: 0, child: GestureDetector( onTap: () { print(index); // imagesUrl = null; setState(() { videoUrl = null; str = null; _controller.pause(); // player.reset(); }); }, child: Icon( IconData(0xe62a, fontFamily: "myfont"), size: 24.0, color: Color(0xff999999), ), ), ) : Container( child: null, ) ], ); }, ), ), Container( height: ScreenUtil().setWidth(44), decoration: BoxDecoration( borderRadius: BorderRadius.circular(ScreenUtil().setWidth(22)), gradient: const LinearGradient( colors: [Color(0xFF00D9FF), Color(0xFF0287FF)]), ), margin: EdgeInsets.all(20.0), width: double.infinity, child: FlatButton( // padding: EdgeInsets.all(15.0), child: Text("提交"), // color: Theme // .of(context) // .primaryColor, textColor: Colors.white, onPressed: () { /* * 如果:context不对。可以使用GlobalKey, * 通过_formKey.currentState 获取FormState后, * 调用validate()方法校验用户名密码是否合法,校验 * 通过后再提交数据。 */ if ((_formKey.currentState as FormState).validate()) { submitApply(); } }, ), ), ], ), ), ], ), ), ); } Widget videoPlay() { _controller = VideoPlayerController.network( Utils.getImagePath(videoUrl) // imgFontUrl + detailObj.url ); double width = MediaQuery.of(context).size.width; return // Container( // width: width, // height: width*0.6, // alignment: Alignment.center, // child: FijkView( // player: player, // color: Colors.black, // fit:FijkFit.fill, // // cover: NetworkImage(detailObj.cover), // // cover: new Image(image: detailObj.cover!=null&& detailObj.cover!=""?NetworkImage(detailObj.cover):AssetImage("assets/images/video_image.png"),).image, // // // ), // ); Container( padding: EdgeInsets.only( left: ScreenUtil().setWidth(15), right: ScreenUtil().setWidth(15), top: ScreenUtil().setWidth(15)), child: ClipRRect( borderRadius: BorderRadius.circular(5), child: new Chewie( controller: ChewieController( videoPlayerController: // VideoPlayerController.network( // imgFontUrl + detailObj.url // ), _controller, aspectRatio: 3 / 2, allowFullScreen:false, autoPlay: false, looping: true, // startAt: Duration(seconds: 1,minutes: 1), showControls: true, deviceOrientationsAfterFullScreen:[DeviceOrientation.portraitUp], // 占位图 // placeholder: Image.network( // imgFontUrl+detailObj.cover, // fit: BoxFit.contain, // ), // 是否在 UI 构建的时候就加载视频 autoInitialize: true, // 拖动条样式颜色 materialProgressColors: new ChewieProgressColors( playedColor: Colors.red, handleColor: Colors.blue, backgroundColor: Colors.grey, bufferedColor: Colors.lightGreen, ), ), ), ) ); } }