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.
 
 
 
 
 
 

249 Zeilen
7.2 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: (context, url) => Image.asset(
  127. Constants.DefaultHeadImgUrl,
  128. width: size - 30,
  129. height: size - 30,
  130. ),
  131. width: size - 30,
  132. height: size - 30,
  133. )),
  134. SizedBox(
  135. height: 5,
  136. ),
  137. SizedBox(
  138. width: size - 30,
  139. child: Text(
  140. refName,
  141. style: TextStyle(fontSize: 11, color: Color(0xff818181)),
  142. maxLines: 1,
  143. overflow: TextOverflow.ellipsis,
  144. ),
  145. ),
  146. ],
  147. ),
  148. width: size,
  149. height: size,
  150. ),
  151. behavior: HitTestBehavior.translucent,
  152. onTap: () {
  153. if (member.memberId != UserData().basicInfo.userId) {
  154. AppNavigator.pushProfileInfoPage(context, member.memberId,
  155. fromWhere: 2, addMode: 1);
  156. }
  157. },
  158. ));
  159. }
  160. list.add(GestureDetector(
  161. onTap: addMember,
  162. child: Container(
  163. width: size,
  164. height: size,
  165. child: Column(
  166. children: <Widget>[
  167. Container(
  168. alignment: Alignment.center,
  169. width: size - 30,
  170. height: size - 30,
  171. child: Text(
  172. '+',
  173. textScaleFactor: 1.0,
  174. style: TextStyle(fontSize: 30, color: Color(0xffB1B1B1)),
  175. ),
  176. decoration: BoxDecoration(
  177. // color: Colors.black,
  178. border: Border.all(color: Color(0xffC3C3C3), width: 1.0),
  179. borderRadius: BorderRadius.all(Radius.circular(6))),
  180. )
  181. ],
  182. ),
  183. ),
  184. ));
  185. if (isHost) {
  186. list.add(Container(
  187. width: size,
  188. height: size,
  189. child: Column(
  190. children: <Widget>[
  191. // SizedBox(height: 5,),
  192. GestureDetector(
  193. onTap: deleteMember,
  194. child: Container(
  195. alignment: Alignment.center,
  196. width: size - 30,
  197. height: size - 30,
  198. child: Container(
  199. color: Color(0xffB1B1B1),
  200. width: 20,
  201. height: 2.6,
  202. ),
  203. decoration: BoxDecoration(
  204. border: Border.all(color: Color(0xffC3C3C3), width: 1.0),
  205. borderRadius: BorderRadius.all(Radius.circular(6))),
  206. ),
  207. )
  208. ],
  209. ),
  210. ));
  211. }
  212. return Container(
  213. color: Color(0xffFAFAFA),
  214. //height: Screen.height-100,
  215. child: Column(
  216. children: <Widget>[
  217. SizedBox(
  218. height: 10,
  219. ),
  220. Wrap(
  221. children: list,
  222. crossAxisAlignment: WrapCrossAlignment.start,
  223. alignment: WrapAlignment.start,
  224. ),
  225. ],
  226. ),
  227. );
  228. }
  229. }