diff --git a/android/app/build.gradle b/android/app/build.gradle index c2c5d18..b7fee24 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -56,9 +56,9 @@ android { // manifestPlaceholders = [ // AMAP_KEY : "1fd4e93e3b4b13747da41f484c955fe2", /// 高德地图key // ] - // ndk { - // abiFilters 'armeabi-v7a' - // } + ndk { + abiFilters 'armeabi-v7a' + } multiDexEnabled true manifestPlaceholders = [ JPUSH_PKGNAME : 'com.cyhd.henhoandroid', diff --git a/assets/fonts/iconfont.ttf b/assets/fonts/iconfont.ttf index d41f395..f36674b 100644 Binary files a/assets/fonts/iconfont.ttf and b/assets/fonts/iconfont.ttf differ diff --git a/i18n/vi-VN.json b/i18n/vi-VN.json index cb3982e..0373c7d 100644 --- a/i18n/vi-VN.json +++ b/i18n/vi-VN.json @@ -1042,7 +1042,7 @@ "other_pay": "Người khác trả hộ", "friend_verification": "Xác thực bạn bè", "add_friends_tips": "Đơn xin xác thực của bạn đã gửi và chờ đối phương thông qua", - "i_am": "Tôi là/s1", + "i_am": "Tôi là /s1", "agree": "Cho phép", "privacyAgreement": "\"Hi\"Bạn cần đồng ý với \"Thỏa thuận quyền riêng tư\" để sử dụng", "privacy": "Thỏa thuận quyền riêng tư", diff --git a/lib/home/AddProgram.dart b/lib/home/AddProgram.dart index 8167699..2460e04 100644 --- a/lib/home/AddProgram.dart +++ b/lib/home/AddProgram.dart @@ -1050,6 +1050,7 @@ class _AddProgramState extends State { : CachedNetworkImage( imageUrl: f, fit: BoxFit.cover, + placeholder: CustomUI.buildImgLoding, ), ))), Positioned( diff --git a/lib/home/Myprogram.dart b/lib/home/Myprogram.dart index 6271d9d..c8a610f 100644 --- a/lib/home/Myprogram.dart +++ b/lib/home/Myprogram.dart @@ -91,7 +91,6 @@ class _MyProgramPageState extends State { var data = { "userId": UserData().basicInfo.userId, "visitUserId": widget.userId, - //"type": widget.isProgram == true ? 1 : 2, }; data['sign'] = TokenMgr().getSign(data); data['page'] = _page; diff --git a/lib/home/ProfilePage.dart b/lib/home/ProfilePage.dart index 335b077..78d53ac 100644 --- a/lib/home/ProfilePage.dart +++ b/lib/home/ProfilePage.dart @@ -191,9 +191,6 @@ class _ProfilePageState extends State .initVoucher(data['Voucher']); } }); - } else { - // getFirstDy(); - // getFirstProgram(); } } @@ -1654,7 +1651,7 @@ class _ProfilePageState extends State //同意好友后发送打招呼 MsgModel msgModel = MsgHandler.createSendMsg( - ChatType.TextChatType, I18n.of(context).new_friends_tips, + ChatType.TextChatType, I18n.of(context).new_friends_tips, friendId: userInfo.userId, refMsg: null, refShortTxt: null, diff --git a/lib/home/friend_page.dart b/lib/home/friend_page.dart index 646b7f8..1df91ee 100644 --- a/lib/home/friend_page.dart +++ b/lib/home/friend_page.dart @@ -1,9 +1,7 @@ -import 'dart:io'; - import 'package:cached_network_image/cached_network_image.dart'; import 'package:chat/home/global_search.dart'; +import 'package:chat/home/new_addfriends.dart'; import 'package:chat/home/new_friends.dart'; -import 'package:chat/home/search_newfriend.dart'; import 'package:chat/models/friends_info.dart'; import 'package:flutter/material.dart'; import 'package:chat/data/UserData.dart'; @@ -191,18 +189,18 @@ class _FriendPageState extends State { )); } - showPermission() async { - if (await CustomUI.showPermissionSetting( - Constants.getCurrentContext(), - PermissionGroup.contacts, - I18n.of(Constants.getCurrentContext()).contact_permission)) { - MessageMgr().emit('PostContact'); - Navigator.push(Constants.getCurrentContext(), - MaterialPageRoute(builder: (BuildContext context) { - return ContactsPage(); - })); - } - } + // showPermission() async { + // if (await CustomUI.showPermissionSetting( + // Constants.getCurrentContext(), + // PermissionGroup.contacts, + // I18n.of(Constants.getCurrentContext()).contact_permission)) { + // MessageMgr().emit('PostContact'); + // Navigator.push(Constants.getCurrentContext(), + // MaterialPageRoute(builder: (BuildContext context) { + // return ContactsPage(); + // })); + // } + // } getFriendList() async { friendList = await FriendListMgr().getFriendList(); @@ -260,84 +258,14 @@ class _FriendPageState extends State { } initNewFriendsList(showUserList) { - _functionButtons = [ - FriendsInfo( - avatar: '', - userId: 0, - iconCode: 0xe659, - title: I18n.of(Constants.getCurrentContext()).scan, - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - const Color(0xFF6171F1), - const Color(0xFF3441C1), - ]), - onPressed: () { - CustomUI().goScanPage(Constants.getCurrentContext()); - }), - FriendsInfo( - avatar: '', - userId: 0, - iconCode: 0xe67a, - isShowDivder: true, - title: I18n.of(Constants.getCurrentContext()).contact_add, - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - const Color(0xFF1AC59E), - const Color(0xFF088E76), - ]), - onPressed: () async { - final PermissionStatus addStatus = await PermissionHandler() - .checkPermissionStatus(PermissionGroup.contacts); - if ((addStatus == PermissionStatus.unknown || - addStatus == PermissionStatus.denied) && - Platform.isIOS) { - CustomUI.buildContacts(context, I18n.of(context).privacyAgreement, - I18n.of(context).determine, () { - Navigator.of(context).pop(); - showPermission(); - }, title: I18n.of(context).tip); - } else { - showPermission(); - } - }), - FriendsInfo( - avatar: '', - userId: 0, - iconCode: 0xe662, - isShowDivder: true, - title: I18n.of(Constants.getCurrentContext()).add_friends, - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - const Color(0xFF9E58E5), - const Color(0xFF6118A6), - ]), - onPressed: () async { - Navigator.push(Constants.getCurrentContext(), - MaterialPageRoute(builder: (BuildContext context) { - return SearchNewFriendsPage(); - })); - }), - ]; - _functionButtons.insert(0, _buildNewFriends(showUserList)); + _functionButtons = [_buildNewFriends(showUserList)]; } msgAddfrend(data) { - // setState(() { - // _contactsFuture = FriendListMgr().getFriendList(); - // }); getFriendList(); } msgDeletefrend(data) { - // setState(() { - // _contactsFuture = FriendListMgr().getFriendList(); - // }); getFriendList(); } @@ -545,6 +473,32 @@ class _FriendPageState extends State { textScaleFactor: 1.0, style: Constants.MainTitleStyle), centerTitle: false, elevation: 1, + actions: [ + Container( + child: IconButton( + icon: CircleAvatar( + backgroundColor: Constants.GreyBackgroundColor, + radius: 13.75, + child: Padding( + padding: EdgeInsets.only(bottom: 1.5), + child: Icon( + IconData(0xe662, + fontFamily: Constants.IconFontFamily), + color: Constants.BlackTextColor, + size: 21, + ))), + onPressed: () { + Navigator.of(context).push( + new MaterialPageRoute( + builder: (context) { + return NewAddFriendsPage(); + }, + ), + ); + }, + ), + ), + ], bottom: CustomUI.buildSearchButton(context, () { Navigator.of(context).push( new MaterialPageRoute( diff --git a/lib/home/my_qr.dart b/lib/home/my_qr.dart index 2d97a59..cf0f169 100644 --- a/lib/home/my_qr.dart +++ b/lib/home/my_qr.dart @@ -14,30 +14,33 @@ import 'package:qr_flutter/qr_flutter.dart'; class MyQr extends StatelessWidget { @override Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - margin: EdgeInsets.only(top: 55.5, left: 25, right: 25), - height: 400, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - _head(context), - _qrImg(), - Container( - padding: EdgeInsets.all(20), - child: Text( - I18n.of(context).scan_and_add, - textScaleFactor: 1.0, - style: TextStyle(fontSize: 12.5), - ), - ) - ], - ), - ); + return Align( + alignment: Alignment.topCenter, + child: Container( + alignment: Alignment.center, + margin: EdgeInsets.only(top: 55.5), + width: 315, + height: 424, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + _head(context), + _qrImg(), + Container( + padding: EdgeInsets.all(20), + child: Text( + I18n.of(context).scan_and_add, + textScaleFactor: 1.0, + style: TextStyle(fontSize: 12.5), + ), + ) + ], + ), + )); } _qrImg() { diff --git a/lib/home/new_addfriends.dart b/lib/home/new_addfriends.dart new file mode 100644 index 0000000..82010a2 --- /dev/null +++ b/lib/home/new_addfriends.dart @@ -0,0 +1,194 @@ +import 'dart:io'; + +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:chat/home/global_search.dart'; +import 'package:chat/home/new_friends.dart'; +import 'package:chat/models/friends_info.dart'; +import 'package:chat/utils/TutorialOverlay.dart'; +import 'package:flutter/material.dart'; +import 'package:chat/data/UserData.dart'; +import 'package:chat/data/constants.dart'; +import 'package:chat/generated/i18n.dart'; +import 'package:chat/utils/CustomUI.dart'; +import 'package:chat/utils/HttpUtil.dart'; +import 'package:chat/utils/MessageMgr.dart'; +import 'package:chat/utils/TokenMgr.dart'; +import 'package:chat/utils/conversation_table.dart'; +import 'package:chat/utils/friend_list_mgr.dart'; +import 'package:chat/utils/screen.dart'; +import 'package:dio/dio.dart'; +import 'package:oktoast/oktoast.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'address_book.dart'; +import 'my_qr.dart'; + +List showUserList = []; + +bool isHaveNewFriends() { + return showUserList.length > 0; +} + +class NewAddFriendsPage extends StatefulWidget { + @override + _NewAddFriendsPageState createState() => _NewAddFriendsPageState(); +} + +class _NewAddFriendsPageState extends State { + ScrollController _scrollController; + List _functionButtons = []; + @override + void initState() { + super.initState(); + + _functionButtons = [ + InkWell( + onTap: () { + Navigator.of(context).push(TutorialOverlay( + child: InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Scaffold( + backgroundColor: + Constants.BlackTextColor.withOpacity(0.0), + body: Container( + margin: EdgeInsets.only(top: Screen.height*0.05), + alignment: Alignment.center, + child: MyQr()))))); + }, + child: Container( + height: 70, + width: Screen.width, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + constraints: BoxConstraints(maxWidth: 200), + child: Text( + '${I18n.of(Constants.getCurrentContext()).my_qr}: ${UserData().basicInfo.nickName}', + style: TextStyle(fontSize: 13), + overflow: TextOverflow.ellipsis, + )), + SizedBox(width: 9), + Container( + margin: EdgeInsets.only(bottom: 3), + child: Icon( + IconData(0xe682, fontFamily: Constants.IconFontFamily), + size: 18, + color: const Color(0xFF008AFF), + )) + ]), + )), + FriendsInfo( + avatar: '', + userId: 0, + iconCode: 0xe659, + title: I18n.of(Constants.getCurrentContext()).scan, + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + const Color(0xFF6171F1), + const Color(0xFF3441C1), + ]), + onPressed: () { + CustomUI().goScanPage(Constants.getCurrentContext()); + }), + FriendsInfo( + avatar: '', + userId: 0, + iconCode: 0xe67a, + isShowDivder: true, + title: I18n.of(Constants.getCurrentContext()).contact_add, + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + const Color(0xFF1AC59E), + const Color(0xFF088E76), + ]), + onPressed: () async { + final PermissionStatus addStatus = await PermissionHandler() + .checkPermissionStatus(PermissionGroup.contacts); + if ((addStatus == PermissionStatus.unknown || + addStatus == PermissionStatus.denied) && + Platform.isIOS) { + CustomUI.buildContacts(context, I18n.of(context).privacyAgreement, + I18n.of(context).determine, () { + Navigator.of(context).pop(); + showPermission(); + }, title: I18n.of(context).tip); + } else { + showPermission(); + } + }), + ]; + _scrollController = new ScrollController(); + } + + showPermission() async { + if (await CustomUI.showPermissionSetting( + Constants.getCurrentContext(), + PermissionGroup.contacts, + I18n.of(Constants.getCurrentContext()).contact_permission)) { + MessageMgr().emit('PostContact'); + Navigator.push(Constants.getCurrentContext(), + MaterialPageRoute(builder: (BuildContext context) { + return ContactsPage(); + })); + } + } + + @override + void dispose() { + super.dispose(); + _scrollController.dispose(); + } + + @override + Widget build(BuildContext context) { + final List _body = []; + _body.addAll([ + ListView.builder( + controller: _scrollController, + itemBuilder: (BuildContext context, int index) { + if (index == 0) { + return Padding( + padding: EdgeInsets.only(top: 7), + child: _functionButtons[index], + ); + } else { + return _functionButtons[index]; + } + }, + itemCount: _functionButtons.length, + ), + ]); + + return Scaffold( + resizeToAvoidBottomPadding: false, + appBar: AppBar( + backgroundColor: AppColors.NewAppbarBgColor, + title: Text(I18n.of(context).add_friends, + textScaleFactor: 1.0, style: Constants.MainTitleStyle), + centerTitle: true, + elevation: 1, + leading: CustomUI.buildCustomLeading(context), + bottom: CustomUI.buildSearchButton(context, () { + Navigator.of(context).push( + new MaterialPageRoute( + builder: (context) { + return GlobalSearchPage( + type: GlobalSearchPageType.SearchNewFriends, + ); + }, + ), + ); + })), + body: Stack( + children: _body, + )); + } +} diff --git a/lib/home/new_friends.dart b/lib/home/new_friends.dart index 809a65d..c7e046e 100644 --- a/lib/home/new_friends.dart +++ b/lib/home/new_friends.dart @@ -8,13 +8,18 @@ import 'package:chat/utils/HttpUtil.dart'; import 'package:chat/utils/MessageMgr.dart'; import 'package:chat/utils/TokenMgr.dart'; import 'package:chat/utils/conversation_table.dart'; +import 'package:chat/utils/screen.dart'; import 'package:dio/dio.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; - +import 'package:chat/models/friends_info.dart'; import 'ProfilePage.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'dart:io'; +import 'address_book.dart'; +import 'new_addfriends.dart'; class _ContactItem extends StatelessWidget { _ContactItem( @@ -186,6 +191,8 @@ class _NewFriendsPageState extends State { List friendList = []; + List _functionButtons = []; + @override void initState() { super.initState(); @@ -195,6 +202,49 @@ class _NewFriendsPageState extends State { getNewFriendList(); _scrollController = new ScrollController(); MessageMgr().on('do_friend_apply', messageApply); + + _functionButtons = [ + FriendsInfo( + avatar: '', + userId: 0, + iconCode: 0xe67a, + title: I18n.of(Constants.getCurrentContext()).contact_add, + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + const Color(0xFF1AC59E), + const Color(0xFF088E76), + ]), + onPressed: () async { + final PermissionStatus addStatus = await PermissionHandler() + .checkPermissionStatus(PermissionGroup.contacts); + if ((addStatus == PermissionStatus.unknown || + addStatus == PermissionStatus.denied) && + Platform.isIOS) { + CustomUI.buildContacts(context, I18n.of(context).privacyAgreement, + I18n.of(context).determine, () { + Navigator.of(context).pop(); + showPermission(); + }, title: I18n.of(context).tip); + } else { + showPermission(); + } + }), + ]; + } + + showPermission() async { + if (await CustomUI.showPermissionSetting( + Constants.getCurrentContext(), + PermissionGroup.contacts, + I18n.of(Constants.getCurrentContext()).contact_permission)) { + MessageMgr().emit('PostContact'); + Navigator.push(Constants.getCurrentContext(), + MaterialPageRoute(builder: (BuildContext context) { + return ContactsPage(); + })); + } } messageApply(data) { @@ -244,7 +294,17 @@ class _NewFriendsPageState extends State { _body.add(ListView.builder( controller: _scrollController, itemBuilder: (BuildContext context, int index) { - int _contactIndex = index; + if (index < _functionButtons.length) { + if (index == 0) { + return Padding( + padding: EdgeInsets.only(top: 7), + child: _functionButtons[index], + ); + } else { + return _functionButtons[index]; + } + } + int _contactIndex = index - _functionButtons.length; bool _isGroupTitle = true; FriendModel _contact = friendList[_contactIndex]; @@ -262,7 +322,7 @@ class _NewFriendsPageState extends State { avatar: _contact.avatar, title: Provider.of(context) .getRefName(_contact.friendId, _contact.name), - state: _contact.state, + state: _contact.state, isShowDivder: true, applyId: _contact.applyId, groupTitle: _isGroupTitle @@ -271,7 +331,7 @@ class _NewFriendsPageState extends State { : I18n.of(context).after_three_day) : null); }, - itemCount: friendList.length, + itemCount: friendList.length + _functionButtons.length, )); } else { _body.add(ListView.builder( @@ -327,6 +387,32 @@ class _NewFriendsPageState extends State { centerTitle: true, leading: CustomUI.buildCustomLeading(context), elevation: 1, + actions: [ + Container( + child: IconButton( + icon: CircleAvatar( + backgroundColor: Constants.GreyBackgroundColor, + radius: 13.75, + child: Padding( + padding: EdgeInsets.only(bottom: 1.5), + child: Icon( + IconData(0xe662, + fontFamily: Constants.IconFontFamily), + color: Constants.BlackTextColor, + size: 21, + ))), + onPressed: () { + Navigator.of(context).push( + new MaterialPageRoute( + builder: (context) { + return NewAddFriendsPage(); + }, + ), + ); + }, + ), + ), + ], bottom: PreferredSize( preferredSize: Size.fromHeight(49), child: Container( diff --git a/lib/utils/HttpUtil.dart b/lib/utils/HttpUtil.dart index 135b543..a56dd3d 100644 --- a/lib/utils/HttpUtil.dart +++ b/lib/utils/HttpUtil.dart @@ -46,7 +46,7 @@ class HttpUtil { //static const String BaseUrl = 'http://192.168.0.207:9080/'; static const String BaseUrl = 'http://120.79.107.63:9080/'; //static const String BaseUrl = 'http://192.168.0.177:9016/'; -// static const String BaseUrl = 'https://datasm.chengyouhd.com/'; + //static const String BaseUrl = 'https://datasm.chengyouhd.com/'; static HttpUtil _getInstance() { if (_instance == null) { @@ -219,7 +219,7 @@ class HttpUtil { var fileBytes; if (contentType == 'image' && size > 10240) { fileBytes = - await WidgetUtil.getCompressImg(path, quality: 20, percentage: 60); + await WidgetUtil.getCompressImg(path, quality: 60, percentage: 60); } else { fileBytes = imgfile.readAsBytesSync(); } @@ -369,28 +369,6 @@ class HttpUtil { } } - getFirstProgram() async { - Map data = { - "userId": UserData().basicInfo.userId, - "visitUserId": UserData().basicInfo.userId, - "type": 1, - }; - data['sign'] = TokenMgr().getSign(data); - data['page'] = 1; - data['rows'] = 1; - Response res = await HttpUtil().post('station/gain/program', data: data); - - if (res == null) { - print('请求异常'); - return; - } - var resData = res.data; - if (resData['code'] == 0) { - UserData().isCanProgram = - resData['data'] == null || resData['data'][0]['Status'] == 1; - } - } - Future getTranslateState(int sessionId) async { Map data = { "userId": UserData().basicInfo.userId, @@ -553,7 +531,6 @@ class HttpUtil { MessageMgr().emit('update_system'); saveAotuLoginKey(resData); - getFirstProgram(); initLocation(); } @@ -1380,8 +1357,7 @@ class HttpUtil { ChatDataMgr().updateMsgState(msgModel.sessionId, msgModel.time, msgModel.channelType, msgModel.state); return true; - }else{ - + } else { showToast(resData['msg']); } diff --git a/lib/utils/PicSwiper.dart b/lib/utils/PicSwiper.dart index 1e66570..cca8501 100644 --- a/lib/utils/PicSwiper.dart +++ b/lib/utils/PicSwiper.dart @@ -328,7 +328,7 @@ class _PicSwiperState extends State } return GestureConfig( inPageView: true, - initialScale: initialScale, + //initialScale: initialScale, maxScale: max(initialScale, 5.0), initialAlignment: InitialAlignment.topCenter, animationMaxScale: max(initialScale, 5.0), @@ -393,7 +393,7 @@ class _PicSwiperState extends State } return GestureConfig( inPageView: true, - initialScale: initialScale, + //initialScale: initialScale, maxScale: max(initialScale, 5.0), initialAlignment: InitialAlignment.topCenter, animationMaxScale: max(initialScale, 5.0),