import 'package:chat/data/UserData.dart';
import 'package:chat/data/WebData.dart';
import 'package:chat/data/conversation.dart';
import 'package:chat/data/group_data_mgr.dart';
import 'package:chat/generated/i18n.dart';
import 'package:chat/home/InfoList.dart';
import 'package:chat/home/last_chat_record_widget.dart';
import 'package:chat/home/rich_title.dart';
import 'package:chat/home/unread_dot_widget.dart';
import 'package:chat/models/group_info_model.dart';
import 'package:chat/utils/CustomUI.dart';
import 'package:chat/utils/HttpUtil.dart';
import 'package:chat/utils/MessageMgr.dart';
import 'package:chat/utils/TokenMgr.dart';
import 'package:chat/utils/screen.dart';
import 'package:dio/dio.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../data/constants.dart'
    show
        AppColors,
        AppStyles,
        Constants,
        GlobalSearchPageType,
        GroupOperatingPageType;
import 'package:cached_network_image/cached_network_image.dart';

import 'create_group_view.dart';
import 'global_search.dart';
import 'group_item_widget.dart';

class _ConversationItem extends StatelessWidget {
  const _ConversationItem(
      {Key key,
      this.conversation,
      this.callback,
      this.icon,
      this.bgColor,
      this.iconSize = 20})
      : assert(conversation != null),
        super(key: key);
  final icon;
  final double iconSize;
  final Conversation conversation;
  final callback;
  final bgColor;

  @override
  Widget build(BuildContext context) {
    Widget avatar;
    if (icon != null) {
      avatar = Container(
          height: 47.5,
          width: 47.5,
          margin: EdgeInsets.only(left: 6),
          alignment: Alignment.center,
          decoration: BoxDecoration(
              gradient: bgColor,
              borderRadius: BorderRadius.all(Radius.circular(50))),
          child: Image.asset(
            icon,
            height: iconSize,
          ));
    } else if (conversation.isAvatarFromNet()) {
      avatar = CachedNetworkImage(
        imageUrl: conversation.avatar,
        placeholder: CustomUI.buildImgLoding,
        width: Constants.ConversationAvatarSize,
        height: Constants.ConversationAvatarSize,
      );
    } else {
      avatar = Image.asset(
        conversation.avatar,
        width: Constants.ConversationAvatarSize,
        height: Constants.ConversationAvatarSize,
      );
    }
    List<Widget> _rightArea = [
      Container(
        padding: EdgeInsets.only(top: 4),
        alignment: Alignment.center,
        child: Text(conversation.updateAt,
            textScaleFactor: 1.0,
            style: TextStyle(fontSize: 11, color: const Color(0xFFC6C6C6))),
      )
    ];
    if (conversation.unreadMsgCount > 0) {
      var countStr = conversation.unreadMsgCount.toString();
      if (conversation.unreadMsgCount > 99) {
        countStr = '99+';
      }
      // 未读消息角标
      Widget unreadMsgCountText = Container(
        width: Constants.UnReadMsgNotifyDotSize,
        height: Constants.UnReadMsgNotifyDotSize,
        alignment: Alignment.center,
        decoration: BoxDecoration(
          borderRadius:
              BorderRadius.circular(Constants.UnReadMsgNotifyDotSize / 2.0),
          color: Color(0xFFFF5454),
        ),
        child: Text(countStr,
            textScaleFactor: 1.0, style: AppStyles.UnreadMsgCountDotStyle),
      );
      _rightArea.add(Expanded(
          child: Align(
        alignment: Alignment.bottomCenter,
        child: unreadMsgCountText,
      )));
    }

    return InkWell(
      child: Container(
        padding: const EdgeInsets.all(10.0),
        decoration: BoxDecoration(
          color: Color(AppColors.ConversationItemBgColor),
        ),
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            avatar,
            Container(width: 17.0),
            Expanded(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  Text(conversation.title,
                      textScaleFactor: 1.0,
                      style: TextStyle(
                        color: Colors.black,
                      )),
                  SizedBox(
                    height: 5,
                  ),
                  Text(conversation.desc,
                      textScaleFactor: 1.0,
                      style: TextStyle(
                          fontSize: 12, color: const Color(0xFF9B9B9B)))
                ],
              ),
            ),
            //        Container(width: 10.0),
            SizedBox(
              height: Constants.ConversationAvatarSize,
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.end,
                mainAxisAlignment: MainAxisAlignment.start,
                children: _rightArea,
              ),
            )
          ],
        ),
      ),
      onTap: () {
        callback();
      },
    );
  }
}

class ConversActionPage extends StatefulWidget {
  ConversActionPage({Key key}) : super(key: key);

  _ConversActionPageState createState() => _ConversActionPageState();
}

