Hibok
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 
 

253 Zeilen
7.4 KiB

  1. import 'package:cached_network_image/cached_network_image.dart';
  2. import 'package:chat/data/UserData.dart';
  3. import 'package:chat/generated/i18n.dart';
  4. import 'package:chat/models/group_info_model.dart';
  5. import 'package:chat/models/ref_name_provider.dart';
  6. import 'package:chat/utils/MessageMgr.dart';
  7. import 'package:chat/utils/group_member_model.dart';
  8. import 'package:chat/utils/screen.dart';
  9. import 'package:flutter/cupertino.dart';
  10. import 'package:flutter/material.dart';
  11. import 'package:provider/provider.dart';
  12. import '../data/constants.dart';
  13. import '../utils/CustomUI.dart';
  14. import '../utils/app_navigator.dart';
  15. import 'create_group_view.dart';
  16. import 'package:chat/utils/friend_list_mgr.dart';
  17. class GroupAllMember extends StatefulWidget {
  18. final GroupInfoModel groupInfoModel;
  19. GroupAllMember({Key key, this.groupInfoModel}) : super(key: key);
  20. @override
  21. State<StatefulWidget> createState() {
  22. return GroupAllMemberState();
  23. }
  24. }
  25. class GroupAllMemberState extends State<GroupAllMember> {
  26. static const Separate_Size = 15.0;
  27. bool isHost;
  28. ///是否是群主
  29. @override
  30. void initState() {
  31. super.initState();
  32. MessageMgr().on('Update Group Info', updateGroupInfo);
  33. isHost = widget.groupInfoModel.hosterId == UserData().basicInfo.userId;
  34. }
  35. updateGroupInfo(args) async {
  36. if (mounted) {
  37. print('群设置 - 更新群信息2222');
  38. setState(() {});
  39. }
  40. }
  41. @override
  42. void dispose() {
  43. super.dispose();
  44. MessageMgr().off('Update Group Info', updateGroupInfo);
  45. }
  46. @override
  47. Widget build(BuildContext context) {
  48. Widget appBar = new AppBar(
  49. backgroundColor: AppColors.NewAppbarBgColor,
  50. title: new Text(
  51. I18n.of(context).group_memeber,
  52. style: TextStyle(color: AppColors.NewAppbarTextColor),
  53. textScaleFactor: 1.0,
  54. ),
  55. leading: CustomUI.buildCustomLeading(context),
  56. centerTitle: true,
  57. );
  58. return Scaffold(
  59. appBar: appBar,
  60. body: SafeArea(
  61. child: ListView(
  62. children: <Widget>[
  63. SizedBox(
  64. height: 12,
  65. ),
  66. ///群成员
  67. buildMember(
  68. () {
  69. ///添加成员
  70. Navigator.of(context).push(
  71. new MaterialPageRoute(
  72. builder: (context) {
  73. return CreateGroupPage(
  74. GroupOperatingPageType.AddMember,
  75. widget.groupInfoModel.getMembersInGroup(),
  76. widget.groupInfoModel.sessionId);
  77. },
  78. ),
  79. );
  80. },
  81. () {
  82. ///删除成员
  83. Navigator.of(context).push(
  84. new MaterialPageRoute(
  85. builder: (context) {
  86. return CreateGroupPage(
  87. GroupOperatingPageType.DeleteMember,
  88. widget.groupInfoModel.getMembersInGroup(),
  89. widget.groupInfoModel.sessionId);
  90. },
  91. ),
  92. );
  93. },
  94. ),
  95. ],
  96. ),
  97. ),
  98. );
  99. }
  100. Widget buildMember(Function addMember, Function deleteMember) {
  101. // List<GroupMemberModel> members = widget.groupInfoModel.members;
  102. List<GroupMemberModel> members = [];
  103. for (int k = 0; k < widget.groupInfoModel.members.length; k++) {
  104. //只加入存在群的
  105. GroupMemberModel mo = widget.groupInfoModel.members[k];
  106. if (mo.inGroup == 1) {
  107. print('id ${mo.memberId} name ${mo.refName} avatar ${mo.avtar}');
  108. members.add(mo);
  109. }
  110. }
  111. members.sort((GroupMemberModel left, GroupMemberModel right) =>
  112. right.identity.compareTo(left.identity));
  113. double size = Screen.width / 5;
  114. List<Widget> list = [];
  115. for (int index = 0; index < members.length; index++) {
  116. var member = members[index];
  117. var refName = Provider.of<RefNameProvider>(context)
  118. .getGroupRefName(widget.groupInfoModel.sessionId, member.memberId);
  119. list.add(GestureDetector(
  120. child: Container(
  121. child: Column(
  122. children: <Widget>[
  123. ClipRRect(
  124. borderRadius: BorderRadius.all(Radius.circular(8.0)),
  125. child: CachedNetworkImage(
  126. imageUrl: member.avtar,
  127. placeholder: (context, url) => Image.asset(
  128. Constants.DefaultHeadImgUrl,
  129. width: size - 30,
  130. height: size - 30,
  131. ),
  132. width: size - 30,
  133. height: size - 30,
  134. )),
  135. SizedBox(
  136. height: 5,
  137. ),
  138. Container(
  139. width: size - 30,
  140. alignment: Alignment.center,
  141. child: Text(
  142. refName,
  143. textScaleFactor: 1.0,
  144. style: TextStyle(fontSize: 11, color: Color(0xff818181)),
  145. maxLines: 1,
  146. overflow: TextOverflow.ellipsis,
  147. ),
  148. ),
  149. ],
  150. ),
  151. width: size,
  152. height: size,
  153. ),
  154. behavior: HitTestBehavior.translucent,
  155. onTap: () {
  156. if (member.memberId != UserData().basicInfo.userId) {
  157. AppNavigator.pushProfileInfoPage(context, member.memberId,
  158. fromWhere: 2,
  159. addMode: !FriendListMgr().isMyFriend(member.memberId) ? 1 : 0);
  160. }
  161. },
  162. ));
  163. }
  164. list.add(GestureDetector(
  165. onTap: addMember,
  166. child: Container(
  167. width: size,
  168. height: size,
  169. child: Column(
  170. children: <Widget>[
  171. Container(
  172. alignment: Alignment.center,
  173. width: size - 30,
  174. height: size - 30,
  175. child: Text(
  176. '+',
  177. textScaleFactor: 1.0,
  178. style: TextStyle(fontSize: 30, color: Color(0xffB1B1B1)),
  179. ),
  180. decoration: BoxDecoration(
  181. // color: Colors.black,
  182. border: Border.all(color: Color(0xffC3C3C3), width: 1.0),
  183. borderRadius: BorderRadius.all(Radius.circular(6))),
  184. )
  185. ],
  186. ),
  187. ),
  188. ));
  189. if (isHost) {
  190. list.add(Container(
  191. width: size,
  192. height: size,
  193. child: Column(
  194. children: <Widget>[
  195. // SizedBox(height: 5,),
  196. GestureDetector(
  197. onTap: deleteMember,
  198. child: Container(
  199. alignment: Alignment.center,
  200. width: size - 30,
  201. height: size - 30,
  202. child: Container(
  203. color: Color(0xffB1B1B1),
  204. width: 20,
  205. height: 2.6,
  206. ),
  207. decoration: BoxDecoration(
  208. border: Border.all(color: Color(0xffC3C3C3), width: 1.0),
  209. borderRadius: BorderRadius.all(Radius.circular(6))),
  210. ),
  211. )
  212. ],
  213. ),
  214. ));
  215. }
  216. return Container(
  217. color: Color(0xffFAFAFA),
  218. //height: Screen.height-100,
  219. child: Column(
  220. children: <Widget>[
  221. SizedBox(
  222. height: 10,
  223. ),
  224. Wrap(
  225. children: list,
  226. crossAxisAlignment: WrapCrossAlignment.start,
  227. alignment: WrapAlignment.start,
  228. ),
  229. ],
  230. ),
  231. );
  232. }
  233. }