import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:url_launcher/url_launcher.dart';
import '../styles/colors.dart';
import 'dart:ui';
import '../plugins/ScreenStramPlugin.dart';
import '../net/HttpManager.dart';
import '../net/Result.dart';
import 'package:flutter_redux/flutter_redux.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 'dart:async';
import '../widget/Dialog.dart';
import 'CompetitionInformation.dart';
import 'SecondRoomInfo.dart';
import 'package:flutter/cupertino.dart';
import 'VideoPlayer.dart';
import '../model/UserInfo.dart';

class RoomInfo extends StatefulWidget {
  RoomInfo({Key key, this.roomId}) : super(key: key);
  final String roomId; // 用来储存传递过来的值

  @override
  RoomInfoState createState() => RoomInfoState();
}

class RoomInfoState extends State<RoomInfo>
    with SingleTickerProviderStateMixin {
  List<Map> tabList;
  TabController mController;
  Map roomInfo;
  HouseInfo houseInfo;
  Map colorInfo;
  bool isJoin = true;
  PlayerInfo playerInfo;
  bool isPop = false;
  bool showBack = false;
  Timer timer;
  List<List<String>> roomTipsList = [];
  ScrollController _tipController;
  String _myUrl;
  int tabIndex = 0;
  UserInfo userInfo;
  int myRank = 0;

//获取房间信息
  Future<void> getRoomInfo() async {
    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) {
        showNotice();
      }
    } else {}

    checkJoinInfo();
  }

  //开始比赛
  Future<void> startGame() async {
    Toast.show(context, '加载中', -1, 'loading');
    Result res = await HttpManager.post('houseInfo/handBegin',
        data: {'id': widget.roomId});
    Toast.hide();
  }

//隔一秒检查是否开始
  Future<void> 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<void> showStart() async {
    if (!isJoin) {
      return;
    }
    bool result = await Navigator.of(context).push<bool>(
      PageRouteBuilder(
        opaque: false,
        transitionDuration: Duration(milliseconds: 300),
        transitionsBuilder: (BuildContext context, Animation<double> animation,
            Animation<double> secondaryAnimation, Widget child) {
          return FadeTransition(
            opacity: CurvedAnimation(parent: animation, curve: Curves.linear),
            child: child,
          );
        },
        pageBuilder: (BuildContext context, _, __) {
          return StartWindow();
        },
      ),
    );
    Map<String, dynamic> data = {'id': playerInfo.id};
    bool success = true;
    if (result) {
      success = await ScreenStreamPlugin.start(playerInfo.id.toString());
      if (success) {
        data['statusFlag'] = 2;
      } else {
        data['statusFlag'] = 6;
      }
    } else {
      data['statusFlag'] = 6;
    }
    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();
          });
        } else {
          MyDialog.showDialog(context, '自动启动游戏失败，请手动切换到游戏app开始竞赛',
              submitText: '知道了');
          Timer(Duration(seconds: 10), () {
            showSucessInfo();
          });

          throw 'Could not launch $url';
        }
      } else {
        showBackDialog(success ? 1 : 0);
      }
    }
  }