Map systemInfo = {
  'applyList': null,
  'applyCount': 0,
  'evaluateList': null,
  'evaluateCount': 0,
  'parkList': null,
  'parkCount': 0,
  'castList': null,
  'castCount': 0,
  'walletList': null,
  'walletCount': 0,
};

int msgNum = 0;
bool isShowMsg() {
  return msgNum > 0;
}

getAllResNum(prefs) {
  getResNum(prefs, Constants.ApplyCount);
  getResNum(prefs, Constants.EvaluateCount);
  getResNum(prefs, Constants.ParkCount);
  getResNum(prefs, Constants.CastCount);
  getResNum(prefs, Constants.WalletCount);
}

getResNum(prefs, url) async {
  var count = prefs.getInt(url + UserData().basicInfo.userId.toString());
  systemInfo[url] = count == null ? systemInfo[url] : (systemInfo[url] - count);

  msgNum += systemInfo[url];
}

setResNum(url) async {
  var localKey = url + UserData().basicInfo.userId.toString();
  if (systemInfo[url] > 0) {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    var count = prefs.getInt(localKey);
    prefs.setInt(
        localKey, count == null ? systemInfo[url] : (systemInfo[url] + count));
    msgNum -= systemInfo[url];
    systemInfo[url] = 0;
  }
}

