|
|
@@ -1,5 +1,6 @@
|
|
|
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';
|
|
|
@@ -20,7 +21,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,7 +34,8 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
|
|
|
//获取房间信息
|
|
|
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) {
|
|
|
setState(() {
|
|
|
@@ -48,7 +51,8 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
|
|
|
//隔一秒检查是否开始
|
|
|
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();
|
|
|
@@ -70,7 +74,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,
|
|
|
@@ -78,31 +83,40 @@ class RoomInfoState extends State<RoomInfo> with SingleTickerProviderStateMixin
|
|
|
},
|
|
|
pageBuilder: (BuildContext context, _, __) {
|
|
|
return StartWindow();
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
},
|
|
|
),
|
|
|
);
|
|
|
-
|
|
|
- Toast.show(context, '加载中', -1, 'loading');
|
|
|
Map<String, dynamic> data = {"id": playerInfo.id};
|
|
|
if (result) {
|
|
|
- data['statusFlag'] = 2;
|
|
|
+ bool success = await ScreenStreamPlugin.start(
|
|
|
+ 'rtmp://49.4.66.233:1935/myapp/' +
|
|
|
+ playerInfo.userId.toString() +
|
|
|
+ '?playerInfoId=' +
|
|
|
+ playerInfo.id.toString());
|
|
|
+ print('stream screen:' + success.toString());
|
|
|
+ if (success) {
|
|
|
+ data['statusFlag'] = 2;
|
|
|
+ } else {
|
|
|
+ data['statusFlag'] = 6;
|
|
|
+ }
|
|
|
} else {
|
|
|
data['statusFlag'] = 6;
|
|
|
}
|
|
|
- Toast.hide();
|
|
|
+ Toast.show(context, '加载中', -1, 'loading');
|
|
|
Result res = await HttpManager.post("playerInfo/update", data: data);
|
|
|
+ Toast.hide();
|
|
|
if (res.success) {
|
|
|
if (data['statusFlag'] == 2) {
|
|
|
- //加入比赛成功,开始录屏
|
|
|
- bool success =
|
|
|
- await ScreenStreamPlugin.start('rtmp://49.4.66.233:1935/myapp/' + playerInfo.userId.toString() + '?playerInfoId=' + playerInfo.id.toString());
|
|
|
- print('stream screen:' + success.toString());
|
|
|
- Future.delayed(Duration(milliseconds: 100), () => showSucessInfo());
|
|
|
+ await Future.delayed(Duration(milliseconds: 100));
|
|
|
+ showSucessInfo();
|
|
|
+ await Future.delayed(Duration(seconds: 1), () async {
|
|
|
+ const url = 'pubgmhd1106467070://';
|
|
|
+ if (await canLaunch(url)) {
|
|
|
+ await launch(url);
|
|
|
+ } else {
|
|
|
+ throw 'Could not launch $url';
|
|
|
+ }
|
|
|
+ });
|
|
|
} else {
|
|
|
// showBackDialog();
|
|
|
Future.delayed(Duration(milliseconds: 100), () => showBackDialog());
|
|
|
@@ -129,7 +143,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();
|
|
|
print('stop stream screen:' + success.toString());
|
|
|
Toast.hide();
|
|
|
@@ -176,7 +191,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) {
|
|
|
print(res.data);
|
|
|
if (res.data == null) {
|
|
|
@@ -202,7 +220,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');
|
|
|
@@ -292,7 +313,10 @@ 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,
|
|
|
@@ -308,11 +332,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) {
|
|
|
@@ -345,16 +375,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]),
|
|
|
)
|
|
|
],
|
|
|
@@ -362,7 +401,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),
|
|
|
),
|
|
|
),
|
|
|
@@ -374,8 +415,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)),
|
|
|
)
|
|
|
],
|
|
|
),
|
|
|
@@ -384,7 +434,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(
|
|
|
@@ -406,7 +459,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,
|
|
|
@@ -420,10 +476,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)],
|
|
|
@@ -455,7 +515,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(
|
|
|
@@ -469,14 +533,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),
|
|
|
))
|
|
|
],
|
|
|
),
|
|
|
@@ -559,7 +629,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) {
|
|
|
@@ -628,14 +699,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(
|
|
|
@@ -666,7 +742,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))
|
|
|
],
|
|
|
)
|
|
|
],
|
|
|
@@ -693,7 +774,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) {
|
|
|
@@ -723,7 +808,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();
|
|
|
@@ -779,7 +865,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(
|
|
|
@@ -787,7 +876,8 @@ class SecondPageState extends State<SecondPage> {
|
|
|
width: 36,
|
|
|
height: 36,
|
|
|
child: CircleAvatar(
|
|
|
- backgroundImage: NetworkImage(info.userInfo != null ? info.userInfo.icon : ''),
|
|
|
+ backgroundImage: NetworkImage(
|
|
|
+ info.userInfo != null ? info.userInfo.icon : ''),
|
|
|
),
|
|
|
),
|
|
|
Expanded(
|
|
|
@@ -804,7 +894,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()
|