SecondRoomInfo.dart 4.4 KB

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