class _ConversActionPageState extends State<ConversActionPage>
    with SingleTickerProviderStateMixin {
  TabController tabCtrl;

  void getSystemMsg(data) async {
    Map data = {
      "userId": UserData().basicInfo.userId,
      "type": UserData().basicInfo.sex
    };
    data['sign'] = TokenMgr().getSign(data);

    Response res = await HttpUtil().post('message/all/message', data: data);
    if (res == null) {
      return;
    }
    Map resData = res.data;
    if (resData['code'] == 0) {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      systemInfo = resData['data'];
      msgNum = 0;
      getAllResNum(prefs);
      if (mounted) {
        setState(() {});
      }
    }
  }

  @override
  void initState() {
    super.initState();

    MessageMgr().on('update_system', getSystemMsg);
    MessageMgr().on('Quit Group', quitGroup);

    MessageMgr().on('Update Group List', updateGroupLastMsg);
    getSystemMsg(null);

    tabCtrl = TabController(length: 3, vsync: this);
  }

  @override
  void dispose() {
    tabCtrl.dispose();
    MessageMgr().off('update_system', getSystemMsg);
    super.dispose();
    MessageMgr().off('Quit Group', quitGroup);

    MessageMgr().off('Update Group List', updateGroupLastMsg);
  }

  @override
  Widget build(BuildContext context) {
    List<GroupInfoModel> groupList = GroupInfoMgr().groupInfoList;

    return Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          //backgroundColor: Constants.LightGreyBackgroundColor,
          centerTitle: false,
          title: Text(
            I18n.of(context).message_center,
            textScaleFactor: 1.0,
            style: Constants.MainTitleStyle,
          ),
          actions: <Widget>[
            Container(
              child: IconButton(
                icon: CircleAvatar(
                    backgroundColor: Constants.GreyBackgroundColor,
                    radius: 13.75,
                    child: Padding(
                        padding: EdgeInsets.only(bottom: 1.5),
                        child: Icon(
                          IconData(0xe659,
                              fontFamily: Constants.IconFontFamily),
                          color: Constants.BlackTextColor,
                          size: 21,
                        ))),
                onPressed: () {
                  CustomUI().goScanPage(context);
                },
              ),
            ),
            // InkWell(
            //     onTap: () {
            //       Navigator.of(context).push(
            //         new MaterialPageRoute(
            //           builder: (context) {
            //             return MessagePushPage();
            //           },
            //         ),
            //       );
            //     },
            //     child: Padding(
            //       padding: EdgeInsets.only(right: 10),
            //       child: CircleAvatar(
            //           backgroundColor: Constants.GreyBackgroundColor,
            //           radius: 13.75,
            //           child: Icon(
            //             Icons.settings,
            //             color: Constants.BlackTextColor,
            //             size: 22,
            //           )),
            //     )),
          ],
          elevation: 0,
          bottom: PreferredSize(
              preferredSize: Size.fromHeight(28),
              child: Container(
                padding: EdgeInsets.only(left: 2),
                decoration: BoxDecoration(
                    //color: Constants.LightGreyBackgroundColor,
                    border:
                        Border(bottom: BorderSide(color: Color(0xffeaeaea)))),
                alignment: Alignment.centerLeft,
                child: TabBar(
                  isScrollable: true,
                  indicatorPadding: EdgeInsets.only(left: 9, right: 9),
                  tabs: <Widget>[
                    UnreadDot(
                        child: Container(
                          margin: EdgeInsets.only(right: 4),
                          child: Text(I18n.of(context).text_chat,
                              textScaleFactor: 1.0),
                        ),
                        type: 1),
                    UnreadDot(
                        child: Container(
                          margin: EdgeInsets.only(right: 4),
                          child: Text(I18n.of(context).group_chat,
                              textScaleFactor: 1.0),
                        ),
                        type: 4),
                    UnreadDot(
                        child: Container(
                            margin: EdgeInsets.only(right: 4),
                            child: Text(I18n.of(context).system_information,
                                textScaleFactor: 1.0)),
                        type: 2),
                  ],
                  controller: tabCtrl,
                ),
              )),
        ),
        body: SafeArea(
            child: TabBarView(
          children: <Widget>[
            LastChatPage(),
            ListView.builder(
//              controller: _scrollController,
              itemBuilder: (BuildContext context, int index) {
                if (index == 0) {
                  return _buildCreateButton();
                } else {
                  var info = groupList[index - 1];
                  return GroupItem(ValueKey(info), groupInfoModel: info);
                }
              },
              itemCount: groupList.length + 1,
            ),
            ListView(
              children: <Widget>[
                SizedBox(height: 8.5),
                _ConversationItem(
                  icon: 'assets/images/chat/icon1.png',
                  bgColor: Constants.RadioGradient,
                  conversation: Conversation(
                    avatar: 'assets/images/ic_tx_news.png',
                    title: I18n.of(context).radio_message,
                    desc: RichTitle.normalTitle(
                        systemInfo['castList'], context, InfoType.Radio),
                    updateAt: systemInfo['castList'] == null
                        ? ""
                        : WebData().getLoginTime(
                            context, systemInfo['castList']['CreateTime']),
                    unreadMsgCount: systemInfo['castCount'],
                  ),
                  callback: () {
                    setResNum(Constants.CastCount);
                    Navigator.of(context).push(
                      new MaterialPageRoute(
                        builder: (context) {
                          return InfoListPage(
                            title: I18n.of(context).radio_message,
                            type: InfoType.Radio,
                          );
                        },
                      ),
                    );
                  },
                ),
                _ConversationItem(
                  icon: 'assets/images/chat/icon4.png',
                  bgColor: Constants.MoneyGradient,
                  conversation: Conversation(
                    avatar: 'assets/images/ic_tx_news.png',
                    title: I18n.of(context).wallet_reminder,
                    desc: RichTitle.normalTitle(
                        systemInfo['walletList'], context, InfoType.IncomeMoney),
                    updateAt: systemInfo['walletList'] == null
                        ? ""
                        : WebData().getLoginTime(
                            context, systemInfo['walletList']['CreateTime']),
                    unreadMsgCount: systemInfo['walletCount'],
                  ),
                  callback: () {
                    setResNum(Constants.WalletCount);
                    Navigator.of(context).push(
                      new MaterialPageRoute(
                        builder: (context) {
                          return InfoListPage(
                            title: I18n.of(context).wallet_reminder,
                            type: InfoType.IncomeMoney,
                          );
                        },
                      ),
                    );
                  },
                ),
                _ConversationItem(
                  icon: 'assets/images/chat/icon3.png',
                  iconSize: 27,
                  bgColor: Constants.ApplyGradient,
                  conversation: Conversation(
                    avatar: 'assets/images/ic_tx_news.png',
                    title: I18n.of(context).application_notice,
                    desc: RichTitle.normalTitle(
                        systemInfo['applyList'], context, InfoType.Apply),
                    updateAt: systemInfo['applyList'] == null
                        ? ""
                        : WebData().getLoginTime(
                            context, systemInfo['applyList']['CreatTime']),
                    unreadMsgCount: systemInfo['applyCount'],
                  ),
                  callback: () {
                    setResNum(Constants.ApplyCount);
                    Navigator.of(context).push(
                      new MaterialPageRoute(
                        builder: (context) {
                          return InfoListPage(
                            title: I18n.of(context).application_notice,
                            type: InfoType.Apply,
                          );
                        },
                      ),
                    );
                  },
                ),
                _ConversationItem(
                  icon: 'assets/images/chat/icon6.png',
                  bgColor: Constants.EvaGradient,
                  conversation: Conversation(
                    avatar: 'assets/images/ic_tx_news.png',
                    title: I18n.of(context).evaluation_notice,
                    desc: RichTitle.normalTitle(systemInfo['evaluateList'],
                        context, InfoType.Evaluation),
                    updateAt: systemInfo['evaluateList'] == null
                        ? ''
                        : WebData().getLoginTime(
                            context, systemInfo['evaluateList']['CreateTime']),
                    unreadMsgCount: systemInfo['evaluateCount'],
                  ),
                  callback: () {
                    setResNum(Constants.EvaluateCount);
                    Navigator.of(context).push(
                      new MaterialPageRoute(
                        builder: (context) {
                          return InfoListPage(
                            title: I18n.of(context).evaluation_notice,
                            type: 2,
                          );
                        },
                      ),
                    );
                  },
                ),
                _ConversationItem(
                  icon: 'assets/images/chat/icon5.png',
                  bgColor: Constants.ParkGradient,
                  conversation: Conversation(
                    avatar: 'assets/images/ic_tx_news.png',
                    title: I18n.of(context).appName,
                    desc: RichTitle.normalTitle(
                        systemInfo['parkList'], context, InfoType.System),
                    updateAt: systemInfo['parkList'] == null
                        ? ""
                        : WebData().getLoginTime(
                            context, systemInfo['parkList']['CreateTime']),
                    unreadMsgCount: systemInfo['parkCount'],
                  ),
                  callback: () {
                    setResNum(Constants.ParkCount);
                    Navigator.of(context).push(
                      new MaterialPageRoute(
                        builder: (context) {
                          return InfoListPage(
                            title: I18n.of(context).appName,
                            type: InfoType.System,
                          );
                        },
                      ),
                    );
                  },
                )
              ],
            )
          ],
          controller: tabCtrl,
        )));
  }

  Widget _buildCreateButton() {
    List<GroupInfoModel> groupList = GroupInfoMgr().groupInfoList;
    Widget _avatarIcon = ClipRRect(
        borderRadius: BorderRadius.circular(GroupRadius),
        child: Container(
          color: const Color(0xFFF2F2F2),
          height: AvatarSize,
          width: AvatarSize,
          child: Icon(
            IconData(0xe66f, fontFamily: Constants.IconFontFamily),
            color: Constants.BlueTextColor,
            size: 35,
          ),
        ));

    Widget _button = InkWell(
        onTap: () {
          Navigator.of(context).push(
            new MaterialPageRoute(
              builder: (context) {
                return CreateGroupPage(
                    GroupOperatingPageType.CreateGroup, [], null);
              },
            ),
          );
        },
        child: Container(
            padding: EdgeInsets.only(top: 14, bottom: 14),
            color: Constants.GreyBackgroundColor,
            child: Container(
              height: ItemHeight,
              decoration: BoxDecoration(color: Colors.white),
              child: Row(
                children: <Widget>[
                  SizedBox(width: LeftPadding),
                  _avatarIcon,
                  SizedBox(width: 14.0),
                  Text(
                    I18n.of(context).create_group_chat,
                    style: TextStyle(fontSize: 15.5),
                  ),
                ],
              ),
            )));

    Widget tips = Container(
      alignment: Alignment.centerLeft,
      width: Screen.width,
      height: 33.5,
      padding: EdgeInsets.only(left: LeftPadding),
      decoration: BoxDecoration(
          color: Colors.white,
          border: Border(bottom: Constants.GreyBorderSide)),
      child: Text(I18n.of(context).group_chat + '(${groupList.length})'),
    );

    return Column(
      children: <Widget>[
        SizedBox(
          height: 10,
        ),
        CustomUI.buildSearchButton(context, () {
          Navigator.of(context).push(
            new MaterialPageRoute(
              builder: (context) {
                return GlobalSearchPage(
                  type: GlobalSearchPageType.SearchGroup,
                );
              },
            ),
          );
        }, bottom: 10),
        _button,
        tips,
      ],
    );
  }

  quitGroup(args) {
    if (mounted) {
      setState(() {
        print('更新群列表');
      });
    }
  }

  updateGroupLastMsg(args) async {
    await GroupInfoMgr().sortGroupList();
    if (mounted) {
      setState(() {});
    }
  }
}

