panhui 6 лет назад
Родитель
Сommit
5e5cb59844
3 измененных файлов с 166 добавлено и 97 удалено
  1. 15 25
      lib/pages/StartWindow.dart
  2. 1 3
      lib/pages/openRoom.dart
  3. 150 69
      lib/pages/roomInfo.dart

+ 15 - 25
lib/pages/StartWindow.dart

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'OpenRoom.dart'; //创建房间
+import 'dart:async';
 
 class StartWindow extends StatefulWidget {
   @override
@@ -11,35 +12,23 @@ class StartWindow extends StatefulWidget {
 class StartWindowState extends State<StartWindow> {
   int _num = 10;
   bool isNext = true;
-  getNum() async {
-    if (!isNext) {
-      Navigator.of(context).pop(true);
-      return;
-    }
-    await Future.delayed(const Duration(seconds: 1));
-    if (_num == 0) {
-      if (isNext) {
-        Navigator.of(context).pop(false);
-      }
-      return;
-    }
-    if (isNext) {
-      setState(() {
-        _num--;
-      });
-      getNum();
-    } else {
-      Navigator.of(context).pop(true);
-      return;
-    }
-  }
+  Timer timer;
+ 
 
   @override
   void initState() {
     super.initState();
 
-    Future.delayed(Duration.zero, () {
-      getNum();
+    timer=Timer.periodic(Duration(seconds: 1), (timer){
+        if(_num==0){
+          Navigator.of(context).pop(false);
+          timer.cancel();
+        }
+        else {
+          setState(() {
+           _num--; 
+          });
+        }
     });
   }
 
@@ -76,7 +65,8 @@ class StartWindowState extends State<StartWindow> {
                       textTheme: ButtonTextTheme.primary,
                       child: Text('确认'),
                       onPressed: () {
-                        isNext = false;
+                        timer.cancel();
+                       Navigator.of(context).pop(true);
                       },
                     ),
                   )

+ 1 - 3
lib/pages/openRoom.dart

@@ -72,9 +72,7 @@ class OpenRoomState extends State<OpenRoom> {
     Toast.hide();
     if (res.success) {
       HttpManager.post("houseInfo/join", data: {"houseId": res.data, "userId": StoreProvider.of<AppState>(context).state.userInfo.id});
-      Future.delayed(Duration(milliseconds: 100), () {
-        Toast.show(context, '创建成功', 1500, 'success');
-      });
+     Toast.show(context, '创建成功', 1500, 'success');
       Future.delayed(Duration(milliseconds: 1500), () {
         Navigator.pushAndRemoveUntil(
             context, new CupertinoPageRoute(builder: (context) => new RoomInfo(roomId: res.data.toString())), ModalRoute.withName('/'));

+ 150 - 69
lib/pages/roomInfo.dart

@@ -13,6 +13,7 @@ import '../styles/totast.dart';
 import 'StartWindow.dart';
 import '../model/PlayerInfo.dart';
 import '../widget/VideoWidget.dart';
+import 'dart:async';
 
 class RoomInfo extends StatefulWidget {
   RoomInfo({Key key, this.roomId}) : super(key: key);
@@ -22,7 +23,8 @@ class RoomInfo extends StatefulWidget {
   RoomInfoState createState() => RoomInfoState();
 }
 
-class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin {
+class RoomInfoState extends State<RoomInfo>
+    with SingleTickerProviderStateMixin {
   List<Map> tabList;
   TabController mController;
   Map roomInfo;
@@ -32,11 +34,13 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
   PlayerInfo playerInfo;
   bool isPop = false;
   bool showBack = false;
+  Timer timer;
 
 //获取房间信息
   void getRoomInfo() async {
     Toast.show(context, '加载中', -1, 'loading');
-    Result res = await HttpManager.get("houseInfo/getOne", data: {"id": widget.roomId});
+    Result res =
+        await HttpManager.get("houseInfo/getOne", data: {"id": widget.roomId});
     Toast.hide();
     if (res.success) {
       if (isPop) {
@@ -47,21 +51,21 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
         houseInfo = HouseInfo.fromJson(res.data);
       });
       if (houseInfo.statusFlag == 0) {
-        getNowStatus();
+        timer = Timer.periodic(new Duration(seconds: 1), (timer) {
+          getNowStatus();
+        });
       }
     } else {}
   }
 
 //隔一秒检查是否开始
   getNowStatus() async {
-    await Future.delayed(const Duration(seconds: 1));
-    Result res = await HttpManager.get("houseInfo/getPlayerNum", data: {"id": widget.roomId});
+    Result res = await HttpManager.get("houseInfo/getPlayerNum",
+        data: {"id": widget.roomId});
     if (res.success) {
       if (houseInfo.statusFlag == 0 && res.data["statusFlag"] == 2) {
         showStart();
-      }
-      if (isPop) {
-        return;
+        timer.cancel();
       }
       setState(() {
         houseInfo.playerNumber = res.data["playerNumber"];
@@ -69,9 +73,6 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
         houseInfo.bonus = res.data["bonus"];
       });
     }
-    if (houseInfo.statusFlag == 0) {
-      getNowStatus();
-    }
   }
 
 //开始比赛确认按钮
@@ -83,7 +84,8 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
       PageRouteBuilder(
         opaque: false,
         transitionDuration: Duration(milliseconds: 300),
-        transitionsBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) {
+        transitionsBuilder: (BuildContext context, Animation<double> animation,
+            Animation<double> secondaryAnimation, Widget child) {
           return FadeTransition(
             opacity: CurvedAnimation(parent: animation, curve: Curves.linear),
             child: child,
@@ -97,7 +99,11 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
     Map<String, dynamic> data = {"id": playerInfo.id};
     bool success = true;
     if (result) {
-      success = await ScreenStreamPlugin.start('rtmp://47.96.141.102:1935/myapp/' + playerInfo.userId.toString() + '?playerInfoId=' + playerInfo.id.toString());
+      success = await ScreenStreamPlugin.start(
+          'rtmp://47.96.141.102:1935/myapp/' +
+              playerInfo.userId.toString() +
+              '?playerInfoId=' +
+              playerInfo.id.toString());
       if (success) {
         data['statusFlag'] = 2;
       } else {
@@ -111,12 +117,24 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
     Toast.hide();
     if (res.success) {
       if (data['statusFlag'] == 2) {
-        await Future.delayed(Duration(milliseconds: 100));
         showSucessInfo();
-        getTotast(10);
+        int _num = 10;
+        Timer.periodic(new Duration(seconds: 1), (timer) async {
+          if (_num > 0) {
+            Toast.show(context, _num.toString(), 500, 'num');
+            _num--;
+          } else {
+            timer.cancel();
+            const url = 'pubgmhd1106467070://';
+            if (await canLaunch(url)) {
+              await launch(url);
+            } else {
+              throw 'Could not launch $url';
+            }
+          }
+        });
       } else {
-        // showBackDialog();
-        Future.delayed(Duration(milliseconds: 100), () => showBackDialog(success ? 1 : 0));
+        showBackDialog(success ? 1 : 0);
       }
     }
   }
@@ -154,7 +172,8 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
                 child: new Text('完成比赛'),
                 onPressed: () async {
                   Toast.show(context, '加载中', -1, 'loading');
-                  HttpManager.post("playerInfo/update", data: {'id': playerInfo.id, 'statusFlag': 3});
+                  HttpManager.post("playerInfo/update",
+                      data: {'id': playerInfo.id, 'statusFlag': 3});
                   bool success = await ScreenStreamPlugin.stop();
                   Toast.hide();
                   Navigator.of(context).pop();
@@ -169,26 +188,6 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
     });
   }
 
-//跳转程序
-  getTotast(int index) async {
-    if (isPop) {
-      return;
-    }
-    Toast.show(context, index.toString(), 500, 'num');
-    if (index == 0) {
-      Future.delayed(Duration(seconds: 1), () async {
-        const url = 'pubgmhd1106467070://';
-        if (await canLaunch(url)) {
-          await launch(url);
-        } else {
-          throw 'Could not launch $url';
-        }
-      });
-    } else {
-      Future.delayed(Duration(seconds: 1), () => getTotast(index - 1));
-    }
-  }
-
 //未确认比赛弹窗
   showBackDialog(type) {
     showDialog<Null>(
@@ -199,7 +198,8 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
           content: Container(
             height: 50,
             child: Text(
-              (type == 1 ? '您未在十秒内点击开始按钮' : '您未允许录屏') + ',系统已经判定您放弃比赛,参赛奖金不予退还。',
+              (type == 1 ? '您未在十秒内点击开始按钮' : '您未允许录屏') +
+                  ',系统已经判定您放弃比赛,参赛奖金不予退还。',
               style: TextStyle(color: Colors.black),
             ),
           ),
@@ -220,7 +220,10 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
 
 //检查加入信息
   checkJoinInfo() async {
-    Result res = await HttpManager.get("playerInfo/getOne", data: {"userId": StoreProvider.of<AppState>(context).state.userInfo.id, "houseId": widget.roomId});
+    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) {
         if (isPop) {
@@ -251,7 +254,10 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
 //加入房间
   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});
+    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');
@@ -300,6 +306,9 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
   void dispose() {
     super.dispose();
     mController.dispose();
+    if (timer != null) {
+      timer.cancel();
+    }
   }
 
   @override
@@ -346,13 +355,16 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
             color: BG_SUB_COLOR,
             child: TabBarView(
               controller: mController,
-              children: [_firstPage(), SecondPage(roomId: widget.roomId, status: status)],
+              children: [
+                _firstPage(),
+                SecondPage(roomId: widget.roomId, status: status)
+              ],
             )),
         floatingActionButton: _joinBtn(),
         floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
       ),
       onWillPop: () {
-        if (houseInfo == null || (houseInfo.statusFlag != 0)) {
+        if (houseInfo == null || (houseInfo.statusFlag != 0) || !isJoin) {
           isPop = true;
           Toast.hide();
           Navigator.of(context).pop();
@@ -368,11 +380,17 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
   Widget _firstPage() {
     Map houseLevelInfo = roomInfo.isNotEmpty ? roomInfo["houseLevelInfo"] : {};
 
-    String levelName = houseLevelInfo.containsKey("levelName") ? houseLevelInfo["levelName"] : '黄金';
+    String levelName = houseLevelInfo.containsKey("levelName")
+        ? houseLevelInfo["levelName"]
+        : '黄金';
 
-    int joinMoney = houseLevelInfo.containsKey('feeRatio') && roomInfo.containsKey("bonus") ? houseLevelInfo["feeRatio"] * roomInfo["bonus"] : 0;
+    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';
+    String topImg =
+        'http://images.liqucn.com/img/h22/h70/img_localize_8e824debdd9ee29522690f36680e2d8e_600x337.png';
     int statuFlag = 0;
     if (houseInfo != null) {
       if (houseInfo.video != null) {
@@ -396,7 +414,9 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
             child: Container(
               child: Column(
                 children: <Widget>[
-                  houseInfo != null ? VideoWidget(videoSrc: houseInfo.video) : Container(),
+                  houseInfo != null
+                      ? VideoWidget(videoSrc: houseInfo.video)
+                      : Container(),
                   // Image.network(topImg, width: double.infinity),
                   Container(
                       padding: EdgeInsets.only(top: 10),
@@ -406,16 +426,25 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
                           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),
+                              roomInfo.containsKey("houseName")
+                                  ? roomInfo["houseName"]
+                                  : '',
+                              style: TextStyle(
+                                  color: Colors.white,
+                                  fontSize: 16,
+                                  fontWeight: FontWeight.w500),
                             ),
                           ),
                           Image.network(
-                            houseLevelInfo.containsKey("icon") ? houseLevelInfo["icon"] : '',
+                            houseLevelInfo.containsKey("icon")
+                                ? houseLevelInfo["icon"]
+                                : '',
                             width: 14,
                           ),
                           Text(
-                            houseLevelInfo.containsKey("levelName") ? houseLevelInfo["levelName"] : '',
+                            houseLevelInfo.containsKey("levelName")
+                                ? houseLevelInfo["levelName"]
+                                : '',
                             style: TextStyle(color: colorInfo[levelName]),
                           )
                         ],
@@ -423,7 +452,9 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
                   Container(
                     margin: EdgeInsets.only(top: 6),
                     child: Text(
-                      roomInfo.containsKey('houseAbstract') ? roomInfo["houseAbstract"] : "",
+                      roomInfo.containsKey('houseAbstract')
+                          ? roomInfo["houseAbstract"]
+                          : "",
                       style: TextStyle(color: Color(0xFF9BA0AE), fontSize: 12),
                     ),
                   ),
@@ -435,8 +466,17 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
                         width: 20,
                       ),
                       Text(
-                        (houseInfo != null ? houseInfo.playerNumber.toString() : '0') + '/' + (houseInfo != null ? houseInfo.maxNumber.toString() : '0'),
-                        style: TextStyle(fontSize: 14, fontWeight: FontWeight.w500, color: Color(0xFFB1B2C0)),
+                        (houseInfo != null
+                                ? houseInfo.playerNumber.toString()
+                                : '0') +
+                            '/' +
+                            (houseInfo != null
+                                ? houseInfo.maxNumber.toString()
+                                : '0'),
+                        style: TextStyle(
+                            fontSize: 14,
+                            fontWeight: FontWeight.w500,
+                            color: Color(0xFFB1B2C0)),
                       )
                     ],
                   ),
@@ -445,7 +485,10 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
                     width: 200,
                     height: 40,
                     decoration: BoxDecoration(
-                      border: Border.all(width: 1, color: PRIMARY_COLOR, style: BorderStyle.solid),
+                      border: Border.all(
+                          width: 1,
+                          color: PRIMARY_COLOR,
+                          style: BorderStyle.solid),
                       borderRadius: BorderRadius.all(Radius.circular(2)),
                     ),
                     child: Row(
@@ -467,7 +510,10 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
                           ),
                         ),
                         Text(
-                          'X' + (houseInfo != null ? houseInfo.bonus.toString() : '0'),
+                          'X' +
+                              (houseInfo != null
+                                  ? houseInfo.bonus.toString()
+                                  : '0'),
                           style: TextStyle(
                             color: PRIMARY_COLOR,
                             fontSize: 22,
@@ -481,10 +527,14 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
                       ? Container(
                           width: double.infinity,
                           margin: EdgeInsets.only(top: 25, left: 15, right: 15),
-                          padding: EdgeInsets.only(top: 15, left: 15, right: 10, bottom: 15),
+                          padding: EdgeInsets.only(
+                              top: 15, left: 15, right: 10, bottom: 15),
                           decoration: BoxDecoration(
                               borderRadius: BorderRadius.only(
-                                  topLeft: Radius.circular(0), topRight: Radius.circular(8), bottomLeft: Radius.circular(8), bottomRight: Radius.circular(8)),
+                                  topLeft: Radius.circular(0),
+                                  topRight: Radius.circular(8),
+                                  bottomLeft: Radius.circular(8),
+                                  bottomRight: Radius.circular(8)),
                               gradient: LinearGradient(
                                 begin: Alignment.topRight,
                                 colors: [Color(0xFF464B6A), Color(0xFF35395E)],
@@ -517,7 +567,11 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
       return Container(
         width: ScreenUtil().setWidth(375),
         height: 48 + ScreenUtil().setHeight(40),
-        padding: EdgeInsets.only(top: ScreenUtil().setHeight(20), bottom: ScreenUtil().setHeight(20), left: 15, right: 15),
+        padding: EdgeInsets.only(
+            top: ScreenUtil().setHeight(20),
+            bottom: ScreenUtil().setHeight(20),
+            left: 15,
+            right: 15),
         child: RaisedButton(
             textColor: Colors.white,
             child: Row(
@@ -531,14 +585,20 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
                   margin: EdgeInsets.only(left: 6),
                   child: Text(
                     'X' + joinMoney.toString(),
-                    style: TextStyle(color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500),
+                    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),
+                      style: TextStyle(
+                          color: Colors.white,
+                          fontSize: 16,
+                          fontWeight: FontWeight.w500),
                     ))
               ],
             ),
@@ -636,7 +696,8 @@ class RankContentState extends State<RankContent> {
   List<PlayerInfo> topList = [];
   getTopList() async {
     Toast.show(context, '加载中', -1, 'loading');
-    Result res = await HttpManager.get("playerInfo/rankPage", data: {"houseId": widget.roomId, "currentPage": 1, "pageNumber": 3});
+    Result res = await HttpManager.get("playerInfo/rankPage",
+        data: {"houseId": widget.roomId, "currentPage": 1, "pageNumber": 3});
     Toast.hide();
     List<PlayerInfo> list = [];
     if (res.success) {
@@ -705,14 +766,19 @@ class RankContentState extends State<RankContent> {
                   width: _num == 1 ? 70 : 60,
                   height: _num == 1 ? 70 : 60,
                   decoration: BoxDecoration(
-                    gradient: LinearGradient(colors: colorList[_num - 1], begin: Alignment.topLeft, end: Alignment.bottomRight),
+                    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)),
+                    child: CircleAvatar(
+                        backgroundImage:
+                            NetworkImage(topList[_num - 1].userInfo.icon)),
                   )),
                 ),
                 Positioned(
@@ -743,7 +809,12 @@ class RankContentState extends State<RankContent> {
             mainAxisAlignment: MainAxisAlignment.center,
             children: <Widget>[
               Image.asset('images/icon_jinbi_xiao_hong.png', width: 20),
-              Text('x' + (topList[_num - 1].bonus != null ? topList[_num - 1].bonus.toString() : '0'), style: TextStyle(color: PRIMARY_COLOR, fontSize: 12))
+              Text(
+                  'x' +
+                      (topList[_num - 1].bonus != null
+                          ? topList[_num - 1].bonus.toString()
+                          : '0'),
+                  style: TextStyle(color: PRIMARY_COLOR, fontSize: 12))
             ],
           )
         ],
@@ -770,7 +841,11 @@ class SecondPageState extends State<SecondPage> {
   getPlayerPage() async {
     ismore = false;
     Toast.show(context, '加载中', -1, 'loading');
-    Result res = await HttpManager.get("playerInfo/rankPage", data: {"houseId": widget.roomId, "currentPage": currentPage, "pageNumber": 20});
+    Result res = await HttpManager.get("playerInfo/rankPage", data: {
+      "houseId": widget.roomId,
+      "currentPage": currentPage,
+      "pageNumber": 20
+    });
     Toast.hide();
     List<PlayerInfo> list = joinList;
     if (currentPage == 1) {
@@ -798,7 +873,8 @@ class SecondPageState extends State<SecondPage> {
     Future.delayed(Duration.zero, () {
       getPlayerPage();
       _perController.addListener(() {
-        if (_perController.position.pixels == _perController.position.maxScrollExtent) {
+        if (_perController.position.pixels ==
+            _perController.position.maxScrollExtent) {
           if (ismore) {
             currentPage++;
             getPlayerPage();
@@ -854,7 +930,10 @@ class SecondPageState extends State<SecondPage> {
       margin: EdgeInsets.only(top: index == 0 ? 10 : 0),
       padding: EdgeInsets.only(left: 15, right: 15),
       child: Container(
-        decoration: BoxDecoration(border: Border(bottom: BorderSide(width: 1, color: BG_SUB_COLOR, style: BorderStyle.solid))),
+        decoration: BoxDecoration(
+            border: Border(
+                bottom: BorderSide(
+                    width: 1, color: BG_SUB_COLOR, style: BorderStyle.solid))),
         child: Row(
           children: <Widget>[
             Container(
@@ -881,7 +960,9 @@ class SecondPageState extends State<SecondPage> {
             ),
             widget.status == 4 && index < 3
                 ? Image.asset(
-                    'images/icon_paihangbang_0' + (index + 1).toString() + '.png',
+                    'images/icon_paihangbang_0' +
+                        (index + 1).toString() +
+                        '.png',
                     width: 32,
                   )
                 : Container()