Hibok
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 
 

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