//import 'package:chat/data/UserData.dart';
//import 'package:chat/data/WebData.dart';
//import 'package:chat/data/conversation.dart';
//import 'package:chat/data/group_data_mgr.dart';
//import 'package:chat/generated/i18n.dart';
//import 'package:chat/home/InfoList.dart';
//import 'package:chat/home/last_chat_record_widget.dart';
//import 'package:chat/home/rich_title.dart';
//import 'package:chat/home/unread_dot_widget.dart';
//import 'package:chat/models/group_info_model.dart';
//import 'package:chat/utils/CustomUI.dart';
//import 'package:chat/utils/HttpUtil.dart';
//import 'package:chat/utils/MessageMgr.dart';
//import 'package:chat/utils/TokenMgr.dart';
//import 'package:chat/utils/screen.dart';
//import 'package:dio/dio.dart';
//import 'package:flutter/cupertino.dart';
//import 'package:flutter/material.dart';
//import 'package:shared_preferences/shared_preferences.dart';
//import '../data/constants.dart'
//    show
//        AppColors,
//        AppStyles,
//        Constants,
//        GlobalSearchPageType,
//        GroupOperatingPageType;
//import 'package:cached_network_image/cached_network_image.dart';
//
//import 'create_group_view.dart';
//import 'global_search.dart';
//import 'group_item_widget.dart';
//
//class _ConversationItem extends StatelessWidget {
//  const _ConversationItem(
//      {Key key,
//      this.conversation,
//      this.callback,
//      this.icon,
//      this.bgColor,
//      this.iconSize = 20})
//      : assert(conversation != null),
//        super(key: key);
//  final icon;
//  final double iconSize;
//  final Conversation conversation;
//  final callback;
//  final bgColor;
//
//  @override
//  Widget build(BuildContext context) {
//    Widget avatar;
//    if (icon != null) {
//      avatar = Container(
//          height: 47.5,
//          width: 47.5,
//          margin: EdgeInsets.only(left: 6),
//          alignment: Alignment.center,
//          decoration: BoxDecoration(
//              gradient: bgColor,
//              borderRadius: BorderRadius.all(Radius.circular(50))),
//          child: Image.asset(
//            icon,
//            height: iconSize,
//          ));
//    } else if (conversation.isAvatarFromNet()) {
//      avatar = CachedNetworkImage(
//        imageUrl: conversation.avatar,
//        placeholder: CustomUI.buildImgLoding,
//        width: Constants.ConversationAvatarSize,
//        height: Constants.ConversationAvatarSize,
//      );
//    } else {
//      avatar = Image.asset(
//        conversation.avatar,
//        width: Constants.ConversationAvatarSize,
//        height: Constants.ConversationAvatarSize,
//      );
//    }
//    List<Widget> _rightArea = [
//      Container(
//        padding: EdgeInsets.only(top: 4),
//        alignment: Alignment.center,
//        child: Text(conversation.updateAt,
//            textScaleFactor: 1.0,
//            style: TextStyle(fontSize: 11, color: const Color(0xFFC6C6C6))),
//      )
//    ];
//    if (conversation.unreadMsgCount > 0) {
//      var countStr = conversation.unreadMsgCount.toString();
//      if (conversation.unreadMsgCount > 99) {
//        countStr = '99+';
//      }
//      // 未读消息角标
//      Widget unreadMsgCountText = Container(
//        width: Constants.UnReadMsgNotifyDotSize,
//        height: Constants.UnReadMsgNotifyDotSize,
//        alignment: Alignment.center,
//        decoration: BoxDecoration(
//          borderRadius:
//              BorderRadius.circular(Constants.UnReadMsgNotifyDotSize / 2.0),
//          color: Color(0xFFFF5454),
//        ),
//        child: Text(countStr,
//            textScaleFactor: 1.0, style: AppStyles.UnreadMsgCountDotStyle),
//      );
//      _rightArea.add(Expanded(
//          child: Align(
//        alignment: Alignment.bottomCenter,
//        child: unreadMsgCountText,
//      )));
//    }
//
//    return InkWell(
//      child: Container(
//        padding: const EdgeInsets.all(10.0),
//        decoration: BoxDecoration(
//          color: Color(AppColors.ConversationItemBgColor),
//        ),
//        child: Row(
//          crossAxisAlignment: CrossAxisAlignment.center,
//          children: <Widget>[
//            avatar,
//            Container(width: 17.0),
//            Expanded(
//              child: Column(
//                crossAxisAlignment: CrossAxisAlignment.start,
//                children: <Widget>[
//                  Text(conversation.title,
//                      textScaleFactor: 1.0,
//                      style: TextStyle(
//                        color: Colors.black,
//                      )),
//                  SizedBox(
//                    height: 5,
//                  ),
//                  Text(conversation.desc,
//                      textScaleFactor: 1.0,
//                      style: TextStyle(
//                          fontSize: 12, color: const Color(0xFF9B9B9B)))
//                ],
//              ),
//            ),
//            //        Container(width: 10.0),
//            SizedBox(
//              height: Constants.ConversationAvatarSize,
//              child: Column(
//                crossAxisAlignment: CrossAxisAlignment.end,
//                mainAxisAlignment: MainAxisAlignment.start,
//                children: _rightArea,
//              ),
//            )
//          ],
//        ),
//      ),
//      onTap: () {
//        callback();
//      },
//    );
//  }
//}
//
//class ConversActionPage extends StatefulWidget {
//  ConversActionPage({Key key}) : super(key: key);
//
//  _ConversActionPageState createState() => _ConversActionPageState();
//}
//
//Map systemInfo = {
//  'applyList': null,
//  'applyCount': 0,
//  'evaluateList': null,
//  'evaluateCount': 0,
//  'parkList': null,
//  'parkCount': 0,
//  'castList': null,
//  'castCount': 0,
//  'walletList': null,
//  'walletCount': 0,
//};
//
//int msgNum = 0;
//bool isShowMsg() {
//  return msgNum > 0;
//}
//
//getAllResNum(prefs) {
//  getResNum(prefs, Constants.ApplyCount);
//  getResNum(prefs, Constants.EvaluateCount);
//  getResNum(prefs, Constants.ParkCount);
//  getResNum(prefs, Constants.CastCount);
//  getResNum(prefs, Constants.WalletCount);
//}
//
//getResNum(prefs, url) async {
//  var count = prefs.getInt(url + UserData().basicInfo.userId.toString());
//  systemInfo[url] = count == null ? systemInfo[url] : (systemInfo[url] - count);
//
//  msgNum += systemInfo[url];
//}
//
//setResNum(url) async {
//  var localKey = url + UserData().basicInfo.userId.toString();
//  if (systemInfo[url] > 0) {
//    SharedPreferences prefs = await SharedPreferences.getInstance();
//    var count = prefs.getInt(localKey);
//    prefs.setInt(
//        localKey, count == null ? systemInfo[url] : (systemInfo[url] + count));
//    msgNum -= systemInfo[url];
//    systemInfo[url] = 0;
//  }
//}
//
//class _ConversActionPageState extends State<ConversActionPage>
//    with SingleTickerProviderStateMixin {
//  TabController tabCtrl;
//
//  void getSystemMsg(data) async {
//    Map data = {
//      "userId": UserData().basicInfo.userId,
//      "type": UserData().basicInfo.sex
//    };
//    data['sign'] = TokenMgr().getSign(data);
//
//    Response res = await HttpUtil().post('message/all/message', data: data);
//    if (res == null) {
//      return;
//    }
//    Map resData = res.data;
//    if (resData['code'] == 0) {
//      SharedPreferences prefs = await SharedPreferences.getInstance();
//      systemInfo = resData['data'];
//      msgNum = 0;
//      getAllResNum(prefs);
//      if (mounted) {
//        setState(() {});
//      }
//    }
//  }
//
//  @override
//  void initState() {
//    super.initState();
//
//    MessageMgr().on('update_system', getSystemMsg);
////    MessageMgr().on('Quit Group', quitGroup);
////
////    MessageMgr().on('Update Group List', updateGroupLastMsg);
//    getSystemMsg(null);
//
//    tabCtrl = TabController(length: 2, vsync: this);
//  }
//
//  @override
//  void dispose() {
//    tabCtrl.dispose();
//    MessageMgr().off('update_system', getSystemMsg);
//    super.dispose();
//  }
//
//  @override
//  Widget build(BuildContext context) {
////    List<GroupInfoModel> groupList = GroupInfoMgr().groupInfoList;
//
//    return Scaffold(
//        backgroundColor: Colors.white,
//        appBar: AppBar(
//          //backgroundColor: Constants.LightGreyBackgroundColor,
//          centerTitle: false,
//          title: Text(
//            I18n.of(context).message_center,
//            textScaleFactor: 1.0,
//            style: Constants.MainTitleStyle,
//          ),
//          actions: <Widget>[
//            Container(
//              child: IconButton(
//                icon: CircleAvatar(
//                    backgroundColor: Constants.GreyBackgroundColor,
//                    radius: 13.75,
//                    child: Padding(
//                        padding: EdgeInsets.only(bottom: 1.5),
//                        child: Icon(
//                          IconData(0xe659,
//                              fontFamily: Constants.IconFontFamily),
//                          color: Constants.BlackTextColor,
//                          size: 21,
//                        ))),
//                onPressed: () {
//                  CustomUI().goScanPage(context);
//                },
//              ),
//            ),
//            // InkWell(
//            //     onTap: () {
//            //       Navigator.of(context).push(
//            //         new MaterialPageRoute(
//            //           builder: (context) {
//            //             return MessagePushPage();
//            //           },
//            //         ),
//            //       );
//            //     },
//            //     child: Padding(
//            //       padding: EdgeInsets.only(right: 10),
//            //       child: CircleAvatar(
//            //           backgroundColor: Constants.GreyBackgroundColor,
//            //           radius: 13.75,
//            //           child: Icon(
//            //             Icons.settings,
//            //             color: Constants.BlackTextColor,
//            //             size: 22,
//            //           )),
//            //     )),
//          ],
//          elevation: 0,
//          bottom: PreferredSize(
//              preferredSize: Size.fromHeight(28),
//              child: Container(
//                padding: EdgeInsets.only(left: 2),
//                decoration: BoxDecoration(
//                    //color: Constants.LightGreyBackgroundColor,
//                    border:
//                        Border(bottom: BorderSide(color: Color(0xffeaeaea)))),
//                alignment: Alignment.centerLeft,
//                child: TabBar(
//                  isScrollable: true,
//                  indicatorPadding: EdgeInsets.only(left: 9, right: 9),
//                  tabs: <Widget>[
//                    UnreadDot(
//                        child: Container(
//                          margin: EdgeInsets.only(right: 4),
//                          child: Text(I18n.of(context).text_chat,
//                              textScaleFactor: 1.0),
//                        ),
//                        type: 1),
////                    UnreadDot(
////                        child: Container(
////                          margin: EdgeInsets.only(right: 4),
////                          child: Text(I18n.of(context).group_chat,
////                              textScaleFactor: 1.0),
////                        ),
////                        type: 4),
//                    UnreadDot(
//                        child: Container(
//                            margin: EdgeInsets.only(right: 4),
//                            child: Text(I18n.of(context).system_information,
//                                textScaleFactor: 1.0)),
//                        type: 2),
//                  ],
//                  controller: tabCtrl,
//                ),
//              )),
//        ),
//        body: SafeArea(
//            child: TabBarView(
//          children: <Widget>[
//            LastChatPage(),
////                ListView.builder(
//////              controller: _scrollController,
////                  itemBuilder: (BuildContext context, int index) {
////                    if (index == 0) {
////                      return _buildCreateButton();
////                    } else {
////                      var info = groupList[index - 1];
////                      return GroupItem(ValueKey(info), groupInfoModel: info);
////                    }
////                  },
////                  itemCount: groupList.length + 1,
////                ),
//            ListView(
//              children: <Widget>[
//                SizedBox(height: 8.5),
//                _ConversationItem(
//                  icon: 'assets/images/chat/icon1.png',
//                  bgColor: Constants.RadioGradient,
//                  conversation: Conversation(
//                    avatar: 'assets/images/ic_tx_news.png',
//                    title: I18n.of(context).radio_message,
//                    desc: RichTitle.normalTitle(
//                        systemInfo['castList'], context, InfoType.Radio),
//                    updateAt: systemInfo['castList'] == null
//                        ? ""
//                        : WebData().getLoginTime(
//                            context, systemInfo['castList']['CreateTime']),
//                    unreadMsgCount: systemInfo['castCount'],
//                  ),
//                  callback: () {
//                    setResNum(Constants.CastCount);
//                    Navigator.of(context).push(
//                      new MaterialPageRoute(
//                        builder: (context) {
//                          return InfoListPage(
//                            title: I18n.of(context).radio_message,
//                            type: InfoType.Radio,
//                          );
//                        },
//                      ),
//                    );
//                  },
//                ),
//                _ConversationItem(
//                  icon: 'assets/images/chat/icon4.png',
//                  bgColor: Constants.MoneyGradient,
//                  conversation: Conversation(
//                    avatar: 'assets/images/ic_tx_news.png',
//                    title: I18n.of(context).wallet_reminder,
//                    desc: RichTitle.normalTitle(systemInfo['walletList'],
//                        context, InfoType.IncomeMoney),
//                    updateAt: systemInfo['walletList'] == null
//                        ? ""
//                        : WebData().getLoginTime(
//                            context, systemInfo['walletList']['CreateTime']),
//                    unreadMsgCount: systemInfo['walletCount'],
//                  ),
//                  callback: () {
//                    setResNum(Constants.WalletCount);
//                    Navigator.of(context).push(
//                      new MaterialPageRoute(
//                        builder: (context) {
//                          return InfoListPage(
//                            title: I18n.of(context).wallet_reminder,
//                            type: InfoType.IncomeMoney,
//                          );
//                        },
//                      ),
//                    );
//                  },
//                ),
//                _ConversationItem(
//                  icon: 'assets/images/chat/icon3.png',
//                  iconSize: 27,
//                  bgColor: Constants.ApplyGradient,
//                  conversation: Conversation(
//                    avatar: 'assets/images/ic_tx_news.png',
//                    title: I18n.of(context).application_notice,
//                    desc: RichTitle.normalTitle(
//                        systemInfo['applyList'], context, InfoType.Apply),
//                    updateAt: systemInfo['applyList'] == null
//                        ? ""
//                        : WebData().getLoginTime(
//                            context, systemInfo['applyList']['CreatTime']),
//                    unreadMsgCount: systemInfo['applyCount'],
//                  ),
//                  callback: () {
//                    setResNum(Constants.ApplyCount);
//                    Navigator.of(context).push(
//                      new MaterialPageRoute(
//                        builder: (context) {
//                          return InfoListPage(
//                            title: I18n.of(context).application_notice,
//                            type: InfoType.Apply,
//                          );
//                        },
//                      ),
//                    );
//                  },
//                ),
//                _ConversationItem(
//                  icon: 'assets/images/chat/icon6.png',
//                  bgColor: Constants.EvaGradient,
//                  conversation: Conversation(
//                    avatar: 'assets/images/ic_tx_news.png',
//                    title: I18n.of(context).evaluation_notice,
//                    desc: RichTitle.normalTitle(systemInfo['evaluateList'],
//                        context, InfoType.Evaluation),
//                    updateAt: systemInfo['evaluateList'] == null
//                        ? ''
//                        : WebData().getLoginTime(
//                            context, systemInfo['evaluateList']['CreateTime']),
//                    unreadMsgCount: systemInfo['evaluateCount'],
//                  ),
//                  callback: () {
//                    setResNum(Constants.EvaluateCount);
//                    Navigator.of(context).push(
//                      new MaterialPageRoute(
//                        builder: (context) {
//                          return InfoListPage(
//                            title: I18n.of(context).evaluation_notice,
//                            type: 2,
//                          );
//                        },
//                      ),
//                    );
//                  },
//                ),
//                _ConversationItem(
//                  icon: 'assets/images/chat/icon5.png',
//                  bgColor: Constants.ParkGradient,
//                  conversation: Conversation(
//                    avatar: 'assets/images/ic_tx_news.png',
//                    title: I18n.of(context).appName,
//                    desc: RichTitle.normalTitle(
//                        systemInfo['parkList'], context, InfoType.System),
//                    updateAt: systemInfo['parkList'] == null
//                        ? ""
//                        : WebData().getLoginTime(
//                            context, systemInfo['parkList']['CreateTime']),
//                    unreadMsgCount: systemInfo['parkCount'],
//                  ),
//                  callback: () {
//                    setResNum(Constants.ParkCount);
//                    Navigator.of(context).push(
//                      new MaterialPageRoute(
//                        builder: (context) {
//                          return InfoListPage(
//                            title: I18n.of(context).appName,
//                            type: InfoType.System,
//                          );
//                        },
//                      ),
//                    );
//                  },
//                )
//              ],
//            )
//          ],
//          controller: tabCtrl,
//        )));
//  }
//
//  Widget _buildCreateButton() {
//    List<GroupInfoModel> groupList = GroupInfoMgr().groupInfoList;
//    Widget _avatarIcon = ClipRRect(
//        borderRadius: BorderRadius.circular(GroupRadius),
//        child: Container(
//          color: const Color(0xFFF2F2F2),
//          height: AvatarSize,
//          width: AvatarSize,
//          child: Icon(
//            IconData(0xe66f, fontFamily: Constants.IconFontFamily),
//            color: Constants.BlueTextColor,
//            size: 35,
//          ),
//        ));
//
//    Widget _button = InkWell(
//        onTap: () {
//          Navigator.of(context).push(
//            new MaterialPageRoute(
//              builder: (context) {
//                return CreateGroupPage(
//                    GroupOperatingPageType.CreateGroup, [], null);
//              },
//            ),
//          );
//        },
//        child: Container(
//            padding: EdgeInsets.only(top: 14, bottom: 14),
//            color: Constants.GreyBackgroundColor,
//            child: Container(
//              height: ItemHeight,
//              decoration: BoxDecoration(color: Colors.white),
//              child: Row(
//                children: <Widget>[
//                  SizedBox(width: LeftPadding),
//                  _avatarIcon,
//                  SizedBox(width: 14.0),
//                  Text(
//                    I18n.of(context).create_group_chat,
//                    textScaleFactor: 1.0,
//                    style: TextStyle(fontSize: 15.5),
//                  ),
//                ],
//              ),
//            )));
//
//    Widget tips = Container(
//      alignment: Alignment.centerLeft,
//      width: Screen.width,
//      height: 33.5,
//      padding: EdgeInsets.only(left: LeftPadding),
//      decoration: BoxDecoration(
//          color: Colors.white,
//          border: Border(bottom: Constants.GreyBorderSide)),
//      child: Text(
//        I18n.of(context).group_chat + '(${groupList.length})',
//        textScaleFactor: 1.0,
//      ),
//    );
//
//    return Column(
//      children: <Widget>[
//        SizedBox(
//          height: 10,
//        ),
//        CustomUI.buildSearchButton(context, () {
//          Navigator.of(context).push(
//            new MaterialPageRoute(
//              builder: (context) {
//                return GlobalSearchPage(
//                  type: GlobalSearchPageType.SearchGroup,
//                );
//              },
//            ),
//          );
//        }, bottom: 10),
//        _button,
//        tips,
//      ],
//    );
//  }
//
////  quitGroup(args) {
////    if (mounted) {
////      setState(() {
////        print('更新群列表');
////      });
////    }
////  }
////
////  updateGroupLastMsg(args) async {
////    await GroupInfoMgr().sortGroupList();
////    if (mounted) {
////      setState(() {});
////    }
////  }
//}
