Hibok
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 
 

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