Hibok
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

180 行
5.2 KiB

  1. import 'package:cached_network_image/cached_network_image.dart';
  2. import 'package:chat/data/constants.dart';
  3. import 'package:chat/generated/i18n.dart';
  4. import 'package:chat/utils/CustomUI.dart';
  5. import 'package:chat/utils/group_member_model.dart';
  6. import 'package:chat/utils/msgHandler.dart';
  7. import 'package:chat/utils/screen.dart';
  8. import 'package:flutter/material.dart';
  9. class InviteDetailPage extends StatefulWidget {
  10. final List<GroupMemberModel> originalList;
  11. final GroupMemberModel opt;
  12. final int groupId;
  13. InviteDetailPage(
  14. {Key key, @required this.originalList, @required this.opt, this.groupId})
  15. : super(key: key);
  16. @override
  17. _InviteDetailPageState createState() => new _InviteDetailPageState();
  18. }
  19. class _InviteDetailPageState extends State<InviteDetailPage> {
  20. @override
  21. void initState() {
  22. super.initState();
  23. }
  24. @override
  25. Widget build(BuildContext context) {
  26. Widget appBar = new AppBar(
  27. title: new Text(
  28. I18n.of(context).invite_detail,
  29. textScaleFactor: 1.0,
  30. ),
  31. leading: CustomUI.buildCustomLeading(context),
  32. centerTitle: true,
  33. );
  34. return Scaffold(
  35. appBar: appBar,
  36. body: SafeArea(
  37. child: _buildBody(),
  38. ));
  39. }
  40. Widget _buildBody() {
  41. var headImg = Container(
  42. margin: EdgeInsets.only(top: 9),
  43. child: ClipRRect(
  44. borderRadius: BorderRadius.circular(6),
  45. child: CachedNetworkImage(
  46. imageUrl: widget.opt.avtar,
  47. width: 61,
  48. height: 61,
  49. )));
  50. var name = Container(
  51. margin: EdgeInsets.only(top: 8.5),
  52. alignment: Alignment.center,
  53. width: Screen.width,
  54. child: Text(
  55. widget.opt.nickName,
  56. textScaleFactor: 1.0,
  57. style: TextStyle(fontSize: 15),
  58. ),
  59. );
  60. var tips = Container(
  61. margin: EdgeInsets.only(top: 16, bottom: 20.5),
  62. alignment: Alignment.center,
  63. width: Screen.width,
  64. child: Text(
  65. I18n.of(context)
  66. .invite_members
  67. .replaceFirst('/s1', widget.originalList.length.toString()),
  68. textScaleFactor: 1.0,
  69. style: TextStyle(fontSize: 15.5),
  70. ),
  71. );
  72. var divder = Container(
  73. width: Screen.width,
  74. margin: EdgeInsets.symmetric(horizontal: 16.5),
  75. decoration: BoxDecoration(border: Border(top: Constants.GreyBorderSide)),
  76. );
  77. return Container(
  78. color: Colors.white,
  79. width: Screen.width,
  80. margin: EdgeInsets.only(top: 11),
  81. child: ListView(
  82. children: <Widget>[
  83. headImg,
  84. name,
  85. tips,
  86. divder,
  87. _buildList(),
  88. ///确认邀请
  89. Container(
  90. color: Colors.white,
  91. padding: EdgeInsets.only(top: 11, bottom: 11),
  92. child: GestureDetector(
  93. onTap: () {
  94. List<int> idList = [];
  95. for (int k = 0; k < widget.originalList.length; k++) {
  96. idList.add(widget.originalList[k].memberId);
  97. }
  98. MsgHandler.agreeMember(widget.groupId, idList);
  99. Navigator.pop(context);
  100. },
  101. child: Container(
  102. height: 44.5,
  103. margin: EdgeInsets.symmetric(horizontal: 40, vertical: 40),
  104. alignment: Alignment.center,
  105. decoration: BoxDecoration(
  106. color: Color(0xff2685FA),
  107. borderRadius: BorderRadius.all(Radius.circular(6))),
  108. child: Text(
  109. I18n.of(context).determine,
  110. textScaleFactor: 1.0,
  111. style: TextStyle(color: Colors.white, fontSize: 16),
  112. ),
  113. ),
  114. )),
  115. ],
  116. ),
  117. );
  118. }
  119. Widget _buildList() {
  120. List<Widget> list = [];
  121. // List userList = [];
  122. // for (int i = 0; i < 30; i++) {
  123. // userList.add({
  124. // 'headImg': UserData().basicInfo.headimgurl,
  125. // 'userName': UserData().basicInfo.nickName
  126. // });
  127. // }
  128. widget.originalList
  129. .forEach((f) => list.add(_buildUserInfo(f.avtar, f.nickName)));
  130. return Container(
  131. child: Wrap(crossAxisAlignment: WrapCrossAlignment.start, children: list),
  132. );
  133. }
  134. Widget _buildUserInfo(String headImg, String username) {
  135. return Container(
  136. width: Screen.width / 5,
  137. child: Column(
  138. children: <Widget>[
  139. Container(
  140. margin: EdgeInsets.only(top: 18),
  141. child: ClipRRect(
  142. borderRadius: BorderRadius.circular(6),
  143. child: CachedNetworkImage(
  144. imageUrl: headImg,
  145. width: 42.5,
  146. height: 42.5,
  147. ))),
  148. Container(
  149. margin: EdgeInsets.only(top: 8.5),
  150. child: Text(
  151. username,
  152. textScaleFactor: 1.0,
  153. style: TextStyle(fontSize: 10.3, color: Constants.GreyTextColor),
  154. ),
  155. )
  156. ],
  157. ),
  158. );
  159. }
  160. @override
  161. void dispose() {
  162. super.dispose();
  163. }
  164. }