Hibok
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

165 líneas
5.1 KiB

  1. import 'package:chat/data/WebData.dart';
  2. import 'package:chat/data/constants.dart';
  3. import 'package:chat/generated/i18n.dart';
  4. import 'package:chat/models/ref_name_provider.dart';
  5. import 'package:chat/utils/CustomUI.dart';
  6. import 'package:chat/utils/MessageMgr.dart';
  7. import 'package:chat/utils/UserCard.dart';
  8. import 'package:flutter/cupertino.dart';
  9. import 'package:flutter/material.dart';
  10. import 'package:oktoast/oktoast.dart';
  11. import 'package:provider/provider.dart';
  12. import 'package:pull_to_refresh/pull_to_refresh.dart';
  13. import '../utils/HttpUtil.dart';
  14. import 'package:dio/dio.dart';
  15. import "../data/UserData.dart";
  16. import '../utils/TokenMgr.dart';
  17. class FansPage extends StatefulWidget {
  18. FansPage({Key key}) : super(key: key);
  19. @override
  20. _FansPageState createState() => new _FansPageState();
  21. }
  22. class _FansPageState extends State<FansPage> {
  23. List list = new List(); //列表要展示的数据
  24. RefreshController _refreshController =
  25. RefreshController(initialRefresh: true);
  26. int _page = 1; //加载的页数
  27. int rows = 20;
  28. @override
  29. void initState() {
  30. super.initState();
  31. }
  32. Future getData(callback) async {
  33. Map data = {
  34. "userId": UserData().basicInfo.userId,
  35. };
  36. data['sign'] = TokenMgr().getSign(data);
  37. data['lng'] = UserData().longitude;
  38. data['lat'] = UserData().latitude;
  39. data['page'] = _page;
  40. data['rows'] = rows;
  41. Response res = await HttpUtil().post('userfollow/fans/list',
  42. data: data, failback: () => Navigator.of(context).pop());
  43. _refreshController.refreshCompleted();
  44. var resData = res.data;
  45. if (resData['code'] == 0) {
  46. callback(resData['data']);
  47. } else {
  48. showToast(resData['msg']);
  49. }
  50. }
  51. @override
  52. Widget build(BuildContext context) {
  53. Widget appBar = new AppBar(
  54. backgroundColor: AppColors.NewAppbarBgColor,
  55. leading: CustomUI.buildCustomLeading(context),
  56. title: new Text(
  57. I18n.of(context).fans_list,
  58. style: TextStyle(color: AppColors.NewAppbarTextColor),
  59. textScaleFactor: 1.0,
  60. ),
  61. centerTitle: true,
  62. );
  63. return Scaffold(
  64. appBar: appBar,
  65. body: SafeArea(
  66. child: SmartRefresher(
  67. enablePullDown: true,
  68. enablePullUp: true,
  69. header: MaterialClassicHeader(),
  70. footer: CustomUI.buildLoadingFooter(),
  71. controller: _refreshController,
  72. onRefresh: _onRefresh,
  73. onLoading: _onLoading,
  74. child:
  75. (_refreshController.headerStatus == RefreshStatus.completed &&
  76. list.length == 0)
  77. ? CustomUI.buildNoData(context)
  78. : ListView.builder(
  79. itemBuilder: _renderRow,
  80. itemCount: list.length,
  81. ),
  82. ),
  83. ));
  84. }
  85. Widget _renderRow(BuildContext context, int index) {
  86. if (index < list.length) {
  87. var userInfo = list[index];
  88. print(userInfo);
  89. var whiteItem = UserCard(
  90. key: UniqueKey(),
  91. userName: Provider.of<RefNameProvider>(context)
  92. .getRefName(userInfo['UserId'], userInfo['NickName']),
  93. city: WebData().getCountry(
  94. userInfo['Country']), // WebData().getCity(userInfo['City']),
  95. headUrl: userInfo['Headimgurl'],
  96. isReal: userInfo['IsAttestation'] == 1,
  97. constellation:
  98. WebData().getConstellation(context, userInfo['constellation']),
  99. distance: userInfo['Distance'].toDouble(),
  100. age:
  101. DateTime.now().year - int.parse(userInfo['Birthday'].split('-')[0]),
  102. professional: WebData().getProffesionName(userInfo['Occupation']),
  103. isOnline: userInfo['OnlineStatus'] == 1
  104. ? I18n.of(context).online
  105. : WebData().getLoginTime(context, userInfo['LoginDate']),
  106. hiddenDistince: userInfo['DistanceStatus'] == 1,
  107. sex: userInfo['Sex'],
  108. isLove: userInfo['Follow'] == 0,
  109. isBalck: userInfo['Follow'] == 1,
  110. userId: userInfo['FollowUserId'],
  111. payImg: userInfo['PhotoAut'] == 1,
  112. isHidden: userInfo['InfoAut'] == 1,
  113. member: userInfo['IsMember'],
  114. imgNum: userInfo['PhotoNum'],
  115. );
  116. return (index == 0
  117. ? Padding(padding: EdgeInsets.only(top: 10), child: whiteItem)
  118. : whiteItem);
  119. }
  120. return Container();
  121. }
  122. Future<Null> _onRefresh() async {
  123. _page = 1;
  124. getData((data) {
  125. if (data != null) {
  126. list.clear();
  127. list.addAll(data);
  128. MessageMgr().emit('refresh_fans_num',
  129. {"UserId": UserData().basicInfo.userId, "nums": list.length});
  130. setState(() {});
  131. }
  132. });
  133. }
  134. Future _onLoading() async {
  135. _page++;
  136. getData((data) {
  137. if (data == null || data.length == 0) {
  138. _page--;
  139. _refreshController.loadNoData();
  140. } else {
  141. list.addAll(data);
  142. _refreshController.loadComplete();
  143. }
  144. setState(() {});
  145. });
  146. }
  147. @override
  148. void dispose() {
  149. _refreshController.dispose();
  150. super.dispose();
  151. }
  152. }