import 'package:chat/data/group_data_mgr.dart'; import 'package:chat/home/global_search.dart'; import 'package:chat/models/group_info_model.dart'; import 'package:chat/utils/MessageMgr.dart'; import 'package:chat/utils/screen.dart'; import 'package:flutter/material.dart'; import 'package:chat/data/constants.dart'; import 'package:chat/generated/i18n.dart'; import 'package:chat/utils/CustomUI.dart'; import 'create_group_view.dart'; import 'group_item_widget.dart'; class GroupChatListPage extends StatefulWidget { @override _GroupChatListPageState createState() => _GroupChatListPageState(); } class _GroupChatListPageState extends State { ScrollController _scrollController = ScrollController(); List searchList = []; @override void initState() { super.initState(); print('GroupChatListPage initState'); MessageMgr().on('Quit Group', quitGroup); MessageMgr().on('Update Group List', updateGroupLastMsg); } updateGroupLastMsg(args) async { await GroupInfoMgr().sortGroupList(); if (mounted) { setState(() {}); } } @override void dispose() { _scrollController.dispose(); MessageMgr().off('Update Group List', updateGroupLastMsg); MessageMgr().off('Quit Group', quitGroup); super.dispose(); } quitGroup(args) { if (mounted) { setState(() { print('更新群列表'); }); } } Widget _buildCreateButton() { List 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( height: ItemHeight, margin: EdgeInsets.only(top: 6.5, bottom: 16), decoration: BoxDecoration(color: Colors.white), child: Row( children: [ 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: [ _button, tips, ], ); } @override Widget build(BuildContext context) { List groupList = GroupInfoMgr().groupInfoList; print('build group chat Page 群数量${groupList.length}'); final List _body = []; _body.add( 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, ), ); return Scaffold( resizeToAvoidBottomPadding: false, appBar: AppBar( backgroundColor: AppColors.NewAppbarBgColor, title: Text(I18n.of(context).group_chat, textScaleFactor: 1.0, style: Constants.MainTitleStyle), centerTitle: false, elevation: 1, bottom: CustomUI.buildSearchButton(context, () { Navigator.of(context).push( new MaterialPageRoute( builder: (context) { return GlobalSearchPage( type: GlobalSearchPageType.SearchGroup, ); }, ), ); })), body: Stack( children: _body, )); } }