Hibok
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

186 linhas
6.1 KiB

  1. import 'dart:io';
  2. import 'package:chat/home/global_search.dart';
  3. import 'package:chat/models/friends_info.dart';
  4. import 'package:chat/utils/TutorialOverlay.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:chat/data/UserData.dart';
  7. import 'package:chat/data/constants.dart';
  8. import 'package:chat/generated/i18n.dart';
  9. import 'package:chat/utils/CustomUI.dart';
  10. import 'package:chat/utils/MessageMgr.dart';
  11. import 'package:chat/utils/screen.dart';
  12. import 'package:permission_handler/permission_handler.dart';
  13. import 'address_book.dart';
  14. import 'my_qr.dart';
  15. List showUserList = [];
  16. bool isHaveNewFriends() {
  17. return showUserList.length > 0;
  18. }
  19. class NewAddFriendsPage extends StatefulWidget {
  20. @override
  21. _NewAddFriendsPageState createState() => _NewAddFriendsPageState();
  22. }
  23. class _NewAddFriendsPageState extends State<NewAddFriendsPage> {
  24. ScrollController _scrollController;
  25. List<Widget> _functionButtons = [];
  26. @override
  27. void initState() {
  28. super.initState();
  29. _functionButtons = [
  30. InkWell(
  31. onTap: () {
  32. Navigator.of(context).push(TutorialOverlay(
  33. child: InkWell(
  34. onTap: () {
  35. Navigator.of(context).pop();
  36. },
  37. child: Scaffold(
  38. backgroundColor:
  39. Constants.BlackTextColor.withOpacity(0.0),
  40. body: Container(
  41. margin: EdgeInsets.only(top: Screen.height*0.05),
  42. alignment: Alignment.center,
  43. child: MyQr())))));
  44. },
  45. child: Container(
  46. height: 70,
  47. width: Screen.width,
  48. child: Row(
  49. mainAxisAlignment: MainAxisAlignment.center,
  50. crossAxisAlignment: CrossAxisAlignment.center,
  51. children: [
  52. Container(
  53. constraints: BoxConstraints(maxWidth: 200),
  54. child: Text(
  55. '${I18n.of(Constants.getCurrentContext()).my_qr}: ${UserData().basicInfo.nickName}',
  56. style: TextStyle(fontSize: 13),
  57. overflow: TextOverflow.ellipsis,
  58. )),
  59. SizedBox(width: 9),
  60. Container(
  61. margin: EdgeInsets.only(bottom: 3),
  62. child: Icon(
  63. IconData(0xe682, fontFamily: Constants.IconFontFamily),
  64. size: 18,
  65. color: const Color(0xFF008AFF),
  66. ))
  67. ]),
  68. )),
  69. FriendsInfo(
  70. avatar: '',
  71. userId: 0,
  72. iconCode: 0xe659,
  73. title: I18n.of(Constants.getCurrentContext()).scan,
  74. gradient: LinearGradient(
  75. begin: Alignment.topCenter,
  76. end: Alignment.bottomCenter,
  77. colors: <Color>[
  78. const Color(0xFF6171F1),
  79. const Color(0xFF3441C1),
  80. ]),
  81. onPressed: () {
  82. CustomUI().goScanPage(Constants.getCurrentContext());
  83. }),
  84. FriendsInfo(
  85. avatar: '',
  86. userId: 0,
  87. iconCode: 0xe67a,
  88. isShowDivder: true,
  89. title: I18n.of(Constants.getCurrentContext()).contact_add,
  90. gradient: LinearGradient(
  91. begin: Alignment.topCenter,
  92. end: Alignment.bottomCenter,
  93. colors: <Color>[
  94. const Color(0xFF1AC59E),
  95. const Color(0xFF088E76),
  96. ]),
  97. onPressed: () async {
  98. final PermissionStatus addStatus = await PermissionHandler()
  99. .checkPermissionStatus(PermissionGroup.contacts);
  100. if ((addStatus == PermissionStatus.unknown ||
  101. addStatus == PermissionStatus.denied) &&
  102. Platform.isIOS) {
  103. CustomUI.buildContacts(context, I18n.of(context).privacyAgreement,
  104. I18n.of(context).determine, () {
  105. Navigator.of(context).pop();
  106. showPermission();
  107. }, title: I18n.of(context).tip);
  108. } else {
  109. showPermission();
  110. }
  111. }),
  112. ];
  113. _scrollController = new ScrollController();
  114. }
  115. showPermission() async {
  116. if (await CustomUI.showPermissionSetting(
  117. Constants.getCurrentContext(),
  118. PermissionGroup.contacts,
  119. I18n.of(Constants.getCurrentContext()).contact_permission)) {
  120. MessageMgr().emit('PostContact');
  121. Navigator.push(Constants.getCurrentContext(),
  122. MaterialPageRoute<void>(builder: (BuildContext context) {
  123. return ContactsPage();
  124. }));
  125. }
  126. }
  127. @override
  128. void dispose() {
  129. super.dispose();
  130. _scrollController.dispose();
  131. }
  132. @override
  133. Widget build(BuildContext context) {
  134. final List<Widget> _body = [];
  135. _body.addAll([
  136. ListView.builder(
  137. controller: _scrollController,
  138. itemBuilder: (BuildContext context, int index) {
  139. if (index == 0) {
  140. return Padding(
  141. padding: EdgeInsets.only(top: 7),
  142. child: _functionButtons[index],
  143. );
  144. } else {
  145. return _functionButtons[index];
  146. }
  147. },
  148. itemCount: _functionButtons.length,
  149. ),
  150. ]);
  151. return Scaffold(
  152. resizeToAvoidBottomPadding: false,
  153. appBar: AppBar(
  154. backgroundColor: AppColors.NewAppbarBgColor,
  155. title: Text(I18n.of(context).add_friends,
  156. textScaleFactor: 1.0, style: Constants.MainTitleStyle),
  157. centerTitle: true,
  158. elevation: 1,
  159. leading: CustomUI.buildCustomLeading(context),
  160. bottom: CustomUI.buildSearchButton(context, () {
  161. Navigator.of(context).push(
  162. new MaterialPageRoute(
  163. builder: (context) {
  164. return GlobalSearchPage(
  165. type: GlobalSearchPageType.SearchNewFriends,
  166. );
  167. },
  168. ),
  169. );
  170. })),
  171. body: Stack(
  172. children: _body,
  173. ));
  174. }
  175. }