Hibok
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

281 rivejä
9.3 KiB

  1. import 'package:cached_network_image/cached_network_image.dart';
  2. import 'package:chat/data/WebData.dart';
  3. import 'package:chat/data/constants.dart';
  4. import 'package:chat/generated/i18n.dart';
  5. import 'package:chat/models/ref_name_provider.dart';
  6. import 'package:chat/utils/CustomUI.dart';
  7. import 'package:chat/utils/MessageMgr.dart';
  8. import 'package:chat/utils/UserCard.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. import 'ProfilePage.dart';
  18. class WhiteAndBlackPage extends StatefulWidget {
  19. final bool isWhite;
  20. WhiteAndBlackPage({Key key, this.isWhite = true}) : super(key: key);
  21. @override
  22. _WhiteAndBlackPageState createState() => new _WhiteAndBlackPageState();
  23. }
  24. class _WhiteAndBlackPageState extends State<WhiteAndBlackPage> {
  25. List list = new List(); //列表要展示的数据
  26. RefreshController _refreshController =
  27. RefreshController(initialRefresh: true);
  28. int _page = 1; //加载的页数
  29. int rows = 20;
  30. @override
  31. void initState() {
  32. super.initState();
  33. MessageMgr().on('refresh_love_list', msgRefreshLoveList);
  34. }
  35. msgRefreshLoveList(data) {
  36. for (int i = 0; i < list.length; i++) {
  37. var item = list[i];
  38. if (item['FollowUserId'] == data['UserId'] && data['flag'] != 0) {
  39. list.removeAt(i);
  40. break;
  41. }
  42. }
  43. if (list.length == 0) {
  44. _refreshController.refreshCompleted();
  45. }
  46. setState(() {});
  47. }
  48. Future getData(type, callback) async {
  49. var data = {
  50. "userid": UserData().basicInfo.userId,
  51. "type": type,
  52. };
  53. data['sign'] = TokenMgr().getSign(data);
  54. data['lng'] = UserData().longitude;
  55. data['lat'] = UserData().latitude;
  56. data['page'] = _page;
  57. data['rows'] = rows;
  58. Response res = await HttpUtil().post('userfollow/follow/user',
  59. data: data, failback: () => Navigator.of(context).pop());
  60. _refreshController.refreshCompleted();
  61. var resData = res.data;
  62. if (resData['code'] == 0) {
  63. callback(resData['data']);
  64. } else {
  65. showToast(resData['msg']);
  66. }
  67. }
  68. @override
  69. Widget build(BuildContext context) {
  70. Widget appBar = new AppBar(
  71. backgroundColor: AppColors.NewAppbarBgColor,
  72. title: new Text(
  73. widget.isWhite ? I18n.of(context).i_like : I18n.of(context).blacklist2,
  74. textScaleFactor: 1.0,
  75. style: TextStyle(color: AppColors.NewAppbarTextColor),
  76. ),
  77. centerTitle: true,
  78. leading: CustomUI.buildCustomLeading(context),
  79. );
  80. return Scaffold(
  81. appBar: appBar,
  82. body: SafeArea(
  83. child: SmartRefresher(
  84. enablePullDown: true,
  85. enablePullUp: true,
  86. header: MaterialClassicHeader(),
  87. footer: CustomUI.buildLoadingFooter(),
  88. controller: _refreshController,
  89. onRefresh: _onRefresh,
  90. onLoading: _onLoading,
  91. child:
  92. (_refreshController.headerStatus == RefreshStatus.completed &&
  93. list.length == 0)
  94. ? CustomUI.buildNoData(context)
  95. : ListView.builder(
  96. itemBuilder: _renderRow,
  97. itemCount: list.length,
  98. ),
  99. ),
  100. ));
  101. }
  102. Widget _renderRow(BuildContext context, int index) {
  103. if (index < list.length) {
  104. var userInfo = list[index];
  105. print(userInfo);
  106. var whiteItem = UserCard(
  107. key: UniqueKey(),
  108. userName: Provider.of<RefNameProvider>(context)
  109. .getRefName(userInfo['UserId'], userInfo['NickName']),
  110. city: WebData().getCountry(
  111. userInfo['Country']), // WebData().getCity(userInfo['City']),
  112. headUrl: userInfo['Headimgurl'],
  113. isReal: userInfo['IsAttestation'] == 1,
  114. constellation:
  115. WebData().getConstellation(context, userInfo['constellation']),
  116. distance: userInfo['Distance'].toDouble(),
  117. age:
  118. DateTime.now().year - int.parse(userInfo['Birthday'].split('-')[0]),
  119. professional: WebData().getProffesionName(userInfo['Occupation']),
  120. isOnline: userInfo['OnlineStatus'] == 1
  121. ? I18n.of(context).online
  122. : WebData().getLoginTime(context, userInfo['LoginDate']),
  123. hiddenDistince: userInfo['DistanceStatus'] == 1,
  124. sex: userInfo['Sex'],
  125. isLove: true,
  126. isBalck: false,
  127. userId: userInfo['FollowUserId'],
  128. payImg: userInfo['PhotoAut'] == 1,
  129. isHidden: userInfo['InfoAut'] == 1,
  130. member: userInfo['IsMember'],
  131. imgNum: userInfo['PhotoNum'],
  132. );
  133. var blackItem = Container(
  134. padding: EdgeInsets.all(10),
  135. margin: EdgeInsets.symmetric(horizontal: 10, vertical: 4),
  136. decoration: BoxDecoration(
  137. color: Colors.white,
  138. boxShadow: [
  139. BoxShadow(
  140. color: Color.fromRGBO(0, 0, 0, 248),
  141. offset: Offset(0, 6),
  142. blurRadius: 6,
  143. )
  144. ],
  145. borderRadius: BorderRadius.all(Radius.circular(10))),
  146. child: Row(
  147. children: <Widget>[
  148. _buildImg(userInfo['FollowUserId'], userInfo['Headimgurl']),
  149. Padding(
  150. padding: EdgeInsets.only(left: 10),
  151. child: Text(
  152. WebData().subUserName(Provider.of<RefNameProvider>(context)
  153. .getRefName(
  154. userInfo['FollowUserId'], userInfo['NickName'])),
  155. textScaleFactor: 1.0,
  156. style:
  157. TextStyle(fontSize: 15, color: Constants.BlackTextColor),
  158. )),
  159. Expanded(child: Container()),
  160. InkWell(
  161. onTap: () async {
  162. HttpUtil().cancleBlackUser(userInfo['FollowUserId'], () {
  163. for (int i = 0; i < list.length; i++) {
  164. if (list[i]['FollowUserId'] == userInfo['FollowUserId']) {
  165. setState(() {
  166. list.removeAt(i);
  167. if (list.length == 0) {
  168. _refreshController.refreshCompleted();
  169. }
  170. });
  171. break;
  172. }
  173. }
  174. });
  175. },
  176. child: Container(
  177. padding: EdgeInsets.symmetric(vertical: 5, horizontal: 10.5),
  178. decoration: BoxDecoration(
  179. color: Constants.ConfrimButtonColor,
  180. borderRadius: BorderRadius.all(Radius.circular(5))),
  181. alignment: Alignment.center,
  182. child: Text(
  183. I18n.of(context).cancel_shield,
  184. textScaleFactor: 1.0,
  185. style: TextStyle(
  186. color: Colors.white,
  187. fontSize: 13.5,
  188. ),
  189. )),
  190. )
  191. ],
  192. ),
  193. );
  194. return widget.isWhite
  195. ? (index == 0
  196. ? Padding(padding: EdgeInsets.only(top: 10), child: whiteItem)
  197. : whiteItem)
  198. : blackItem;
  199. }
  200. return Container();
  201. }
  202. Widget _buildImg(userId, url) {
  203. return InkWell(
  204. onTap: () {
  205. Navigator.of(context).push(
  206. new MaterialPageRoute(
  207. builder: (context) {
  208. return ProfilePage(
  209. userId: userId,
  210. );
  211. },
  212. ),
  213. );
  214. },
  215. child: Container(
  216. decoration: BoxDecoration(borderRadius: BorderRadius.circular(2.0)),
  217. width: 70.6,
  218. height: 70.6,
  219. child: ClipRRect(
  220. borderRadius: BorderRadius.circular(10),
  221. child: url == '' || url == null
  222. ? Image.asset(
  223. Constants.DefaultHeadImgUrl,
  224. )
  225. : CachedNetworkImage(
  226. imageUrl: url,
  227. placeholder: (context, url) => Image.asset(
  228. Constants.DefaultHeadImgUrl,
  229. width: 55,
  230. height: 55,
  231. ),
  232. fit: BoxFit.cover,
  233. ),
  234. )));
  235. }
  236. Future<Null> _onRefresh() async {
  237. _page = 1;
  238. getData(widget.isWhite == true ? 0 : 1, (data) {
  239. if (data != null) {
  240. list.clear();
  241. list.addAll(data);
  242. setState(() {});
  243. }
  244. });
  245. }
  246. Future _onLoading() async {
  247. _page++;
  248. getData(widget.isWhite == true ? 0 : 1, (data) {
  249. if (data == null || data.length == 0) {
  250. _page--;
  251. _refreshController.loadNoData();
  252. } else {
  253. list.addAll(data);
  254. _refreshController.loadComplete();
  255. }
  256. setState(() {});
  257. });
  258. }
  259. @override
  260. void dispose() {
  261. _refreshController.dispose();
  262. MessageMgr().off('refresh_love_list', msgRefreshLoveList);
  263. super.dispose();
  264. }
  265. }