SecondRoomInfo.dart 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. import 'package:flutter/material.dart';
  2. import '../model/PlayerInfo.dart';
  3. import 'dart:async';
  4. import '../styles/totast.dart';
  5. import '../net/HttpManager.dart';
  6. import '../net/Result.dart';
  7. import '../styles/colors.dart';
  8. import 'package:flutter/cupertino.dart';
  9. import 'VideoPlayer.dart';
  10. class SecondPage extends StatefulWidget {
  11. SecondPage({Key key, this.roomId, this.status}) : super(key: key);
  12. final String roomId; // 用来储存传递过来的值
  13. final int status;
  14. @override
  15. SecondPageState createState() => SecondPageState();
  16. }
  17. class SecondPageState extends State<SecondPage> {
  18. List<PlayerInfo> joinList = [];
  19. int currentPage = 1;
  20. bool ismore = true;
  21. ScrollController _perController;
  22. //获取房间用户
  23. Future<void> getPlayerPage() async {
  24. ismore = false;
  25. Toast.show(context, '加载中', -1, 'loading');
  26. Result res = await HttpManager.get('playerInfo/rankPage', data: {
  27. 'houseId': widget.roomId,
  28. 'currentPage': currentPage,
  29. 'pageNumber': 20
  30. });
  31. Toast.hide();
  32. List<PlayerInfo> list = joinList;
  33. if (currentPage == 1) {
  34. list = [];
  35. }
  36. if (res.success) {
  37. print(res.data['pp']);
  38. for (var item in res.data['pp']) {
  39. PlayerInfo jonPlayer = PlayerInfo.fromJson(item);
  40. list.add(jonPlayer);
  41. }
  42. if (res.data['page']['currentPage'] < res.data['page']['totalPage']) {
  43. ismore = true;
  44. }
  45. } else {}
  46. setState(() {
  47. joinList = list;
  48. });
  49. }
  50. @override
  51. void initState() {
  52. super.initState();
  53. _perController = ScrollController();
  54. currentPage = 1;
  55. Future.delayed(Duration.zero, () {
  56. getPlayerPage();
  57. _perController.addListener(() {
  58. if (_perController.position.pixels ==
  59. _perController.position.maxScrollExtent) {
  60. if (ismore) {
  61. currentPage++;
  62. getPlayerPage();
  63. }
  64. }
  65. });
  66. });
  67. }
  68. @override
  69. void dispose() {
  70. super.dispose();
  71. _perController.dispose();
  72. }
  73. @override
  74. Widget build(BuildContext context) {
  75. return RefreshIndicator(
  76. color: PRIMARY_COLOR,
  77. backgroundColor: Colors.white,
  78. displacement: 10,
  79. onRefresh: () async {
  80. await Future.delayed(const Duration(seconds: 1));
  81. currentPage = 1;
  82. getPlayerPage();
  83. },
  84. child: ListView.builder(
  85. physics: AlwaysScrollableScrollPhysics(),
  86. controller: _perController,
  87. itemCount: joinList.length + 1,
  88. itemBuilder: (BuildContext context, int index) {
  89. if (index < joinList.length) {
  90. return PersonItem(joinList[index], index);
  91. } else {
  92. return Container(
  93. padding: EdgeInsets.all(15),
  94. child: Text(
  95. '其他人员正在火速赶来中...',
  96. style: TextStyle(color: Colors.white30),
  97. textAlign: TextAlign.center,
  98. ),
  99. );
  100. }
  101. }),
  102. );
  103. }
  104. Widget PersonItem(PlayerInfo info, int index) {
  105. return Container(
  106. width: double.infinity,
  107. height: 60,
  108. color: Color(0xFF2B2B42),
  109. margin: EdgeInsets.only(top: index == 0 ? 10 : 0),
  110. padding: EdgeInsets.only(left: 15, right: 15),
  111. child: Container(
  112. decoration: BoxDecoration(
  113. border: Border(
  114. bottom: BorderSide(
  115. width: 1, color: BG_SUB_COLOR, style: BorderStyle.solid))),
  116. child: Row(
  117. children: <Widget>[
  118. Container(
  119. margin: EdgeInsets.only(right: 12),
  120. width: 36,
  121. height: 36,
  122. child: info.userInfo != null
  123. ? CircleAvatar(
  124. backgroundImage: NetworkImage(info.userInfo.icon),
  125. )
  126. : Container(),
  127. ),
  128. Expanded(
  129. flex: 1,
  130. child: Text(
  131. info.userInfo != null ? info.userInfo.nickname : '',
  132. style: TextStyle(
  133. color: Colors.white,
  134. fontSize: 14,
  135. ),
  136. maxLines: 1,
  137. overflow: TextOverflow.ellipsis,
  138. ),
  139. ),
  140. widget.status == 4 &&
  141. index < 3 &&
  142. info.video != '' &&
  143. info.video != null
  144. ? Container(
  145. width: 68,
  146. height: 24,
  147. margin: EdgeInsets.only(right: 30),
  148. child: OutlineButton(
  149. textColor: PRIMARY_COLOR,
  150. borderSide: BorderSide(color: PRIMARY_COLOR),
  151. padding: EdgeInsets.all(0),
  152. highlightColor: BG_SUB_COLOR.withOpacity(0.8),
  153. highlightedBorderColor: PRIMARY_COLOR,
  154. child: Text(
  155. '查看回放',
  156. style: TextStyle(fontSize: 12),
  157. ),
  158. onPressed: () => {
  159. Navigator.push(
  160. context,
  161. CupertinoPageRoute(
  162. builder: (context) => VideoPlayerPage(
  163. videoUrl: info.video,
  164. fileType: 'netWork')))
  165. },
  166. ),
  167. )
  168. : Container(),
  169. widget.status == 4 && index < 3
  170. ? Image.asset(
  171. 'images/icon_paihangbang_0' +
  172. (index + 1).toString() +
  173. '.png',
  174. width: 32,
  175. )
  176. : Container()
  177. ],
  178. ),
  179. ),
  180. );
  181. }
  182. }