//开始录屏提示框
  void showSucessInfo() {
    MyDialog.showDialog(context, '您已经完成比赛了吗，确认完成，那就点击下方完成竞赛按钮，上传本次成绩，祝您赢取大奖',
        title: '完成比赛', submitText: '我已完成比赛', onsubmit: () async {
      HttpManager.post('playerInfo/update',
          data: {'id': playerInfo.id, 'statusFlag': 3});
      bool success = await ScreenStreamPlugin.stop();

      Timer(Duration(seconds: 1), () {
        getEndTips();
      });

      setState(() {
        playerInfo.statusFlag = 3;
      });
    });
  }

  Future<void> 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<void> checkJoinInfo() async {
    Result res = await HttpManager.get('playerInfo/getOne', data: {
      'userId': StoreProvider.of<AppState>(context).state.userInfo.id,
      'houseId': widget.roomId
    });
    if (res.success) {
      if (res.data == null) {
        setState(() {
          isJoin = false;
        });
        if (houseInfo.statusFlag == 0) {
          if (houseInfo.scoreType == 0) {
            roomTipsList.add([
              '上方奖金为当前本次竞赛的总奖金，根据当前人数的增加，奖金也就越多，竞赛的第一名获得${houseInfo.houseLevel.firstRatio}%，第二名获得${houseInfo.houseLevel.secondRatio}%，第三名获得${houseInfo.houseLevel.thirdRatio}%，其他名次算作失败没有奖励，祝你取得好成绩。注：奖金池的${houseInfo.houseLevel.feeRatio}%为平台方运营服务费, 奖金池的${houseInfo.houseLevel.poolRatio}%流入赛季总奖金。'
            ]);
          } else {
            roomTipsList.add([
              '同房间内的玩家进行竞赛，所有吃上鸡的玩家均可获得奖金,即平分总奖金池的${houseInfo.houseLevel.avgRatio}%。注：奖金池的${houseInfo.houseLevel.feeRatio}%为平台方运营服务费, 奖金池的${houseInfo.houseLevel.poolRatio}%流入赛季总奖金。'
            ]);
          }

          changeScroll();
        }
      } else {
        playerInfo = PlayerInfo.fromJson(res.data);

        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<AppState>(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) {
      timer = Timer.periodic(Duration(seconds: 1), (timer) {
        getNowStatus();
      });
    }
  }

//加入房间
  Future<void> joinRoom() async {
    Toast.show(context, '加载中', -1, 'loading');
    Result res = await HttpManager.post('houseInfo/join', data: {
      'houseId': widget.roomId,
      'userId': StoreProvider.of<AppState>(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<double> animation,
            Animation<double> 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, () {
      getRoomInfo();
      userInfo = StoreProvider.of<AppState>(context).state.userInfo;
    });
  }

  @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(
          backgroundColor: PRIMARY_COLOR,
          title: Container(
            child: TabBar(
              controller: mController,
              labelColor: Colors.white,
              unselectedLabelColor: Colors.white.withOpacity(0.5),
              labelStyle: TextStyle(fontSize: 16.0),
              indicatorColor: Colors.white,
              indicatorWeight: 3,
              indicatorSize: TabBarIndicatorSize.label,
              tabs: tabList.map((item) {
                return Tab(
                  text: item['title'],
                );
              }).toList(),
            ),
          ),
          centerTitle: true,
          elevation: 0,
          actions: <Widget>[
            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;
      }
    }

    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: SingleChildScrollView(
                  controller: _tipController,
                  physics: AlwaysScrollableScrollPhysics(),
                  child: Column(
                    children: <Widget>[
                      houseInfo != null
                          ? VideoWidget(videoSrc: houseInfo.video)
                          : Container(),
                      // Image.network(topImg, width: double.infinity),
                      Container(
                          padding: EdgeInsets.only(top: 10),
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: <Widget>[
                              Container(
                                margin: EdgeInsets.only(left: 30, right: 8),
                                child: Text(
                                  roomInfo.containsKey('houseName')
                                      ? roomInfo['houseName']
                                      : '',
                                  style: TextStyle(
                                      color: Colors.white,
                                      fontSize: 16,
                                      fontWeight: FontWeight.w500),
                                ),
                              ),
                              Image.network(
                                houseLevelInfo.containsKey('icon')
                                    ? houseLevelInfo['icon']
                                    : '',
                                width: 14,
                              ),
                              Text(
                                houseLevelInfo.containsKey('levelName')
                                    ? houseLevelInfo['levelName']
                                    : '',
                                style: TextStyle(color: colorInfo[levelName]),
                              )
                            ],
                          )),
                      Container(
                        margin: EdgeInsets.only(top: 6),
                        child: Text(
                          roomInfo.containsKey('houseAbstract')
                              ? roomInfo['houseAbstract']
                              : '',
                          style:
                              TextStyle(color: Color(0xFF9BA0AE), fontSize: 12),
                        ),
                      ),
                      Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: <Widget>[
                          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(
                        margin: EdgeInsets.only(top: 14),
                        width: 200,
                        height: 40,
                        decoration: BoxDecoration(
                          border: Border.all(
                              width: 1,
                              color: PRIMARY_COLOR,
                              style: BorderStyle.solid),
                          borderRadius: BorderRadius.all(Radius.circular(2)),
                        ),
                        child: Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: <Widget>[
                            Text(
                              '奖金',
                              style: TextStyle(
                                color: PRIMARY_COLOR,
                                fontSize: 13,
                                fontWeight: FontWeight.w500,
                              ),
                            ),
                            Container(
                              padding: EdgeInsets.only(left: 10, right: 6),
                              child: Image.asset(
                                'images/icon_jinbi_da_hong.png',
                                width: 20,
                              ),
                            ),
                            Text(
                              '×' +
                                  (houseInfo != null
                                      ? houseInfo.bonus.toString()
                                      : '0'),
                              style: TextStyle(
                                color: PRIMARY_COLOR,
                                fontSize: 22,
                                fontWeight: FontWeight.w900,
                              ),
                            )
                          ],
                        ),
                      ),

                      statuFlag != 4
                          ? TipsListContent(
                              tipsList: roomTipsList, houseInfo: houseInfo)
                          : RankContent(
                              roomId: widget.roomId,
                            ),
                      Container(
                        width: double.infinity,
                        height: 78,
                      )
                    ],
                  ))),
        );
      },
    );
  }

  Widget _joinBtn() {
    int joinMoney = houseInfo != null ? houseInfo.houseLevel.entryCoin : 0;
    int statusFlag = houseInfo != null ? houseInfo.statusFlag : 1;
    int playerStatus = playerInfo != null ? playerInfo.statusFlag : 0;
    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: RaisedButton(
            textColor: Colors.white,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Image.asset(
                  'images/icon_jinbi_da_bai.png',
                  width: 20,
                ),
                Container(
                  margin: EdgeInsets.only(left: 6),
                  child: Text(
                    '×' + joinMoney.toString(),
                    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),
                    ))
              ],
            ),
            onPressed: () => joinRoom()),
      );
    } else if (!isJoin && statusFlag == 2) {
      return Container(
        width: double.infinity,
        padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20),
        height: 88,
        child: RaisedButton(
          disabledColor: Color(0xFF914244),
          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<AppState>(context)
                  .state
                  .userInfo
                  .id
                  .toString()) {
        return Container(
          width: double.infinity,
          padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20),
          height: 88,
          child: 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: RaisedButton(
            disabledColor: Color(0xFF914244),
            disabledTextColor: Color(0xFF252532),
            child: Text(
              '预计' + getSecondsMIn(_time) + '后开始',
              style: TextStyle(fontSize: 16),
            ),
            onPressed: null,
          ),
        );
      }
    } else if (isJoin && statusFlag == 8) {
      return Container(
        width: double.infinity,
        padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20),
        height: 88,
        child: RaisedButton(
          disabledColor: Color(0xFF914244),
          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: RaisedButton(
          disabledColor: Color(0xFF914244),
          disabledTextColor: Color(0xFF252532),
          child: Text(
            '最迟在' + getSecondsMIn(_time) + '后结算',
            style: TextStyle(fontSize: 16),
          ),
          onPressed: null,
        ),
      );
    } else if (statusFlag == 4 && tabIndex == 0) {
      return Container(
        width: double.infinity,
        padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20),
        height: 88,
        child: RaisedButton(
          disabledColor: Color(0xFF727785),
          disabledTextColor: Color(0xFF15151D),
          child: Text(
            '已结束',
            style: TextStyle(fontSize: 16),
          ),
          onPressed: null,
        ),
      );
    } else if (statusFlag == 4 && tabIndex == 1) {
      return Container(
        height: 48,
        padding: EdgeInsets.symmetric(vertical: 9, horizontal: 20),
        color: Color(0xFFC2524D),
        child: Row(
          children: <Widget>[
            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(),
            Text(
              myRank != 0 ? '第${myRank}名' : '未上榜',
              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<List<String>> tipsList;
  final HouseInfo houseInfo;

  @override
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.only(top: 15),
      width: double.infinity,
      child: Column(
        children: _list(),
      ),
    );
  }

  List<Widget> _list() {
    List<Widget> 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<String> 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),
            borderRadius: BorderRadius.only(
                topRight: Radius.circular(8),
                bottomLeft: Radius.circular(8),
                bottomRight: Radius.circular(8))),
        child: Column(
          children: <Widget>[
            content.length == 1
                ? Text(
                    content[0],
                    style: TextStyle(color: Colors.white, fontSize: 13),
                  )
                : _textList(),
            showTongzhi
                ? FlatButton(
                    padding: EdgeInsets.all(0),
                    textColor: PRIMARY_COLOR,
                    highlightColor: Colors.transparent,
                    splashColor: Colors.transparent,
                    child: Text(
                      '查看竞赛须知',
                      style: TextStyle(
                        decoration: TextDecoration.underline,
                      ),
                    ),
                    onPressed: () => {
                          Navigator.of(context).push(PageRouteBuilder(
                              opaque: false,
                              transitionDuration: Duration(milliseconds: 300),
                              transitionsBuilder: (BuildContext context,
                                  Animation<double> animation,
                                  Animation<double> secondaryAnimation,
                                  Widget child) {
                                return FadeTransition(
                                  opacity: CurvedAnimation(
                                      parent: animation, curve: Curves.linear),
                                  child: child,
                                );
                              },
                              pageBuilder: (BuildContext context, _, __) {
                                return CompetitionInformation(houseInfo);
                              }))
                        },
                  )
                : Container()
          ],
        ));
  }

  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(0xFFC2524D),
            fontSize: 13,
            fontWeight: FontWeight.w500),
      ),
      TextSpan(
        text: content[2],
        style: TextStyle(color: Colors.white, fontSize: 13),
      ),
      TextSpan(
        text: content[3],
        style: TextStyle(
            color: Color(0xFFC2524D),
            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<RankContent> {
  List<PlayerInfo> topList = [];
  Future<void> 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<PlayerInfo> 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: <Widget>[_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)]
    ];
    return Container(
      padding: EdgeInsets.only(left: 15, right: 15, top: _num == 1 ? 0 : 15),
      width: 107,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          Container(
            child: Stack(
              children: <Widget>[
                Positioned(
                  top: 0,
                  left: _num == 1 ? 19 : 14,
                  child: Center(
                    child: Image.asset(
                      'images/icon_paihangbang_0' + '$_num.png',
                      width: 32,
                    ),
                  ),
                ),
                Container(
                  margin: EdgeInsets.only(top: 27, 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,
                    ),
                  ),
                ),
              ],
            ),
          ),
          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: <Widget>[
              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))
            ],
          )
        ],
      ),
    );
  }
}
