|
@@ -1,580 +0,0 @@
|
|
|
-import 'package:flutter/material.dart';
|
|
|
-import 'package:liftmanager/res/gaps.dart';
|
|
|
-import 'package:liftmanager/net/api_service.dart';
|
|
|
-import 'package:liftmanager/utils/toast.dart';
|
|
|
-import 'package:liftmanager/widgets/app_bar.dart';
|
|
|
-import 'package:liftmanager/internal/search/search_router.dart';
|
|
|
-import 'package:liftmanager/widgets/app_search_bar.dart';
|
|
|
-import 'package:liftmanager/res/resources.dart';
|
|
|
-import 'package:liftmanager/routers/fluro_navigator.dart';
|
|
|
-import 'package:liftmanager/widgets/load_image.dart';
|
|
|
-import 'package:liftmanager/widgets/selected_image_change.dart';
|
|
|
-import 'package:image_picker/image_picker.dart';
|
|
|
-import 'dart:io';
|
|
|
-import 'package:liftmanager/widgets/bbs_content.dart';
|
|
|
-import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
|
-import 'package:flutter_spinkit/flutter_spinkit.dart';
|
|
|
-import 'package:video_player/video_player.dart';
|
|
|
-import 'package:liftmanager/utils/image_utils.dart';
|
|
|
-import 'package:liftmanager/internal/bbs/bbs_router.dart';
|
|
|
-import 'package:flustars/flustars.dart' as FlutterStars;
|
|
|
-import 'package:liftmanager/common/common.dart';
|
|
|
-import 'package:liftmanager/utils/theme_utils.dart';
|
|
|
-
|
|
|
-class VideoUpload extends StatefulWidget {
|
|
|
- // BrandPage(this.id);
|
|
|
-
|
|
|
- // final String id;
|
|
|
-
|
|
|
- @override
|
|
|
- State<StatefulWidget> createState() {
|
|
|
- return VideoUploadState();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-class VideoUploadState extends State<VideoUpload> {
|
|
|
- // NewsDetailItem item = NewsDetailItem();
|
|
|
-
|
|
|
- ScrollController _scrollController = new ScrollController();
|
|
|
- String brandChiose = '请选择';
|
|
|
- String brandName = "品牌";
|
|
|
- int brandIdss;
|
|
|
- bool sortBool = true;
|
|
|
- List<String> imagesUrl = [];
|
|
|
- List<String> videoUrl = [];
|
|
|
- @override
|
|
|
- void initState() {
|
|
|
- super.initState();
|
|
|
- }
|
|
|
-
|
|
|
- upLoadFileOnce(path) {
|
|
|
- showLoading(context, "正在上传...");
|
|
|
- NewApiService().upload(path, onSuccess: (res) {
|
|
|
- // imagesUrl.add(res.path);
|
|
|
- dismissLoading(context);
|
|
|
-
|
|
|
- setState(() {
|
|
|
- videoUrl = [];
|
|
|
- imagesUrl = [];
|
|
|
- videoUrl.add(res.pathUrl);
|
|
|
- imagesUrl.add(res.coverUrl);
|
|
|
- });
|
|
|
- }, onError: (code, msg) {
|
|
|
- dismissLoading(context);
|
|
|
- toasts(msg);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- List<dynamic> brandList;
|
|
|
- Future getBrandList() async {
|
|
|
- await NewApiService().getBrandListNoPage(onSuccess: (res) {
|
|
|
- if (res != null) {
|
|
|
- brandList = res;
|
|
|
- setState(() {});
|
|
|
- }
|
|
|
- }, onError: (code, msg) {
|
|
|
- toasts(msg);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- ///选择视频
|
|
|
- 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 {
|
|
|
- var _imageFile = await ImagePicker.pickVideo(
|
|
|
- source: key == 1 ? ImageSource.camera : ImageSource.gallery,
|
|
|
- );
|
|
|
- if (_imageFile != null) {
|
|
|
- upLoadFileOnce(_imageFile.path);
|
|
|
- setState(() {});
|
|
|
- }
|
|
|
- } catch (e) {
|
|
|
- toasts("没有权限,无法打开相册!");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 焦点控制
|
|
|
- FocusNode focusNode1 = new FocusNode();
|
|
|
- GlobalKey _formKey = new GlobalKey<FormState>();
|
|
|
- TextEditingController _titleController = new TextEditingController();
|
|
|
- TextEditingController _descController = new TextEditingController();
|
|
|
-
|
|
|
-
|
|
|
- @override
|
|
|
- Widget build(BuildContext context) {
|
|
|
- double width = MediaQuery.of(context).size.width;
|
|
|
- double height = MediaQuery.of(context).size.height;
|
|
|
-
|
|
|
- return Scaffold(
|
|
|
- resizeToAvoidBottomPadding: false, //不让键盘弹上去
|
|
|
- appBar: MyAppBar(
|
|
|
- centerTitle: "上传视频",
|
|
|
- ),
|
|
|
- body: GestureDetector(
|
|
|
- onTap: () {
|
|
|
- // 点击空白页面关闭键盘
|
|
|
- FocusScope.of(context).requestFocus(focusNode1);
|
|
|
- },
|
|
|
- child: Stack(
|
|
|
- children: <Widget>[
|
|
|
- Container(
|
|
|
- child: ListView(children: <Widget>[
|
|
|
- Form(
|
|
|
- key: _formKey, //设置globalKey,用于后面获取FormState
|
|
|
- // autovalidate: true, //开启自动校验
|
|
|
- child: Column(
|
|
|
- children: <Widget>[
|
|
|
- ChioseThisRight(
|
|
|
- label: "电梯品牌",
|
|
|
- value: brandChiose,
|
|
|
- fun: () {
|
|
|
- setState(() {
|
|
|
- // brandChiose = brandListChiose[index];
|
|
|
- sortBool = false;
|
|
|
- print(5656333);
|
|
|
- });
|
|
|
- getBrandList();
|
|
|
- // Navigator.maybePop(context);
|
|
|
- }),
|
|
|
- Row(
|
|
|
- crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
- mainAxisAlignment: MainAxisAlignment.start,
|
|
|
- children: <Widget>[
|
|
|
- Container(
|
|
|
- padding: EdgeInsets.only(
|
|
|
- left: ScreenUtil().setWidth(15),
|
|
|
- top: ScreenUtil().setWidth(10),
|
|
|
- bottom: ScreenUtil().setWidth(5)),
|
|
|
- child: Text(
|
|
|
- "视频标题",
|
|
|
- style: TextStyle(
|
|
|
- // fontSize:ScreenUtil().setSp(14),
|
|
|
- ),
|
|
|
- textAlign: TextAlign.left,
|
|
|
- ),
|
|
|
- ),
|
|
|
- ],
|
|
|
- ),
|
|
|
- Container(
|
|
|
- height: 80,
|
|
|
- padding: EdgeInsets.only(
|
|
|
- left: ScreenUtil().setWidth(15),
|
|
|
- right: ScreenUtil().setWidth(15),
|
|
|
- bottom: ScreenUtil().setWidth(20)),
|
|
|
- child: TextFormField(
|
|
|
- // autofocus: true,
|
|
|
- maxLength: 50,
|
|
|
- cursorColor: Color(0xffcccccc),
|
|
|
- controller: _titleController,
|
|
|
- maxLines: 5,
|
|
|
- decoration: InputDecoration(
|
|
|
- contentPadding: EdgeInsets.all(0),
|
|
|
-
|
|
|
- hintText: '请输入你上传视频的标题',
|
|
|
- hintStyle: TextStyle(color: Color(0xffcccccc)),
|
|
|
- focusedBorder: InputBorder.none,
|
|
|
- border: InputBorder.none,
|
|
|
- // filled: true, // 背景色
|
|
|
- // fillColor: Colors.cyan.withAlpha(35),
|
|
|
- // icon: Icon(Icons.person)
|
|
|
- ),
|
|
|
-
|
|
|
- // 校验
|
|
|
- validator: (val) {
|
|
|
- return val.trim().length > 0 ? null : "不能为空";
|
|
|
- }),
|
|
|
- ),
|
|
|
- SizedBox(
|
|
|
- height: 6,
|
|
|
- child: Container(color: ThemeUtils.getDialogTextFieldColor(context)),
|
|
|
- ),
|
|
|
- Row(
|
|
|
- crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
- mainAxisAlignment: MainAxisAlignment.start,
|
|
|
- children: <Widget>[
|
|
|
- Container(
|
|
|
- padding: EdgeInsets.only(
|
|
|
- left: ScreenUtil().setWidth(15),
|
|
|
- top: ScreenUtil().setWidth(10),
|
|
|
- bottom: ScreenUtil().setWidth(5)),
|
|
|
- child: Text(
|
|
|
- "视频简介",
|
|
|
- style: TextStyle(
|
|
|
- // fontSize:ScreenUtil().setSp(14),
|
|
|
- ),
|
|
|
- textAlign: TextAlign.left,
|
|
|
- ),
|
|
|
- ),
|
|
|
- ],
|
|
|
- ),
|
|
|
- Container(
|
|
|
- height: 120,
|
|
|
- padding: EdgeInsets.only(
|
|
|
- left: ScreenUtil().setWidth(15),
|
|
|
- right: ScreenUtil().setWidth(15),
|
|
|
- bottom: ScreenUtil().setWidth(20)),
|
|
|
- child: TextFormField(
|
|
|
- // autofocus: true,
|
|
|
- maxLength: 500,
|
|
|
- cursorColor: Color(0xffcccccc),
|
|
|
- controller: _descController,
|
|
|
- maxLines: 5,
|
|
|
- decoration: InputDecoration(
|
|
|
- contentPadding: EdgeInsets.all(0),
|
|
|
-
|
|
|
- hintText: '请输入您上传视频的简介',
|
|
|
- hintStyle: TextStyle(color: Color(0xffcccccc)),
|
|
|
- focusedBorder: InputBorder.none,
|
|
|
- border: InputBorder.none,
|
|
|
- // filled: true, // 背景色
|
|
|
- // fillColor: Colors.cyan.withAlpha(35),
|
|
|
- // icon: Icon(Icons.person)
|
|
|
- ),
|
|
|
-
|
|
|
- // 校验
|
|
|
- validator: (val) {
|
|
|
- return val.trim().length > 0 ? null : "不能为空";
|
|
|
- }),
|
|
|
- ),
|
|
|
- SizedBox(
|
|
|
- height: 6,
|
|
|
- child: Container(color: ThemeUtils.getDialogTextFieldColor(context)),
|
|
|
- ),
|
|
|
- Container(
|
|
|
- width: width,
|
|
|
- padding: EdgeInsets.only(left:15,top:15),
|
|
|
- child: Text(
|
|
|
- "(建议时长3分钟,建议大小50M)",
|
|
|
- style: TextStyle(
|
|
|
- color: Colors.red,
|
|
|
- fontSize:
|
|
|
- ScreenUtil()
|
|
|
- .setSp(14),
|
|
|
- ),
|
|
|
- textAlign: TextAlign.left,
|
|
|
- ),
|
|
|
- ),
|
|
|
- Container(
|
|
|
- color: ThemeUtils.getTabsBg(context),
|
|
|
- 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:
|
|
|
- videoUrl.length >= 1 ? 1 : videoUrl.length + 1,
|
|
|
- itemBuilder: (_, index) {
|
|
|
- return Stack(
|
|
|
- children: <Widget>[
|
|
|
- Center(
|
|
|
- child: SelectedImage(
|
|
|
- image: index < videoUrl.length
|
|
|
- ? imagesUrl[index]
|
|
|
- : null,
|
|
|
- // image: index < videoUrl.length ? videoUrl[index] : null,
|
|
|
- index: index,
|
|
|
- onTap: () {
|
|
|
- if (index >= videoUrl.length) {
|
|
|
- selectPicker();
|
|
|
- }
|
|
|
- FocusScope.of(context)
|
|
|
- .requestFocus(FocusNode());
|
|
|
- print(index);
|
|
|
- print(videoUrl);
|
|
|
- }),
|
|
|
- ),
|
|
|
- index < videoUrl.length
|
|
|
- ? Positioned(
|
|
|
- top: 0,
|
|
|
- right: 0,
|
|
|
- child: GestureDetector(
|
|
|
- onTap: () {
|
|
|
- print(index);
|
|
|
- videoUrl.remove(videoUrl[index]);
|
|
|
- imagesUrl.remove(imagesUrl[index]);
|
|
|
- setState(() {});
|
|
|
- },
|
|
|
- child: Icon(
|
|
|
- IconData(0xe62a,
|
|
|
- fontFamily: "myfont"),
|
|
|
- size: 24.0,
|
|
|
- color: Color(0xff999999),
|
|
|
- ),
|
|
|
- ))
|
|
|
- : Container(
|
|
|
- child: null,
|
|
|
- )
|
|
|
- ],
|
|
|
- );
|
|
|
- },
|
|
|
- )),
|
|
|
- SizedBox(
|
|
|
- height: ScreenUtil().setWidth(80),
|
|
|
- ),
|
|
|
- ],
|
|
|
- ),
|
|
|
- )
|
|
|
- ])),
|
|
|
- Positioned(
|
|
|
- bottom: 0,
|
|
|
- left: 0,
|
|
|
- child: Container(
|
|
|
- width: width,
|
|
|
- padding: EdgeInsets.only(
|
|
|
- top: ScreenUtil().setWidth(15),
|
|
|
- bottom: ScreenUtil().setWidth(15),
|
|
|
- left: ScreenUtil().setWidth(25),
|
|
|
- right: ScreenUtil().setWidth(25)),
|
|
|
- color: ThemeUtils.getDialogTextFieldColor(context),
|
|
|
- child: Container(
|
|
|
- height: ScreenUtil().setWidth(44),
|
|
|
- decoration: BoxDecoration(
|
|
|
- borderRadius:
|
|
|
- BorderRadius.circular(ScreenUtil().setWidth(22)),
|
|
|
- gradient: const LinearGradient(
|
|
|
- colors: [Color(0xFF00D9FF), Color(0xFF0287FF)]),
|
|
|
- ),
|
|
|
- child: FlatButton(
|
|
|
- // padding: EdgeInsets.all(15.0),
|
|
|
- child: Text("提交"),
|
|
|
- textColor: Colors.white,
|
|
|
- onPressed: () {
|
|
|
- if (brandIdss == null) {
|
|
|
- toasts("请选择品牌");
|
|
|
- return;
|
|
|
- }
|
|
|
- if (videoUrl.length < 1) {
|
|
|
- toasts("请上传视频");
|
|
|
- return;
|
|
|
- }
|
|
|
- String videos = videoUrl.join(",");
|
|
|
- String images = imagesUrl.join(",");
|
|
|
- if ((_formKey.currentState as FormState).validate()) {
|
|
|
- dynamic obj = {
|
|
|
- "brandId": brandIdss,
|
|
|
- "title": _titleController.text,
|
|
|
- "descr": _descController.text,
|
|
|
- "url": videos,
|
|
|
- "cover": images,
|
|
|
- "checkFlag": 2,
|
|
|
- "statuz": 1,
|
|
|
- "platformFlag": 1,
|
|
|
- "userId":FlutterStars.SpUtil.getString(Constant.userId),
|
|
|
- };
|
|
|
- showLoading(context, "正在提交...");
|
|
|
-
|
|
|
- NewApiService().addVideo(obj, onSuccess: (res) {
|
|
|
- dismissLoading(context);
|
|
|
- toasts("提交成功");
|
|
|
-
|
|
|
- Navigator.pop(context);
|
|
|
- }, onError: (code, msg) {
|
|
|
- dismissLoading(context);
|
|
|
- toasts(msg);
|
|
|
- });
|
|
|
- }
|
|
|
- },
|
|
|
- ),
|
|
|
- ),
|
|
|
- )),
|
|
|
- !sortBool
|
|
|
- ? Positioned(
|
|
|
- top: 0,
|
|
|
- left: 0,
|
|
|
- child: Container(
|
|
|
- width: width,
|
|
|
- height: height,
|
|
|
- color: Color.fromRGBO(0, 0, 0, 0.5)))
|
|
|
- : Container(child: null),
|
|
|
- !sortBool
|
|
|
- ? Positioned(
|
|
|
- top: 0,
|
|
|
- right: 0,
|
|
|
- child: Container(
|
|
|
- width: width / 4 * 3,
|
|
|
- height: height,
|
|
|
- color: Colors.white,
|
|
|
- padding: EdgeInsets.all(10),
|
|
|
- child: ListView(
|
|
|
- children: <Widget>[
|
|
|
- Container(
|
|
|
- padding:
|
|
|
- EdgeInsets.only(left: 5, top: 5, bottom: 10),
|
|
|
- child: Text(
|
|
|
- "品牌",
|
|
|
- style: TextStyle(
|
|
|
- color: Color(0xff666666),
|
|
|
- fontSize: ScreenUtil().setSp(16)),
|
|
|
- textAlign: TextAlign.start,
|
|
|
- ),
|
|
|
- ),
|
|
|
- brandList != null && brandList != []
|
|
|
- ? Container(
|
|
|
- child: Wrap(
|
|
|
- alignment: WrapAlignment.start,
|
|
|
- crossAxisAlignment:
|
|
|
- WrapCrossAlignment.center,
|
|
|
- children:
|
|
|
- brandList.asMap().keys.map((index) {
|
|
|
- return InkWell(
|
|
|
- onTap: () {
|
|
|
- print("666");
|
|
|
-
|
|
|
- setState(() {
|
|
|
- sortBool = true;
|
|
|
- brandChiose =
|
|
|
- brandList[index].name ?? "";
|
|
|
- brandIdss = brandList[index].id;
|
|
|
- });
|
|
|
- },
|
|
|
- child: Container(
|
|
|
- width: width / 4 - 17,
|
|
|
- padding: EdgeInsets.only(
|
|
|
- bottom: ScreenUtil().setWidth(10),
|
|
|
- top: ScreenUtil().setWidth(10)),
|
|
|
- margin: EdgeInsets.only(
|
|
|
- left: 5,
|
|
|
- right: 5,
|
|
|
- bottom: 5,
|
|
|
- top: 5),
|
|
|
- decoration: BoxDecoration(
|
|
|
- // border: Border(
|
|
|
- // bottom: BorderSide(width: 0.5, color: Colours.line),
|
|
|
- // ),
|
|
|
- color: Color(0xfff5f5f5)),
|
|
|
- child: Text(
|
|
|
- brandList[index].name ?? "",
|
|
|
- style: TextStyle(
|
|
|
- color: Color(0xff666666),
|
|
|
- fontSize:
|
|
|
- ScreenUtil().setSp(15)),
|
|
|
- textAlign: TextAlign.center,
|
|
|
- ),
|
|
|
- ),
|
|
|
- );
|
|
|
- }).toList(),
|
|
|
- ))
|
|
|
- : loadCircle()
|
|
|
- ],
|
|
|
- )))
|
|
|
- : Container(child: null),
|
|
|
- ],
|
|
|
- ),
|
|
|
- ),
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- Widget loadCircle() {
|
|
|
- return Container(
|
|
|
- padding: EdgeInsets.only(top: 10, bottom: 10),
|
|
|
- color: ThemeUtils.getTabsBg(context),
|
|
|
- child: Center(
|
|
|
- child: SpinKitFadingCircle(
|
|
|
- color: Colors.blueAccent,
|
|
|
- size: 30.0,
|
|
|
- ),
|
|
|
- ),
|
|
|
- );
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-class ChioseThisRight extends StatelessWidget {
|
|
|
- ChioseThisRight(
|
|
|
- {Key key, this.value, this.label, this.fun, this.labelText = '请选择'})
|
|
|
- : super(key: key);
|
|
|
- String value;
|
|
|
- String label;
|
|
|
- Function fun;
|
|
|
- String labelText;
|
|
|
- @override
|
|
|
- Widget build(BuildContext context) {
|
|
|
- double width = MediaQuery.of(context).size.width;
|
|
|
- return InkWell(
|
|
|
- onTap: () {
|
|
|
- fun();
|
|
|
- },
|
|
|
- child: Container(
|
|
|
- padding: EdgeInsets.only(
|
|
|
- top: ScreenUtil().setWidth(15), bottom: ScreenUtil().setWidth(15)),
|
|
|
- margin: EdgeInsets.only(left: ScreenUtil().setWidth(15)),
|
|
|
- decoration: BoxDecoration(
|
|
|
- border: Border(
|
|
|
- bottom: BorderSide(width: 0.5, color: Colours.line),
|
|
|
- ),
|
|
|
- ),
|
|
|
- child: Row(
|
|
|
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
- children: <Widget>[
|
|
|
- Text(
|
|
|
- label,
|
|
|
- style: TextStyle(
|
|
|
- // fontSize: ScreenUtil().setSp(14)
|
|
|
- ),
|
|
|
- textAlign: TextAlign.start,
|
|
|
- ),
|
|
|
- value.isEmpty
|
|
|
- ? Container(
|
|
|
- child: Row(children: <Widget>[
|
|
|
- Text(
|
|
|
- labelText,
|
|
|
- style: TextStyle(
|
|
|
- color: Color(0xffcccccc),
|
|
|
- // fontSize: ScreenUtil().setSp(14)
|
|
|
- ),
|
|
|
- textAlign: TextAlign.start,
|
|
|
- ),
|
|
|
- Container(
|
|
|
- padding: EdgeInsets.only(top: 3),
|
|
|
- child: Icon(
|
|
|
- Icons.keyboard_arrow_right,
|
|
|
- size: 20.0,
|
|
|
- color: Color(0xffcccccc),
|
|
|
- ),
|
|
|
- ),
|
|
|
- SizedBox(width: 10)
|
|
|
- ]),
|
|
|
- )
|
|
|
- : Container(
|
|
|
- padding:
|
|
|
- EdgeInsets.only(right: ScreenUtil().setWidth(15)),
|
|
|
- child: Row(children: <Widget>[
|
|
|
- Text(
|
|
|
- value,
|
|
|
- style: TextStyle(
|
|
|
- color: Color(0xff222222),
|
|
|
- fontSize: ScreenUtil().setSp(14)),
|
|
|
- textAlign: TextAlign.start,
|
|
|
- ),
|
|
|
- ]),
|
|
|
- ),
|
|
|
- ]),
|
|
|
- ),
|
|
|
- );
|
|
|
- }
|
|
|
-}
|