diff --git a/assets/images/empty.png b/assets/images/empty.png deleted file mode 100644 index 4511838..0000000 Binary files a/assets/images/empty.png and /dev/null differ diff --git a/assets/images/empty/emptyImage.png b/assets/images/empty/emptyImage.png new file mode 100644 index 0000000..b367bfe Binary files /dev/null and b/assets/images/empty/emptyImage.png differ diff --git a/assets/images/empty/im_emptyIcon_1.png b/assets/images/empty/im_emptyIcon_1.png new file mode 100644 index 0000000..50f3c9c Binary files /dev/null and b/assets/images/empty/im_emptyIcon_1.png differ diff --git a/assets/images/empty/im_emptyIcon_2.png b/assets/images/empty/im_emptyIcon_2.png new file mode 100644 index 0000000..745a3b8 Binary files /dev/null and b/assets/images/empty/im_emptyIcon_2.png differ diff --git a/assets/images/empty/im_emptyIcon_3.png b/assets/images/empty/im_emptyIcon_3.png new file mode 100644 index 0000000..308aad4 Binary files /dev/null and b/assets/images/empty/im_emptyIcon_3.png differ diff --git a/lib/routes/contact_routes.dart b/lib/routes/contact_routes.dart index fb2dbb5..492306f 100644 --- a/lib/routes/contact_routes.dart +++ b/lib/routes/contact_routes.dart @@ -5,6 +5,8 @@ import 'package:chat/views/contact/firend/recommend/friend_page.dart'; import 'package:chat/views/contact/firend/recommend/group_page.dart'; import 'package:chat/views/contact/firend/recommend/index_page.dart'; import 'package:chat/views/contact/firend/remark/index_page.dart'; +import 'package:chat/views/contact/firend/request/apply_page.dart'; +import 'package:chat/views/contact/firend/request/index_page.dart'; import 'package:chat/views/contact/firend/search/index_page.dart'; import 'package:chat/views/contact/group/create/index_page.dart'; import 'package:chat/views/contact/group/index_page.dart'; @@ -22,7 +24,7 @@ abstract class ContactRoutes { static const String friendProfile = '/contact/friend/profile'; static const String friendProfileMore = '/contact/friend/profile/more'; static const String friendRemark = '/contact/friend/remark'; - static const String friendApply = '/contact/friend/profile'; + static const String friendRequestApply = '/contact/friend/request/apply'; static const String friendRecommend = '/contact/friend/recommend'; static const String friendRecommendFriend = '/contact/friend/recommend/friend'; @@ -48,6 +50,16 @@ abstract class ContactRoutes { name: '/friend', page: () => const ContactGroupPage(), children: [ + GetPage( + name: '/request', + page: () => const ContactFriendRequestPage(), + children: [ + GetPage( + name: '/apply', + page: () => const ContactFriendRequestApplyPage(), + ), + ], + ), GetPage( name: '/search', page: () => const ContactFriendSearchPage(), diff --git a/lib/routes/conversation_routes.dart b/lib/routes/conversation_routes.dart index 76d6c23..2ad8d3d 100644 --- a/lib/routes/conversation_routes.dart +++ b/lib/routes/conversation_routes.dart @@ -1,5 +1,7 @@ import 'package:chat/middleware/auth_middleware.dart'; import 'package:chat/views/conversation/index_page.dart'; +import 'package:chat/views/conversation/info/group_page.dart'; +import 'package:chat/views/conversation/info/private_page.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -23,11 +25,11 @@ abstract class ConversationRoutes { children: [ GetPage( name: '/private', - page: () => Container(), + page: () => const ConversationInfoPrivatePage(), ), GetPage( name: '/group', - page: () => Container(), + page: () => const ConversationInfoGroupPage(), ), ], ), diff --git a/lib/services/auth_service.dart b/lib/services/auth_service.dart index 10b5dc7..1ab152a 100644 --- a/lib/services/auth_service.dart +++ b/lib/services/auth_service.dart @@ -1,6 +1,7 @@ import 'package:chat/models/user_info_model.dart'; import 'package:chat/providers/auth_provider.dart'; import 'package:chat/routes/auth_routes.dart'; +import 'package:chat/services/tim_service.dart'; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:tencent_im_sdk_plugin/tencent_im_sdk_plugin.dart'; @@ -27,6 +28,7 @@ class AuthService extends GetxService { String get _userToken => _box.read('userToken') ?? ''; Map get _userInfo => _box.read('userInfo') ?? {}; + /// 用户信息,这个数据,在更新用户资料的时候,也应该更新 Rx userInfo = UserInfoModel.empty().obs; @override @@ -43,6 +45,7 @@ class AuthService extends GetxService { } Future login(String address) async { + address = '12dUut3dG5xWi6JPDMjSSK6s2JPcfeKYL1'; var result = await AuthProvider.login(address); if (result != null) { @@ -58,6 +61,9 @@ class AuthService extends GetxService { isLogin.value = true; + /// 登录IM + TimService.to.initSdk(); + return true; } else { return false; @@ -74,6 +80,8 @@ class AuthService extends GetxService { userId = ''; userToken = ''; + TimService.to.instance.logout(); + userInfo.value = UserInfoModel.empty(); isLogin.value = false; Get.offAllNamed(AuthRoutes.index); diff --git a/lib/services/tim_service.dart b/lib/services/tim_service.dart index 6570deb..10d66e3 100644 --- a/lib/services/tim_service.dart +++ b/lib/services/tim_service.dart @@ -28,6 +28,7 @@ import 'package:tencent_im_sdk_plugin/models/v2_tim_message.dart'; import 'package:tencent_im_sdk_plugin/models/v2_tim_message_receipt.dart'; import 'package:tencent_im_sdk_plugin/models/v2_tim_topic_info.dart'; import 'package:tencent_im_sdk_plugin/models/v2_tim_user_full_info.dart'; +import 'package:tencent_im_sdk_plugin/models/v2_tim_user_status.dart'; import 'package:tencent_im_sdk_plugin/tencent_im_sdk_plugin.dart'; import 'package:vibration/vibration.dart'; @@ -42,7 +43,7 @@ class TimService extends GetxService { return TencentImSDKPlugin.v2TIMManager; } - int sdkAppID = 1400752974; + int sdkAppID = 1400754674; String get _userSig => AuthService.to.userSig; @@ -79,15 +80,21 @@ class TimService extends GetxService { V2TimUserFullInfo info, ) {}, onUserSigExpired: () {}, + onUserStatusChanged: (List userStatusList) {}, + onLog: (int logLevel, String logContent) {}, ), ); /// 登录 - await instance.login( + var loginResult = await instance.login( userID: _userId, userSig: _userSig, ); + if (loginResult.code != 0) { + UiTools.toast(loginResult.desc); + } + Get.put(TimConversationService()); Get.put(TimFriendService()); Get.put(TimGroupService()); diff --git a/lib/views/contact/firend/profile/index_page.dart b/lib/views/contact/firend/profile/index_page.dart index 7c08020..fc973bc 100644 --- a/lib/views/contact/firend/profile/index_page.dart +++ b/lib/views/contact/firend/profile/index_page.dart @@ -2,6 +2,7 @@ import 'package:chat/configs/app_colors.dart'; import 'package:chat/controllers/private_controller.dart'; import 'package:chat/routes/contact_routes.dart'; import 'package:chat/routes/conversation_routes.dart'; +import 'package:chat/routes/moments_routes.dart'; import 'package:chat/services/tim/conversation_service.dart'; import 'package:chat/utils/im_tools.dart'; import 'package:chat/views/home/widgets/action_button.dart'; @@ -75,18 +76,18 @@ class ContactFriendProfilePage extends StatelessWidget { ); }, ), - // const SizedBox(height: 8), - // ActionItem( - // '他的动态', - // onTap: () { - // Get.toNamed( - // MomentsRoutes.user, - // arguments: { - // 'userId': _.currentFriend.value.userID, - // }, - // ); - // }, - // ), + const SizedBox(height: 8), + ActionItem( + '他的动态', + onTap: () { + Get.toNamed( + MomentsRoutes.user, + arguments: { + 'userId': _.currentFriend.value.userID, + }, + ); + }, + ), const SizedBox(height: 8), Visibility( visible: !_.currentFriend.value.isFriend, @@ -94,7 +95,7 @@ class ContactFriendProfilePage extends StatelessWidget { '添加到通讯录', onTap: () { Get.toNamed( - ContactRoutes.friendApply, + ContactRoutes.friendRequestApply, arguments: { 'userID': _.currentFriend.value.userID, }, diff --git a/lib/views/contact/firend/request/apply_page.dart b/lib/views/contact/firend/request/apply_page.dart index 9c15647..62b6b84 100644 --- a/lib/views/contact/firend/request/apply_page.dart +++ b/lib/views/contact/firend/request/apply_page.dart @@ -1,4 +1,5 @@ import 'package:chat/configs/app_colors.dart'; +import 'package:chat/services/auth_service.dart'; import 'package:chat/services/tim/friend_service.dart'; import 'package:chat/utils/ui_tools.dart'; import 'package:chat/widgets/custom_primary_button.dart'; @@ -26,7 +27,7 @@ class _ContactFriendRequestApplyPageState super.initState(); userID = Get.arguments['userID']; - _wordingController.text = '我是 '; + _wordingController.text = '我是 ${AuthService.to.userInfo.value.nickname}'; } @override diff --git a/lib/views/contact/firend/request/index_page.dart b/lib/views/contact/firend/request/index_page.dart index d9e9586..dc14cf5 100644 --- a/lib/views/contact/firend/request/index_page.dart +++ b/lib/views/contact/firend/request/index_page.dart @@ -76,7 +76,7 @@ class _ImFriendRequestState extends State { ); } Get.toNamed( - ContactRoutes.friendApply, + ContactRoutes.friendRequestApply, arguments: { 'userID': user.userID, }, diff --git a/lib/views/user/index/user_page.dart b/lib/views/user/index/user_page.dart index 0ed503a..04f911a 100644 --- a/lib/views/user/index/user_page.dart +++ b/lib/views/user/index/user_page.dart @@ -1,6 +1,5 @@ import 'package:chat/routes/user_routes.dart'; -import 'package:chat/services/auth_service.dart'; -import 'package:chat/widgets/custom_avatar.dart'; +import 'package:chat/views/user/index/widgets/user_top_bar.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -18,34 +17,8 @@ class _UserPageState extends State { child: Scaffold( body: Column( children: [ - GetX(builder: (_) { - return Row( - children: [ - CustomAvatar( - _.userInfo.value.avatar, - size: 72, - ), - Column( - children: [ - Text(_.userInfo.value.nickname ?? ''), - Text('${_.userInfo.value.address}'), - ], - ), - Expanded(child: Container()), - InkWell( - onTap: () { - Get.toNamed(UserRoutes.qrCode); - }, - child: Row( - children: const [ - Icon(Icons.qr_code), - Icon(Icons.arrow_forward_ios), - ], - ), - ), - ], - ); - }), + const UserTopBar(), + const SizedBox(height: 8), ListTile( onTap: () { Get.toNamed(UserRoutes.share); diff --git a/lib/views/user/index/widgets/user_top_bar.dart b/lib/views/user/index/widgets/user_top_bar.dart new file mode 100644 index 0000000..d675eea --- /dev/null +++ b/lib/views/user/index/widgets/user_top_bar.dart @@ -0,0 +1,72 @@ +import 'package:chat/configs/app_colors.dart'; +import 'package:chat/routes/user_routes.dart'; +import 'package:chat/services/auth_service.dart'; +import 'package:chat/utils/convert.dart'; +import 'package:chat/widgets/custom_avatar.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class UserTopBar extends StatelessWidget { + const UserTopBar({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + color: AppColors.white, + padding: const EdgeInsets.only( + left: 24, + top: 48, + right: 24, + bottom: 24, + ), + height: 64 + 48 + 24, + child: GetX(builder: (_) { + return Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + CustomAvatar( + _.userInfo.value.avatar, + size: 64, + ), + const SizedBox(width: 16), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + _.userInfo.value.nickname ?? '', + style: const TextStyle( + fontSize: 22, + fontWeight: FontWeight.w400, + ), + ), + Text(Convert.hideCenterStr(_.userInfo.value.address ?? '')), + ], + ), + Expanded(child: Container()), + InkWell( + onTap: () { + Get.toNamed(UserRoutes.qrCode); + }, + child: Row( + children: const [ + Icon( + Icons.qr_code, + size: 18, + color: AppColors.unactive, + ), + SizedBox(width: 8), + Icon( + Icons.arrow_forward_ios, + size: 16, + color: AppColors.unactive, + ), + ], + ), + ), + ], + ); + }), + ); + } +} diff --git a/lib/widgets/custom_easy_refresh.dart b/lib/widgets/custom_easy_refresh.dart index a50f2df..96f38dd 100644 --- a/lib/widgets/custom_easy_refresh.dart +++ b/lib/widgets/custom_easy_refresh.dart @@ -39,7 +39,7 @@ class CustomEasyRefresh { crossAxisAlignment: CrossAxisAlignment.center, children: [ Image.asset( - 'assets/images/empty.png', + 'assets/images/empty/im_emptyIcon_2.png', width: size, ), Text( diff --git a/pubspec.yaml b/pubspec.yaml index 908aa60..1c1bc79 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -59,4 +59,5 @@ flutter: assets: - assets/icons/ - assets/images/ + - assets/images/empty/ - assets/transits/