import 'dart:async'; import 'dart:ui'; import 'package:flutter/cupertino.dart' as prefix0; import 'package:flutter/material.dart'; import 'package:flutter/material.dart' as prefix1; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:battery/battery.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter/cupertino.dart'; import '../styles/colors.dart'; import '../plugins/ScreenStramPlugin.dart'; import '../net/HttpManager.dart'; import '../net/Result.dart'; import '../redux/AppState.dart'; import '../model/HouseInfo.dart'; import '../styles/totast.dart'; import 'StartWindow.dart'; import '../model/PlayerInfo.dart'; import '../widget/VideoWidget.dart'; import '../widget/Dialog.dart'; import 'CompetitionInformation.dart'; import 'SecondRoomInfo.dart'; import 'VideoPlayer.dart'; import '../model/UserInfo.dart'; import '../widget/LinearButton.dart'; import 'Appeal.dart'; class RoomInfo extends StatefulWidget { RoomInfo({Key key, this.roomId}) : super(key: key); final String roomId; // 用来储存传递过来的值 @override RoomInfoState createState() => RoomInfoState(); } class RoomInfoState extends State with SingleTickerProviderStateMixin { List tabList; TabController mController; Map roomInfo; HouseInfo houseInfo; Map colorInfo; bool isJoin = true; PlayerInfo playerInfo; bool isPop = false; bool showBack = false; Timer timer; List> roomTipsList = []; ScrollController _tipController; String _myUrl; int tabIndex = 0; UserInfo userInfo; int myRank = 0; String mymedal = ''; bool canAppeal = false; int appealState = 0; //获取房间信息 Future getRoomInfo(type) async { print('现在时间:' + DateTime.now().millisecondsSinceEpoch.toString()); Toast.show(context, '加载中', -1, 'loading'); Result res = await HttpManager.get('houseInfo/getOne', data: {'id': widget.roomId}); Toast.hide(); if (res.success) { setState(() { roomInfo = res.data; houseInfo = HouseInfo.fromJson(res.data); }); // showNotice(); if (houseInfo.statusFlag == 0 && houseInfo.userId != StoreProvider.of(context).state.userInfo.id) { showNotice(); } if (houseInfo.statusFlag < 2 && type == 'first') { final battery = Battery(); final batteryLevel = await battery.batteryLevel; await MyDialog.showDialog(context, (batteryLevel < 50 ? '系统检测到你的电量低于50%' : '') + ' 为了正常上传比赛结果,建议插上电源线保持电量充足', submitText: '知道了'); } } else {} checkJoinInfo(); } //开始比赛 Future startGame() async { Toast.show(context, '加载中', -1, 'loading'); Result res = await HttpManager.post('houseInfo/handBegin', data: {'id': widget.roomId}); Toast.hide(); } //隔一秒检查是否开始 Future getNowStatus() async { Result res = await HttpManager.get('houseInfo/getPlayerNum', data: {'id': widget.roomId}); if (res.success) { if (houseInfo.statusFlag == 0 && res.data['statusFlag'] == 2) { showStart(); // timer.cancel(); } setState(() { houseInfo.playerNumber = res.data['playerNumber']; houseInfo.statusFlag = res.data['statusFlag']; houseInfo.bonus = res.data['bonus']; houseInfo.beginTime = res.data['beginTime']; }); } } //开始比赛确认按钮 Future showStart() async { if (!isJoin) { return; } bool result = await Navigator.of(context).push( PageRouteBuilder( opaque: false, transitionDuration: Duration(milliseconds: 300), transitionsBuilder: (BuildContext context, Animation animation, Animation secondaryAnimation, Widget child) { return FadeTransition( opacity: CurvedAnimation(parent: animation, curve: Curves.linear), child: child, ); }, pageBuilder: (BuildContext context, _, __) { return StartWindow(); }, ), ); Map data = {'id': playerInfo.id}; bool success = true; if (result) { success = await ScreenStreamPlugin.start(playerInfo.id.toString()); if (success) { data['beginTime'] = DateTime.now().millisecondsSinceEpoch; data['statusFlag'] = 2; data['played'] = true; } else { data['statusFlag'] = 6; data['played'] = false; } } else { data['statusFlag'] = 6; data['played'] = false; } Toast.show(context, '加载中', -1, 'loading'); Result res = await HttpManager.post('playerInfo/update', data: data); Toast.hide(); // MyDialog.showDialog(context, '自动启动游戏失败,请手动切换到游戏app开始竞赛', submitText: '知道了'); // Timer(Duration(seconds: 10), () { // showSucessInfo(); // }); // return; if (res.success) { if (data['statusFlag'] == 2) { const url = 'pubgmhd1106467070://'; if (await canLaunch(url)) { Timer(Duration(seconds: 1), () async { await launch(url); showSucessInfo(3); }); } else { MyDialog.showDialog(context, '自动启动游戏失败,请手动切换到游戏app开始竞赛', submitText: '知道了'); Timer(Duration(seconds: 10), () { showSucessInfo(3); }); throw 'Could not launch $url'; } } else { showBackDialog(success ? 1 : 0); } } } //开始录屏提示框 void showSucessInfo(status) { MyDialog.showDialog(context, '您已经完成比赛了吗,确认完成,那就点击下方完成竞赛按钮,上传本次成绩,祝您赢取大奖', title: '完成比赛', submitText: '我已完成比赛', onsubmit: () async { HttpManager.post('playerInfo/update', data: {'id': playerInfo.id, 'statusFlag': status, 'endTime': DateTime.now().millisecondsSinceEpoch}); bool success = await ScreenStreamPlugin.stop(); Timer(Duration(seconds: 1), () { getEndTips(); }); setState(() { playerInfo.statusFlag = 3; }); }); } Future getEndTips() async { Result res = await HttpManager.get('playerInfo/endNum', data: {'houseId': widget.roomId}); if (res.success) { int time = houseInfo.beginTime + 1 * 3600 * 1000 - DateTime.now().millisecondsSinceEpoch; var nowTime = (time ~/ 1000 ~/ 60) % 60; setState(() { roomTipsList.add(['你已完成本次比赛,当前完成人数 ', res.data.toString(), '人,比赛需要等待所有人完成后方可结算奖励', '', ',你可以先去参加其他竞赛,稍后在“个人中心-我的战绩”中可以查看本次竞赛排名及领取奖励']); changeScroll(); }); } } //未确认比赛弹窗 void showBackDialog(type) { MyDialog.showDialog(context, (type == 1 ? '由于您未在十秒内点击开始按钮' : '由于您未授权录屏') + ',系统已经判定您放弃比赛,谢谢您的参与。', title: '很遗憾'); } //检查加入信息 Future checkJoinInfo() async { Result res = await HttpManager.get('playerInfo/getOne', data: {'userId': StoreProvider.of(context).state.userInfo.id, 'houseId': widget.roomId}); if (res.success) { if (res.data == null) { setState(() { isJoin = false; }); if (houseInfo.statusFlag == 0) { if (houseInfo.createUser == StoreProvider.of(context).state.userInfo.id.toString()) { roomTipsList.add(['房间创建成功,待人数满员时会自动开启比赛,房主也可以手动开启比赛,同时,你也可以加入本次比赛']); changeScroll(); } if (isJoin) { roomTipsList .add(['待人数满员时会自动开启比赛,房主也可以手动开启比赛,请在此页面耐心等待其他人的加入,加入房间后再次退出则视为自动放弃比赛。', '由于部分手机在低电量情况下无法在后台正常运行竞赛APP,为了你比赛数据的正常获取,请保持手机电量在50%以上', '', '', '']); } changeScroll(); } } else { if (houseInfo.statusFlag == 0) { roomTipsList .add(['待人数满员时会自动开启比赛,房主也可以手动开启比赛,请在此页面耐心等待其他人的加入,加入房间后再次退出则视为自动放弃比赛。', '由于部分手机在低电量情况下无法在后台正常运行竞赛APP,为了你比赛数据的正常获取,请保持手机电量在50%以上', '', '', '']); } playerInfo = PlayerInfo.fromJson(res.data); if (playerInfo.medal != null) { mymedal = res.data['medal']; } if (houseInfo.statusFlag == 4) { _myUrl = await ScreenStreamPlugin.getVideo(playerInfo.id.toString()); print('本地视频' + playerInfo.id.toString()); print(_myUrl); Result rankRes = await HttpManager.get('playerInfo/userRank', data: {'id': playerInfo.id}); if (rankRes.success) { myRank = rankRes.data + 1; } } setState(() { isJoin = true; }); if (houseInfo.statusFlag == 0) { // if (houseInfo.createUser == StoreProvider.of(context).state.userInfo.id.toString()) { // roomTipsList.add(['房间创建成功,待人数满员时会自动开启比赛,房主也可以手动开启比赛,请在此页面耐心等待其他人的加入,加入房间后再次退出则视为自动放弃比赛,已支付金币概不退换,快快点击右上角分享给好友加入战局吧']); // changeScroll(); // } else { // roomTipsList.add([ // '请在此页面耐心等待,竞赛即将开始,届时玩家有10秒的时间进行确认,点击确认方可正式进入竞赛,若没有点击,则视为自动放弃此次竞赛,已支付金币概不退换' // ]); // changeScroll(); // } // Timer(Duration(seconds: 1), () { // roomTipsList.add([ // '游戏开始后会有弹窗提示授权进行录屏的操作,', // '请一定点击“确定”或“允许”此操作', // ',系统会自动跳转打开游戏app,若长时间没有自动跳转,请手动打开游戏app进行比赛,在游戏比赛结束后,请', // '���定要点击查看游戏最后的��数名次结算页面', // ',返回游戏主页,最后再切换到我们竞赛app中,点击完成比赛,方可成功上传本次成绩。从游戏开始一小时之内必须返回全民App点击完成比赛,否则判定游戏失败,祝你取得好成绩。' // ]); // changeScroll(); // }); } else if (houseInfo.statusFlag != 4) { if (playerInfo.statusFlag == 3 || playerInfo.statusFlag == 8 || playerInfo.statusFlag == 9) { getEndTips(); } } } } if (isJoin && houseInfo.statusFlag != 4 || houseInfo.statusFlag == 0) { timer = Timer.periodic(Duration(seconds: 1), (timer) { print('检查'); getNowStatus(); }); } if (isJoin && houseInfo.statusFlag == 4) { HttpManager.get('appealInfo/getOne', data: { 'userId': StoreProvider.of(context).state.userInfo.id, 'playerInfoId': playerInfo.id, }).then((res) { if (res.success && res.data != null) { setState(() { canAppeal = true; appealState = 1; }); } else { setState(() { canAppeal = true; appealState = 0; }); } }); } if (houseInfo.statusFlag == 2 && playerInfo.beginTime != null && playerInfo.endTime == null) { showSucessInfo(9); } } //加入房间 Future joinRoom() async { print(StoreProvider.of(context).state.userInfo.moneyTicket); if (StoreProvider.of(context).state.userInfo.moneyTicket < 1) { MyDialog.showDialog(context, '门票不足不能加入'); return; } bool hasPermission = await ScreenStreamPlugin.checkPermission(); if (!hasPermission) { showDialog( context: context, builder: (context) => AlertDialog( title: Text('需要悬浮窗权限'), contentTextStyle: TextStyle(color: Colors.black87), content: Text('请在点击确定后,勾选"允许显示在其他应用的上层"'), actions: [ FlatButton( child: Text('确定'), onPressed: () { Navigator.of(context).pop(); ScreenStreamPlugin.requestPermission(); }, ), ], ), ); return; } Toast.show(context, '加载中', -1, 'loading'); Result res = await HttpManager.post('houseInfo/join', data: {'houseId': widget.roomId, 'userId': StoreProvider.of(context).state.userInfo.id}); Toast.hide(); if (res.success) { Toast.show(context, '加入成功', 1500, 'success'); checkJoinInfo(); } else { Toast.show(context, res.error, 1500, 'info'); } } //展示通知 void showNotice() { Navigator.of(context).push(PageRouteBuilder( opaque: false, transitionDuration: Duration(milliseconds: 300), transitionsBuilder: (BuildContext context, Animation animation, Animation secondaryAnimation, Widget child) { return FadeTransition( opacity: CurvedAnimation(parent: animation, curve: Curves.linear), child: child, ); }, pageBuilder: (BuildContext context, _, __) { return CompetitionInformation(houseInfo); })); } //改变滚动条 void changeScroll() { Timer(Duration(seconds: 1), () { _tipController.animateTo(context.size.height, duration: Duration(milliseconds: 1500), curve: Curves.ease); }); } //获取分秒 String getSecondsMIn(int time) { if (time == null) { return ''; } else { return ((time ~/ 1000 ~/ 60) % 60).toString() + '分' + (time ~/ 1000 % 60).toString() + '秒'; } } @override void initState() { super.initState(); tabList = [ {'title': '房间信息', 'value': 1}, {'title': '人员列表', 'value': 2} ]; mController = TabController( length: tabList.length, vsync: this, ); mController.addListener(() { setState(() { tabIndex = mController.index; }); print(tabIndex); }); _tipController = ScrollController(); roomInfo = {}; colorInfo = { '黄金': Color(0xFFF9D881), '白银': Color(0xFFAFCAD8), '青铜': Color(0xFFE18D50), }; Future.delayed(Duration.zero, () async { getRoomInfo('first'); userInfo = StoreProvider.of(context).state.userInfo; // showStart(); }); } @override void dispose() { super.dispose(); mController.dispose(); if (timer != null) { timer.cancel(); } } @override Widget build(BuildContext context) { ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context); int status = 0; if (houseInfo != null) { status = houseInfo.statusFlag; } return WillPopScope( child: Scaffold( appBar: AppBar( title: Container( child: TabBar( controller: mController, labelColor: Color(0xFFD4504B), unselectedLabelColor: Colors.white.withOpacity(0.5), labelStyle: TextStyle(fontSize: 16.0), indicatorColor: Color(0xFFC44D4B), indicatorWeight: 3, indicatorSize: TabBarIndicatorSize.label, tabs: tabList.map((item) { return Tab( text: item['title'], ); }).toList(), ), ), centerTitle: true, elevation: 0, actions: [ Container( padding: EdgeInsets.only(right: 30, left: 20), child: Image.asset( 'images/icon_fenxiang.png', width: 24, ), ) ], ), body: Container( color: BG_SUB_COLOR, child: TabBarView( controller: mController, children: [_firstPage(), SecondPage(roomId: widget.roomId, status: status)], )), floatingActionButton: _joinBtn(), floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, ), onWillPop: () { if (houseInfo == null || (houseInfo.statusFlag != 0) || !isJoin) { if (timer != null) { timer.cancel(); } isPop = true; Toast.hide(); Navigator.of(context).pop(); return Future.value(false); } else { Toast.show(context, '比赛即将开始,暂不能离开房间', 1500, 'info'); } return Future.value(false); }, ); } Widget _firstPage() { Map houseLevelInfo = roomInfo.isNotEmpty ? roomInfo['houseLevelInfo'] : {}; String levelName = houseLevelInfo.containsKey('levelName') ? houseLevelInfo['levelName'] : '黄金'; int joinMoney = houseLevelInfo.containsKey('feeRatio') && roomInfo.containsKey('bonus') ? houseLevelInfo['feeRatio'] * roomInfo['bonus'] : 0; String topImg = 'http://images.liqucn.com/img/h22/h70/img_localize_8e824debdd9ee29522690f36680e2d8e_600x337.png'; int statuFlag = 0; if (houseInfo != null) { if (houseInfo.video != null) { topImg = houseInfo.video; } if (houseInfo.statusFlag != null) { statuFlag = houseInfo.statusFlag; } } String timeStr = ''; int _time; if (houseInfo == null) { } else if (houseInfo.statusFlag == 0) { //房价未开始比赛 _time = houseInfo.createTime + 600000 - DateTime.now().millisecondsSinceEpoch; timeStr = '最迟 ${getSecondsMIn(_time)} 后自动开始比赛'; } // else if (isJoin && (houseInfo.statusFlag == 2 || houseInfo.statusFlag == 3)) { // _time = houseInfo.beginTime + 3600000 - DateTime.now().millisecondsSinceEpoch; // timeStr = '最迟 ${getSecondsMIn(_time)} 后结算'; // } List jiangpaiImg = ['images/jiangpai_huangjin.png', 'images/jiangpai_baiyin.png', 'images/jiangpai_qingtong.png', 'images/jiangpai_bojin.png']; String img = ''; if (playerInfo != null) { if (playerInfo.medal == 'platinum') { img = jiangpaiImg[3]; } else if (playerInfo.medal == 'gold') { img = jiangpaiImg[0]; } else if (playerInfo.medal == 'silver') { img = jiangpaiImg[1]; } else if (playerInfo.medal == 'bronze') { img = jiangpaiImg[2]; } } return LayoutBuilder( builder: (BuildContext context, BoxConstraints viewportConstraints) { return Container( child: RefreshIndicator( color: PRIMARY_COLOR, backgroundColor: Colors.white, displacement: 10, onRefresh: () async { await Future.delayed(const Duration(seconds: 1)); }, child: houseInfo != null ? SingleChildScrollView( controller: _tipController, physics: AlwaysScrollableScrollPhysics(), child: Column( children: [ houseInfo != null ? VideoWidget(videoSrc: houseInfo.video) : Container(), // Image.network(topImg, width: double.infinity), Container( padding: EdgeInsets.all(15), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( child: Text( houseInfo != null ? houseInfo.houseName : '', style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500), ), ), Container( width: 66, child: LinearButton( btntext: '竞赛须知', btnHeight: 28.0, textColor: Color(0xFF2E3049), textSize: 12.0, colorList: [Color(0xFFFFB726), Color(0xFFFFB726)], onTapHomeMenu: () { Navigator.of(context).push(PageRouteBuilder( opaque: false, transitionDuration: Duration(milliseconds: 300), transitionsBuilder: (BuildContext context, Animation animation, Animation secondaryAnimation, Widget child) { return FadeTransition( opacity: CurvedAnimation(parent: animation, curve: Curves.linear), child: child, ); }, pageBuilder: (BuildContext context, _, __) { return CompetitionInformation(houseInfo); })); }, ), ) // Container( // width: 5, // ), // houseInfo != null ? ScoreType(houseInfo.scoreType) : Container(), // Image.network( // houseLevelInfo.containsKey('icon') // ? houseLevelInfo['icon'] // : '', // width: 14, // ), // Text( // houseLevelInfo.containsKey('levelName') // ? houseLevelInfo['levelName'] // : '', // style: // TextStyle(color: colorInfo[levelName]), // ) ], )), Container( padding: EdgeInsets.symmetric(horizontal: 15), child: Row( // mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( 'images/icon_renshu.png', width: 20, ), Text( (houseInfo != null ? (houseInfo.playerNumber ?? 0).toString() : '0') + '/' + (houseInfo != null ? houseInfo.maxNumber.toString() : '0'), style: TextStyle(fontSize: 14, fontWeight: FontWeight.w500, color: Color(0xFFB1B2C0)), ), Container( width: 30, ), Text.rich(TextSpan(children: [ TextSpan(text: "模式 ", style: TextStyle(color: Colors.white30, fontSize: 14)), TextSpan(text: houseInfo.houseType == 0 ? '评分模式' : '吃鸡模式', style: TextStyle(color: Colors.white70, fontSize: 14)), ])), Container( width: 30, ), Text.rich(TextSpan(children: [ TextSpan(text: "房间ID ", style: TextStyle(color: Colors.white30, fontSize: 14)), TextSpan(text: houseInfo.houseCode != null ? houseInfo.houseCode : '', style: TextStyle(color: Colors.white70, fontSize: 14)), ])), ], ), ), timeStr != '' ? Container( decoration: BoxDecoration( color: Color.fromARGB(10, 212, 80, 75), borderRadius: BorderRadius.all(Radius.circular(4)), ), margin: EdgeInsets.fromLTRB(15, 15, 15, 0), padding: EdgeInsets.symmetric(vertical: 10), height: 40, width: double.infinity, child: Text(timeStr, textAlign: TextAlign.center, style: TextStyle(fontSize: 15, color: Color(0xFFD4504B), fontWeight: FontWeight.w500)), ) : Container(), statuFlag != 4 ? TipsListContent(tipsList: roomTipsList, houseInfo: houseInfo) : Container( child: playerInfo != null ? Column( children: [ ( playerInfo.statusFlag!=7&&playerInfo.statusFlag!=9&&!playerInfo.dataError)? Container( margin: EdgeInsets.symmetric(vertical: 10, horizontal: 15), padding: EdgeInsets.all(15), height: 80, decoration: BoxDecoration( color: Color(0xFF3A3E61), borderRadius: BorderRadius.only( topRight: Radius.circular(8), bottomLeft: Radius.circular(8), bottomRight: Radius.circular(8))), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('和平精英游戏结果', style: TextStyle(color: Colors.white54, fontSize: 13)), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text.rich(TextSpan(children: [ TextSpan(text: "名次 ", style: TextStyle(color: Colors.white, fontSize: 14)), TextSpan( text: '${myRank}', style: TextStyle(color: Color(0xFFFFB726), fontWeight: FontWeight.w500, fontSize: 14)), ])), Text.rich(TextSpan(children: [ TextSpan(text: "时长 ", style: TextStyle(color: Colors.white, fontSize: 14)), TextSpan( text: playerInfo.liveTime != null ? '${playerInfo.liveTime}' : '0', style: TextStyle(color: Color(0xFFFFB726), fontWeight: FontWeight.w500, fontSize: 14)), ])), Text.rich(TextSpan(children: [ TextSpan(text: "评分 ", style: TextStyle(color: Colors.white, fontSize: 14)), TextSpan( text: '${playerInfo.score}', style: TextStyle(color: Color(0xFFFFB726), fontWeight: FontWeight.w500, fontSize: 14)), ])), ], ) ], ), ):Container(), Container( margin: EdgeInsets.symmetric(vertical: 10, horizontal: 15), padding: EdgeInsets.all(15), height: 140, decoration: BoxDecoration( color: Color(0xFF3A3E61), borderRadius: BorderRadius.only( topRight: Radius.circular(8), bottomLeft: Radius.circular(8), bottomRight: Radius.circular(8))), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('比赛结果', style: TextStyle(color: Colors.white54, fontSize: 13)), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text("参数成员 ", style: TextStyle(color: Colors.white, fontSize: 14)), Text("${houseInfo.playerNumber}人 ", style: TextStyle(color: Color(0xFFFFB726), fontWeight: FontWeight.w500, fontSize: 14)) ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text("是否吃鸡 ", style: TextStyle(color: Colors.white, fontSize: 14)), Text(playerInfo.ranking == 1 ? '是' : '否', style: TextStyle(color: Color(0xFFFFB726), fontWeight: FontWeight.w500, fontSize: 14)) ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text("获得奖牌 ", style: TextStyle(color: Colors.white, fontSize: 14)), img != '' ? Row( children: [ prefix1.Image.asset( img, width: 20, ), Text("+1", style: TextStyle(color: Color(0xFFFFB726), fontWeight: FontWeight.w500, fontSize: 14)) ], ) : Text("无", style: TextStyle(color: Color(0xFFFFB726), fontWeight: FontWeight.w500, fontSize: 14)) ], ) ], ), ) ], ) : Container(), ), Container( width: double.infinity, height: 78, ) ], ), ) : Container()), ); }, ); } Widget _joinBtn() { int joinMoney = houseInfo != null ? houseInfo.houseLevel.entryCoin : 0; int statusFlag = houseInfo != null ? houseInfo.statusFlag : 1; int playerStatus = playerInfo != null ? playerInfo.statusFlag : 0; List jiangpaiImg = ['金牌', '银牌', '铜牌', '铂金']; String img = ''; if (mymedal != null) { if (mymedal == 'platinum') { img = jiangpaiImg[3]; } else if (mymedal == 'gold') { img = jiangpaiImg[0]; } else if (mymedal == 'silver') { img = jiangpaiImg[1]; } else if (mymedal == 'bronze') { img = jiangpaiImg[2]; } } if (!isJoin && statusFlag == 0 && houseInfo.userId == StoreProvider.of(context).state.userInfo.id) { return Container( padding: EdgeInsets.symmetric(vertical: 15, horizontal: 10), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( width: 165, child: LinearButton( colorList: [Color(0xFF4F5386), Color(0xFF4F5386)], childWidget: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( 'images/icon_menpiao.png', ), Container( margin: EdgeInsets.only(left: 6), child: Text( '×1', style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500), ), ), Container( margin: EdgeInsets.only(left: 5), child: Text( '加入比赛', style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500), )) ], ), onTapHomeMenu: () => joinRoom(), ), ), Container( width: 165, child: LinearButton( btntext: '开始竞赛', onTapHomeMenu: () { MyDialog.showDialog(context, '确认要开始比赛吗?', isCancel: true, onsubmit: () { print('开始'); startGame(); }); }, ), ) ], ), ); } else if (!isJoin && statusFlag == 0) { return Container( color: BG_SUB_COLOR, width: ScreenUtil().setWidth(375), height: 48 + ScreenUtil().setHeight(40), padding: EdgeInsets.only(top: ScreenUtil().setHeight(20), bottom: ScreenUtil().setHeight(20), left: 15, right: 15), child: LinearButton( childWidget: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( 'images/icon_menpiao.png', width: 20, ), Container( margin: EdgeInsets.only(left: 6), child: Text( '×1', style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500), ), ), Container( margin: EdgeInsets.only(left: 20), child: Text( '加入比赛', style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500), )) ], ), onTapHomeMenu: () => joinRoom(), ), ); } else if (!isJoin && statusFlag == 2) { return Container( width: double.infinity, padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20), height: 88, child: LinearButton(btntext: '房间已经开始,加入通道关闭', colorList: [Color(0xFFC99C09), Color(0xFFC7873E)], textColor: Color(0xFF252532)) // RaisedButton( // disabledColor: Color(0xFFC2524D), // disabledTextColor: Color(0xFF252532), // child: Text( // '房间已经开始,加入通道关闭', // style: TextStyle(fontSize: 16), // ), // onPressed: null, // ), ); } else if (isJoin && statusFlag == 0) { int _time; if (houseInfo != null) { _time = houseInfo.createTime + 600000 - DateTime.now().millisecondsSinceEpoch; } if (houseInfo != null && houseInfo.createUser == StoreProvider.of(context).state.userInfo.id.toString()) { return Container( width: double.infinity, padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20), height: 88, child: LinearButton( childWidget: Center( child: Text.rich(TextSpan(children: [ TextSpan( text: '开始比赛', style: TextStyle(fontSize: 16, color: Colors.white), ), // TextSpan( // text: '(${getSecondsMIn(_time)}秒后将自动开始)', // style: TextStyle(fontSize: 12), // ) ])), ), onTapHomeMenu: () { MyDialog.showDialog(context, '确认要开始比赛吗?', isCancel: true, onsubmit: () { print('开始'); startGame(); }); }, ) // RaisedButton( // child: Text.rich(TextSpan(children: [ // TextSpan( // text: '开始比赛', // style: TextStyle(fontSize: 16), // ), // TextSpan( // text: '(${getSecondsMIn(_time)}秒后将自动开始)', // style: TextStyle(fontSize: 12), // ) // ])), // onPressed: () { // MyDialog.showDialog(context, '确认要开始比赛吗?', isCancel: true, // onsubmit: () { // print('开始'); // startGame(); // }); // }, // ), ); } else { return Container( width: double.infinity, padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20), height: 88, child: LinearButton(btntext: '等待开始中', colorList: [Color(0xFFAF4946), Color(0xFFAF4946)], textColor: Color(0xFF252532))); } } else if (isJoin && statusFlag == 8) { return Container( width: double.infinity, padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20), height: 88, child: LinearButton(btntext: '正在努力解析视频中', colorList: [Color(0xFFAF4946), Color(0xFFAF4946)], textColor: Color(0xFF252532)) // RaisedButton( // disabledColor: Color(0xFFC2524D), // disabledTextColor: Color(0xFF252532), // child: Text( // '正在努力解析视频中', // style: TextStyle(fontSize: 16), // ), // onPressed: null, // ), ); } else if (isJoin && (statusFlag == 2 || statusFlag == 3)) { int _time; if (houseInfo != null) { _time = houseInfo.beginTime + 3600000 - DateTime.now().millisecondsSinceEpoch; } return Container( width: double.infinity, padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20), height: 88, child: LinearButton(btntext: '预计还有 ' + getSecondsMIn(_time) + ' 结算', colorList: [Color(0xFFAF4946), Color(0xFFAF4946)], textColor: Color(0xFF252532)), ); } else if (statusFlag == 4 && tabIndex == 0) { if (isJoin && canAppeal && appealState == 0 &&playerInfo!=null&&(playerInfo.statusFlag==9||playerInfo.statusFlag==7||playerInfo.dataError)) { return Container( width: double.infinity, padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20), height: 88, child: LinearButton( btntext: '申诉结果', colorList: [Color(0xFFAF4946), Color(0xFFAF4946)], textColor: Colors.white, onTapHomeMenu: () async { final success = await Navigator.push(context, CupertinoPageRoute(builder: (context) => Appeal(playerInfo))); if (success != null && success) { Toast.show(context, '提交成功', 1500, 'success'); setState(() { appealState = 1; }); } }, )); } else if (isJoin && canAppeal && appealState == 1) { return Container( width: double.infinity, padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20), height: 88, child: LinearButton(btntext: '已提交申诉', colorList: [Color(0xFFAF4946), Color(0xFFAF4946)], textColor: Color(0xFF252532))); } else { return Container(); } } else if (statusFlag == 4 && tabIndex == 1) { return Container( height: 48, child: LinearButton( childWidget: Padding( padding: EdgeInsets.symmetric(vertical: 9, horizontal: 20), child: Row( children: [ Container( width: 30, height: 30, margin: EdgeInsets.only(right: 10), child: CircleAvatar( backgroundImage: NetworkImage(userInfo.icon), ), ), Expanded( flex: 1, child: Text( userInfo.nickname, style: TextStyle( fontSize: 14, color: Color(0xFF252532), ), ), ), _myUrl != null ? Container( width: 68, height: 24, margin: EdgeInsets.only(right: 10), child: OutlineButton( textColor: BG_SUB_COLOR, borderSide: BorderSide(color: BG_SUB_COLOR), padding: EdgeInsets.all(0), highlightColor: PRIMARY_COLOR.withOpacity(0.8), highlightedBorderColor: BG_SUB_COLOR, child: Text( '查看回放', style: TextStyle(fontSize: 12), ), onPressed: () => {Navigator.push(context, CupertinoPageRoute(builder: (context) => VideoPlayerPage(videoUrl: _myUrl, fileType: 'file')))}, ), ) : Container(), myRank != 0 && myRank < 4 ? Text( img, style: TextStyle(fontSize: 14, color: Color(0xFF252532), fontWeight: FontWeight.w500), ) : Text( '未上榜', style: TextStyle(fontSize: 14, color: Color(0xFF252532), fontWeight: FontWeight.w500), ) ], ), ), ), ); } else { return Container(); } } } //房间的提示信息 class TipsListContent extends StatelessWidget { TipsListContent({Key key, this.tipsList, this.houseInfo}) : super(key: key); final List> tipsList; final HouseInfo houseInfo; @override Widget build(BuildContext context) { return Container( margin: EdgeInsets.only(top: 15), width: double.infinity, child: Column( children: _list(), ), ); } List _list() { List myList = []; for (int i = 0; i < tipsList.length; i++) { myList.add(Tips(content: tipsList[i], showTongzhi: (tipsList[i].length == 1 && i == 0) ? true : false, houseInfo: houseInfo)); } return myList; } } class Tips extends StatelessWidget { Tips({Key key, this.content, this.showTongzhi, this.houseInfo}) : super(key: key); final List content; final bool showTongzhi; final HouseInfo houseInfo; @override Widget build(BuildContext context) { return Container( padding: EdgeInsets.all(15), margin: EdgeInsets.fromLTRB(15, 10, 15, 0), decoration: BoxDecoration( // gradient: LinearGradient(colors: [Color(0xFF464B6A), Color(0xFF35395E)], begin: Alignment.topCenter, end: Alignment.bottomCenter), color: Color(0xFF3A3E61), borderRadius: BorderRadius.only(topRight: Radius.circular(8), bottomLeft: Radius.circular(8), bottomRight: Radius.circular(8))), child: Column( children: [ content.length == 1 ? Text( content[0], style: TextStyle(color: Colors.white, fontSize: 13), ) : _textList(), ], )); } Widget _textList() { return Text.rich(TextSpan(children: [ TextSpan( text: content[0], style: TextStyle(color: Colors.white, fontSize: 13), ), TextSpan( text: content[1], style: TextStyle(color: Color(0xFFFFB726), fontSize: 13, fontWeight: FontWeight.w500), ), TextSpan( text: content[2], style: TextStyle(color: Colors.white, fontSize: 13), ), TextSpan( text: content[3], style: TextStyle(color: Color(0xFFFFB726), fontSize: 13, fontWeight: FontWeight.w500), ), TextSpan( text: content[4], style: TextStyle(color: Colors.white, fontSize: 13), ) ])); } } //比赛结束排名 class RankContent extends StatefulWidget { RankContent({Key key, this.roomId}) : super(key: key); final String roomId; // 用来储存传递过来的值 @override RankContentState createState() => RankContentState(); } class RankContentState extends State { List topList = []; Future getTopList() async { Toast.show(context, '加载中', -1, 'loading'); Result res = await HttpManager.get('playerInfo/rankPage', data: {'houseId': widget.roomId, 'currentPage': 1, 'pageNumber': 3}); Toast.hide(); List list = []; if (res.success) { for (var item in res.data['pp']) { PlayerInfo jonPlayer = PlayerInfo.fromJson(item); list.add(jonPlayer); } } else {} setState(() { topList = list; }); } @override void initState() { super.initState(); Future.delayed(Duration.zero, () { getTopList(); }); } @override Widget build(BuildContext context) { return Container( width: double.infinity, height: 180, margin: EdgeInsets.only(top: 15), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, children: [_rankItem(2), _rankItem(1), _rankItem(3)], ), ); } Widget _rankItem(int _num) { if (_num > topList.length) { return Container( width: 107, height: 60, ); } List colorList = [ [Color(0xFFD48E00), Color(0xFFFECF01)], [Color(0xFFC5C5C5), Color(0xFFE3E3E3)], [Color(0xFFE77023), Color(0xFFF89E58)] ]; List imgList = ['images/jiangpai_huangjin.png', 'images/jiangpai_baiyin.png', 'images/jiangpai_qingtong.png', 'images/jiangpai_bojin.png']; String img = ''; if (topList[_num - 1].medal == 'platinum') { img = imgList[3]; } else if (topList[_num - 1].medal == 'gold') { img = imgList[0]; } else if (topList[_num - 1].medal == 'silver') { img = imgList[1]; } else if (topList[_num - 1].medal == 'bronze') { img = imgList[2]; } return Container( padding: EdgeInsets.only(left: 15, right: 15, top: _num == 1 ? 0 : 15), width: 107, child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( child: Stack( children: [ Container( margin: EdgeInsets.only(top: 17, bottom: 20), width: _num == 1 ? 70 : 60, height: _num == 1 ? 70 : 60, decoration: BoxDecoration( gradient: LinearGradient(colors: colorList[_num - 1], begin: Alignment.topLeft, end: Alignment.bottomRight), borderRadius: BorderRadius.all(Radius.circular(100)), ), child: Center( child: Container( width: _num == 1 ? 60 : 50, height: _num == 1 ? 60 : 50, child: CircleAvatar(backgroundImage: NetworkImage(topList[_num - 1].userInfo.icon)), )), ), Positioned( bottom: 0, child: Center( child: Image.asset( 'images/ph_yinpai_no' + '$_num.png', width: 67, ), ), ), Positioned( top: 0, left: 19, child: Center( child: img != '' ? Image.asset( img, ) : Container(), ), ) ], ), ), Text( topList[_num - 1].userInfo.nickname, style: TextStyle( color: Color(0xFFFDC372), fontSize: 12, ), overflow: TextOverflow.ellipsis, textAlign: TextAlign.center, ), // SizedBox( // height: 5, // ), // Row( // mainAxisAlignment: MainAxisAlignment.center, // children: [ // Image.asset('images/icon_jinbi_xiao_hong.png', width: 20), // Text('×' + (topList[_num - 1].bonus != null ? topList[_num - 1].bonus.toString() : '0'), style: TextStyle(color: PRIMARY_COLOR, fontSize: 12)) // ], // ) ], ), ); } }