import 'package:chat/data/constants.dart'; import 'package:chat/generated/i18n.dart'; import 'package:chat/utils/CustomUI.dart'; import 'package:chat/utils/MessageBox.dart'; import 'package:chat/utils/MessageMgr.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:oktoast/oktoast.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import '../utils/HttpUtil.dart'; import 'package:dio/dio.dart'; import "../data/UserData.dart"; import '../utils/TokenMgr.dart'; class FollowUserPage extends StatefulWidget { FollowUserPage({Key key}) : super(key: key); @override _FollowUserPageState createState() => new _FollowUserPageState(); } class _FollowUserPageState extends State { List list = new List(); //列表要展示的数据 RefreshController _refreshController = RefreshController(initialRefresh: true); int _page = 1; //加载的页数 int rows = 20; @override void initState() { super.initState(); MessageMgr().on('love_program', msgListLove); MessageMgr().on('refresh_list', msgRefreshList); MessageMgr().on('refresh_list_when_no_data', msgRefreshListWhenNoData); MessageMgr().on('join_program', msgJoinList); } msgJoinList(data) { for (int i = 0; i < list.length; i++) { if (list[i]['Id'] == data) { list[i]['EnrollNum']++; list[i]['IsEnroll']++; setState(() {}); break; } } } msgRefreshListWhenNoData(data) { if (list.length == 0) _onRefresh(); } msgRefreshList(data) { _onRefresh(); } msgListLove(data) { print('msgListLove $data'); for (int i = 0; i < list.length; i++) { if (list[i]['Id'] == data) { list[i]['FabulousNum']++; list[i]['IsFabulous']++; setState(() {}); break; } } } Future getData(callback) async { Map data = { "userId": UserData().basicInfo.userId, }; data['sign'] = TokenMgr().getSign(data); data['page'] = _page; data['rows'] = rows; Response res = await HttpUtil().post('userfollow/dynamic/follow', data: data, failback: () => Navigator.of(context).pop()); var resData = res.data; _refreshController.refreshCompleted(); print(resData); if (resData['code'] == 0) { callback(resData['data']); } else { showToast(resData['msg']); } } @override Widget build(BuildContext context) { Widget appBar = new AppBar( backgroundColor: AppColors.NewAppbarBgColor, leading: CustomUI.buildCustomLeading(context), title: new Text( I18n.of(context).i_like, textScaleFactor: 1.0, style: Constants.MainTitleStyle, ), centerTitle: true, elevation: 1, ); Widget content = Scaffold( appBar: appBar, body: SafeArea( child: SafeArea( child: SmartRefresher( enablePullDown: true, enablePullUp: true, header: MaterialClassicHeader(), footer: CustomUI.buildLoadingFooter(), controller: _refreshController, onRefresh: _onRefresh, onLoading: _onLoading, child: (_refreshController.headerStatus == RefreshStatus.completed && list.length == 0) ? CustomUI.buildNoData(context) : ListView.builder( itemBuilder: _renderRow, itemCount: list.length, ), ), ))); return content; } Future _onLoading() async { _page++; getData((data) { if (data == null || data.length == 0) { _page--; _refreshController.loadNoData(); } else { list.addAll(data); _refreshController.loadComplete(); } setState(() {}); }); } Widget _renderRow(BuildContext context, int index) { if (index < list.length) { var userInfo = list[index]; return MessageBox(programInfo: userInfo); } return Container(); } Future _onRefresh() async { _page = 1; getData((data) { list.clear(); list.addAll(data == null ? [] : data); setState(() {}); }); } @override void dispose() { _refreshController.dispose(); MessageMgr().off('love_program', msgListLove); MessageMgr().off('refresh_list', msgRefreshList); MessageMgr().off('join_program', msgJoinList); MessageMgr().off('refresh_list_when_no_data', msgRefreshListWhenNoData); super.dispose(); } }