import 'dart:io'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:dio/dio.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:image_picker/image_picker.dart'; import 'package:wanna_battle/model/PlayerInfo.dart'; import 'package:wanna_battle/net/HttpManager.dart'; import 'package:wanna_battle/net/Result.dart'; import 'package:wanna_battle/redux/AppState.dart'; import 'package:wanna_battle/styles/colors.dart'; import 'package:wanna_battle/styles/totast.dart'; class Appeal extends StatefulWidget { final PlayerInfo playerInfo; const Appeal(this.playerInfo, {Key key}) : super(key: key); @override State createState() { return AppealState(); } } class AppealState extends State { String img1; String img2; @override Widget build(BuildContext context) { return WillPopScope( onWillPop: () { return Future.value(true); }, child: Scaffold( appBar: AppBar( title: Text('上传比赛结果'), centerTitle: true, ), body: Column( children: [ Expanded( child: ListView( padding: EdgeInsets.only(left: 15, top: 18, right: 15, bottom: 18), children: [ Container( padding: EdgeInsets.all(3), child: Text( '很遗憾,因为部分手机系统性能问题导致比赛结果上传失败,请你按照下图所示方式上传历史战绩以及本次游戏比赛详情战绩,工作人员审核后会根据实际情况进行名次的排序以及奖励的发放', style: TextStyle(color: Colors.white, fontSize: 14), ), ), Container( margin: EdgeInsets.only(top: 20), child: Row( children: [ Expanded( child: Container( padding: EdgeInsets.only(right: 7), child: imgUpload('点击上传历史战绩截图', img1, (img) { setState(() { img1 = img; }); }), ), ), Expanded( child: Container( padding: EdgeInsets.only(left: 7), child: imgUpload('点击上传战绩详情截图', img2, (img) { setState(() { img2 = img; }); }), ), ), ], ), ), Container( margin: EdgeInsets.only(top: 30), child: Text( '历史战绩-图片示例', textAlign: TextAlign.center, style: TextStyle(color: Colors.white, fontSize: 14), ), ), Container( margin: EdgeInsets.only(top: 10), child: Image.asset( 'images/shili_img_01.png', fit: BoxFit.cover, ), ), Container( margin: EdgeInsets.only(top: 20), child: Text( '战绩详情-图片示例', textAlign: TextAlign.center, style: TextStyle(color: Colors.white, fontSize: 14), ), ), Container( margin: EdgeInsets.only(top: 10), child: Image.asset( 'images/shili_img_02.png', fit: BoxFit.cover, ), ), ], ), ), SafeArea( child: Container( height: 68, width: double.infinity, padding: EdgeInsets.fromLTRB(15, 10, 15, 10), child: FlatButton( color: PRIMARY_COLOR, child: Text( '提交', style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.bold), ), onPressed: () async { if (img1 == null || img1.isEmpty) { Toast.show(context, '请上传历史战绩截图', 1500, 'info'); } else if (img2 == null || img2.isEmpty) { Toast.show(context, '请上传战绩详情截图', 1500, 'info'); } else { Toast.show(context, '加载中', -1, 'loading'); final res = await HttpManager.post('appealInfo/save', data: { 'userId': StoreProvider.of(context).state.userInfo.id, 'playerInfoId': widget.playerInfo.id, 'competitionId': widget.playerInfo.competitionId, 'houseId': widget.playerInfo.houseId, 'pic': img1 + ',' + img2, }); Toast.hide(); if (res.success) { Navigator.of(context).pop(true); } else { Toast.show(context, '提交失败,请稍后再试', 1500, 'info'); } } }, ), ), ) ], ), ), ); } Widget imgUpload(String txt, String img, Function(String img) onUploadSuccess) { return GestureDetector( child: img != null && img.isNotEmpty ? Container( height: 111, decoration: BoxDecoration(border: Border.all(width: 1, color: Color(0x5C1990F8)), color: Color(0xFF293354)), child: CachedNetworkImage( imageUrl: img, height: 111, fit: BoxFit.contain, ), ) : Container( height: 111, decoration: BoxDecoration(border: Border.all(width: 1, color: Color(0x5C1990F8)), color: Color(0xFF293354)), child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset('images/icon_shangchuan.png', width: 34), Container( margin: EdgeInsets.only(top: 10), child: Text( txt, style: TextStyle(color: PRIMARY_COLOR, fontSize: 13), ), ) ], ), ), onTap: () async { File file = await ImagePicker.pickImage(source: ImageSource.gallery, maxWidth: 1000); if (file == null) { return; } Toast.show(context, '加载中', -1, 'loading'); Result res = await HttpManager.post('assets/uploadFile', data: { 'file': UploadFileInfo(file, file.path), }); Toast.hide(); print(res.toJson()); if (res.success) { onUploadSuccess(res.data[0]); } }, ); } }