IM修改
This commit is contained in:
parent
26a9982e9b
commit
9255edfe38
@ -2,6 +2,10 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>NSLocationWhenInUseUsageDescription</key>
|
||||
<string>应用想要访问您的位置,用于设置个人资料</string>
|
||||
<key>NSLocationAlwaysUsageDescription</key>
|
||||
<string>应用想要访问您的位置,用于设置个人资料</string>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>应用想要访问您的麦克风,用于发送语音</string>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:circle_app/app/chat/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_text_elem.dart';
|
||||
import 'package:circle_app/app/chat/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_merger_message_elem.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
@ -175,7 +176,7 @@ class TIMToolTipsConfig {
|
||||
this.additionalItemBuilder});
|
||||
}
|
||||
|
||||
class TIMUIKitHistoryMessageListItem extends StatefulWidget {
|
||||
class TIMHistoryMessageListItem extends StatefulWidget {
|
||||
/// message instance
|
||||
final V2TimMessage message;
|
||||
|
||||
@ -261,7 +262,7 @@ class TIMUIKitHistoryMessageListItem extends StatefulWidget {
|
||||
|
||||
final List customEmojiStickerList;
|
||||
|
||||
const TIMUIKitHistoryMessageListItem(
|
||||
const TIMHistoryMessageListItem(
|
||||
{Key? key,
|
||||
required this.message,
|
||||
@Deprecated("Nickname will not show in one-to-one chat, if you tend to control it in group chat, please use `isShowSelfNameInGroup` and `isShowOthersNameInGroup` from `config: TIMUIKitChatConfig` instead")
|
||||
@ -332,7 +333,7 @@ class TipsActionItem extends TIMUIKitStatelessWidget {
|
||||
}
|
||||
|
||||
class _TIMUIKItHistoryMessageListItemState
|
||||
extends TIMUIKitState<TIMUIKitHistoryMessageListItem>
|
||||
extends TIMUIKitState<TIMHistoryMessageListItem>
|
||||
with TickerProviderStateMixin {
|
||||
SuperTooltip? tooltip;
|
||||
|
||||
@ -459,7 +460,7 @@ class _TIMUIKItHistoryMessageListItemState
|
||||
clearJump,
|
||||
)!;
|
||||
}
|
||||
return TIMUIKitTextElem(
|
||||
return TIMTextElem(
|
||||
chatModel: model,
|
||||
message: messageItem,
|
||||
isFromSelf: messageItem.isSelf ?? true,
|
||||
|
||||
@ -17,6 +17,8 @@ import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKItMessageLi
|
||||
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/tim_uikit_chat_config.dart';
|
||||
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart';
|
||||
|
||||
import 'tim_uikit_chat_history_message_list_item.dart';
|
||||
|
||||
enum LoadingPlace {
|
||||
none,
|
||||
top,
|
||||
@ -154,7 +156,7 @@ class _TIMUIKitHistoryMessageListContainerState
|
||||
groupAtInfoList: widget.groupAtInfoList,
|
||||
mainHistoryListConfig: widget.mainHistoryListConfig,
|
||||
itemBuilder: (context, message) {
|
||||
return TIMUIKitHistoryMessageListItem(
|
||||
return TIMHistoryMessageListItem(
|
||||
textFieldController: widget.textFieldController,
|
||||
userAvatarBuilder: widget.userAvatarBuilder,
|
||||
customEmojiStickerList: widget.customEmojiStickerList,
|
||||
|
||||
@ -13,7 +13,7 @@ import 'package:tencent_cloud_chat_uikit/ui/widgets/link_preview/link_preview_en
|
||||
import 'package:tencent_cloud_chat_uikit/ui/widgets/link_preview/widgets/link_preview.dart';
|
||||
import 'TIMUIKitMessageReaction/tim_uikit_message_reaction_show_panel.dart';
|
||||
|
||||
class TIMUIKitTextElem extends StatefulWidget {
|
||||
class TIMTextElem extends StatefulWidget {
|
||||
final V2TimMessage message;
|
||||
final bool isFromSelf;
|
||||
final bool isShowJump;
|
||||
@ -27,7 +27,7 @@ class TIMUIKitTextElem extends StatefulWidget {
|
||||
final bool isUseDefaultEmoji;
|
||||
final List customEmojiStickerList;
|
||||
|
||||
const TIMUIKitTextElem(
|
||||
const TIMTextElem(
|
||||
{Key? key,
|
||||
required this.message,
|
||||
required this.isFromSelf,
|
||||
@ -44,10 +44,10 @@ class TIMUIKitTextElem extends StatefulWidget {
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
State<StatefulWidget> createState() => _TIMUIKitTextElemState();
|
||||
State<StatefulWidget> createState() => _TIMTextElemState();
|
||||
}
|
||||
|
||||
class _TIMUIKitTextElemState extends TIMUIKitState<TIMUIKitTextElem> {
|
||||
class _TIMTextElemState extends TIMUIKitState<TIMTextElem> {
|
||||
bool isShowJumpState = false;
|
||||
bool isShining = false;
|
||||
|
||||
@ -59,7 +59,7 @@ class _TIMUIKitTextElemState extends TIMUIKitState<TIMUIKitTextElem> {
|
||||
}
|
||||
|
||||
@override
|
||||
void didUpdateWidget(TIMUIKitTextElem oldWidget) {
|
||||
void didUpdateWidget(TIMTextElem oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
if (oldWidget.message.msgID == null && widget.message.msgID != null) {
|
||||
_getLinkPreview();
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:circle_app/app/chat/TIMUIKitChat/tim_uikit_chat.dart';
|
||||
import 'package:circle_app/components/my_app_bar.dart';
|
||||
import 'package:circle_app/util/util.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
@ -60,12 +62,7 @@ class ChatPage extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return TIMChat(
|
||||
conversation: logic.selectedConversation ??
|
||||
V2TimConversation(
|
||||
conversationID: "c2c_10040818",
|
||||
userID: "10040818",
|
||||
showName: "Test Chat",
|
||||
type: 1),
|
||||
conversation: logic.selectedConversation!,
|
||||
customStickerPanel: renderCustomStickerPanel,
|
||||
config: const TIMUIKitChatConfig(
|
||||
// 仅供演示,非全部配置项,实际使用中,可只传和默认项不同的参数,无需传入所有开关
|
||||
@ -83,12 +80,36 @@ class ChatPage extends StatelessWidget {
|
||||
],
|
||||
),
|
||||
customAppBar: MyAppBar(
|
||||
centerTitle: '1111',
|
||||
centerTitle: logic.selectedConversation!.showName!,
|
||||
actionWdiget: GestureDetector(
|
||||
child: Text('TA的主页',style: TextStyle(color: Color(0xFF00FFF4),fontSize:12.sp,fontWeight: FontWeight.w500),),
|
||||
),
|
||||
onPressed: () {},
|
||||
),
|
||||
userAvatarBuilder: (BuildContext context, V2TimMessage message) {
|
||||
return avatarWidget(message.faceUrl ?? 'http://qiniuyun.ikuayou.com/avatar/default/default_header.png');
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
avatarWidget(String url, {double width = 34}) {
|
||||
return GestureDetector(
|
||||
child: Stack(
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
Image.asset(
|
||||
getCircleImage('avatar_bg'),
|
||||
width: width.sp,
|
||||
),
|
||||
url.contains("http") ? ClipOval(
|
||||
child: CachedNetworkImage(
|
||||
imageUrl:url,
|
||||
width: (width - 2).sp,
|
||||
height: (width - 2).sp,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
) : Text(url,style: TextStyle(color: Color(0xffF756FF),fontSize: 12.sp),)
|
||||
],
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
import 'package:circle_app/app/circle/logic.dart';
|
||||
import 'package:circle_app/app/minefragment/logic.dart';
|
||||
import 'package:circle_app/main.dart';
|
||||
import 'package:circle_app/network/api.dart';
|
||||
import 'package:circle_app/network/dio_manager.dart';
|
||||
import 'package:circle_app/util/util.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@ -24,12 +27,26 @@ class HomeLogic extends GetxController {
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
getIMData();
|
||||
|
||||
tabs.add(MsgPage());
|
||||
tabs.add(CirclePage());
|
||||
tabs.add(MinefragmentPage());
|
||||
}
|
||||
|
||||
|
||||
void getIMData() async {
|
||||
// _coreInstance.;
|
||||
if (!coreInstance.isLoginSuccess) {
|
||||
var data = await DioManager.instance
|
||||
.get(url: Api.getIMInfo);
|
||||
if (data['code'] == 200) {
|
||||
loginIM(data['data']['account_id'].toString(), data['data']['user_sig']);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
String getInfo () {
|
||||
return getBaseImage('image');
|
||||
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import 'package:circle_app/app/circle/logic.dart';
|
||||
import 'package:circle_app/router/app_routers.dart';
|
||||
import 'package:circle_app/util/util.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@ -30,9 +31,9 @@ class MsgPage extends StatelessWidget {
|
||||
return Column(
|
||||
children: [
|
||||
navigatorItem(),
|
||||
tipWidget(),
|
||||
reconmandWidget(),
|
||||
Text(controller.state.msg),
|
||||
// tipWidget(),
|
||||
// reconmandWidget(),
|
||||
// Text(controller.state.msg),
|
||||
Expanded(child: msgWdiget(context))
|
||||
],
|
||||
);
|
||||
@ -42,6 +43,11 @@ class MsgPage extends StatelessWidget {
|
||||
}
|
||||
|
||||
navigatorItem() {
|
||||
var logic = Get.find<CircleLogic>();
|
||||
String count = '0';
|
||||
if (logic != null) {
|
||||
count = (logic.statistics?['like_me_count'] ?? 0).toString();
|
||||
}
|
||||
return Container(
|
||||
width: Get.width,
|
||||
padding: EdgeInsets.only(left: 18.sp, right: 18.sp),
|
||||
@ -52,11 +58,39 @@ class MsgPage extends StatelessWidget {
|
||||
Positioned(
|
||||
left: 0,
|
||||
child: GestureDetector(
|
||||
child: Image.asset(
|
||||
getMsgImage('msg_love'),
|
||||
width: 30.sp,
|
||||
),
|
||||
)),
|
||||
onTap: () {
|
||||
Get.toNamed(AppRoutes.FriendsActivity,arguments: '1');
|
||||
},
|
||||
child: Stack(
|
||||
children: [
|
||||
Container(width: count .length > 2 ? 45.sp : count .length > 1 ? 38.sp : 35.sp,height: 30.sp,),
|
||||
Image.asset(
|
||||
getMsgImage('msg_love'),
|
||||
width: 30.sp,
|
||||
),
|
||||
|
||||
int.parse(count) > 0 ? Positioned(
|
||||
right:0,
|
||||
child: Container(
|
||||
padding: EdgeInsets.only(left: 5.sp,right: 5.sp),
|
||||
height: 14.sp,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(7.sp),
|
||||
gradient:const LinearGradient(colors: [
|
||||
Color(0xFFC343F9),
|
||||
Color(0xFFFB34B2),
|
||||
],
|
||||
)
|
||||
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: Text(
|
||||
int.parse(count) > 99 ? '99+' : count,
|
||||
style: TextStyle(color: Colors.white,fontSize: 10.sp,fontWeight: FontWeight.w500),
|
||||
),
|
||||
)) : Container(),
|
||||
],
|
||||
))),
|
||||
ShaderMask(
|
||||
shaderCallback: (Rect bounds) {
|
||||
return const LinearGradient(
|
||||
|
||||
@ -17,6 +17,7 @@ class UserinfoLogic extends GetxController {
|
||||
final UserinfoState state = UserinfoState();
|
||||
final ImagePicker _picker = ImagePicker();
|
||||
UserBean? userInfoBean = null;
|
||||
String imId = '';
|
||||
String ageMsg = "";
|
||||
var isVip = 0;
|
||||
var onLineCity = "";
|
||||
@ -45,15 +46,14 @@ class UserinfoLogic extends GetxController {
|
||||
}
|
||||
state.imaglist.clear();
|
||||
if (userId == '') {
|
||||
|
||||
isMe = true;
|
||||
var data = await DioManager.instance.get(url: Api.getUserInfo);
|
||||
var bean = BaseResponse<ResponseBean>.fromJson(
|
||||
data, (data) => ResponseBean.fromJson(data));
|
||||
if (bean.isSuccess()) {
|
||||
|
||||
isLikeFoMsg =
|
||||
"${bean.data.imageUrgeCount}位圈友感兴趣,其中${bean.data.likeMeCount}位已催您更新";
|
||||
|
||||
userInfoBean = bean.data.user;
|
||||
isVip = userInfoBean!.vip;
|
||||
//访问自己强制在线
|
||||
@ -79,8 +79,6 @@ class UserinfoLogic extends GetxController {
|
||||
state.imaglist.add(element);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
isMe = false;
|
||||
var data = await DioManager.instance
|
||||
@ -93,7 +91,7 @@ class UserinfoLogic extends GetxController {
|
||||
"${bean.data.imageUrgeCount}位圈友感兴趣,其中${bean.data.likeMeCount}位已催您更新";
|
||||
userInfoBean = bean.data!.user;
|
||||
isVip = userInfoBean!.vip;
|
||||
|
||||
imId = bean.data.account_id;
|
||||
onLineCity = userInfoBean!.isOnline == true ? "在线" : "离线";
|
||||
if (userInfoBean!.city != null) {
|
||||
onLineCity = "$onLineCity·${userInfoBean!.city}";
|
||||
@ -126,8 +124,6 @@ class UserinfoLogic extends GetxController {
|
||||
}
|
||||
update();
|
||||
|
||||
|
||||
|
||||
var data =
|
||||
await DioManager.instance.get(url: Api.getqiniuToken, params: {});
|
||||
var bean = BaseResponse<QnTokenData>.fromJson(
|
||||
@ -154,7 +150,7 @@ class UserinfoLogic extends GetxController {
|
||||
var bean = BaseResponse<String>.fromJson(data, (data) => data);
|
||||
if (bean.code == 200) {
|
||||
state.imaglist.removeAt(index);
|
||||
// Navigator.pop(Get.context!);
|
||||
// Navigator.pop(Get.context!);
|
||||
update();
|
||||
}
|
||||
}
|
||||
@ -305,15 +301,18 @@ class ResponseBean {
|
||||
int likeMeCount;
|
||||
int imageUrgeCount;
|
||||
bool is_follow;
|
||||
String account_id;
|
||||
|
||||
ResponseBean(
|
||||
{required this.user,
|
||||
required this.likeMeCount,
|
||||
required this.imageUrgeCount,
|
||||
required this.account_id,
|
||||
required this.is_follow});
|
||||
|
||||
factory ResponseBean.fromJson(Map<String, dynamic> json) {
|
||||
return ResponseBean(
|
||||
account_id: json['account_id'],
|
||||
user: UserBean.fromJson(json['user']),
|
||||
likeMeCount: json['like_me_count'],
|
||||
imageUrgeCount: json['image_urge_count'],
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:circle_app/app/userinfo/widgets/home_call_out.dart';
|
||||
import 'package:circle_app/main.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
@ -137,7 +138,10 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
showToast("私聊");
|
||||
if (logic.userInfoBean != null) {
|
||||
pushChatPage(logic.imId, logic.userInfoBean!.nickname);
|
||||
}
|
||||
|
||||
},
|
||||
child: Container(
|
||||
width: 130.sp,
|
||||
|
||||
@ -13,10 +13,35 @@ import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
|
||||
import 'app/splash/view.dart';
|
||||
|
||||
|
||||
final CoreServicesImpl coreInstance = TIMUIKitCore.getInstance();
|
||||
|
||||
void main() {
|
||||
runApp(const MyApp());
|
||||
}
|
||||
|
||||
|
||||
//登录IM
|
||||
loginIM(String userId,String sig) async {
|
||||
var info = await coreInstance.login(
|
||||
userID: userId,
|
||||
userSig:sig,);
|
||||
}
|
||||
|
||||
//退出IM
|
||||
logoutIM() async {
|
||||
await coreInstance.logout();
|
||||
}
|
||||
|
||||
//跳转发消息页面
|
||||
pushChatPage(String imId,String userName) {
|
||||
var con = V2TimConversation(
|
||||
conversationID: "c2c_$imId",
|
||||
userID: imId,
|
||||
showName: userName,
|
||||
type: 1);
|
||||
Get.toNamed(AppRoutes.Chat,arguments: con);
|
||||
}
|
||||
|
||||
class MyApp extends StatefulWidget {
|
||||
const MyApp({super.key});
|
||||
|
||||
@ -24,12 +49,14 @@ class MyApp extends StatefulWidget {
|
||||
State<MyApp> createState() => _MyAppState();
|
||||
}
|
||||
|
||||
|
||||
|
||||
class _MyAppState extends State<MyApp> {
|
||||
// This widget is the root of your application.
|
||||
|
||||
final List<String> _guideList = ['bg', 'home_back'];
|
||||
|
||||
final CoreServicesImpl _coreInstance = TIMUIKitCore.getInstance();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
initIM();
|
||||
@ -38,9 +65,9 @@ class _MyAppState extends State<MyApp> {
|
||||
}
|
||||
|
||||
initIM() {
|
||||
_coreInstance.init(
|
||||
coreInstance.init(
|
||||
sdkAppID:
|
||||
1400793496, // Replace 0 with the SDKAppID of your IM application when integrating
|
||||
1400799631, // Replace 0 with the SDKAppID of your IM application when integrating
|
||||
// language: LanguageEnum.en, // 界面语言配置,若不配置,则跟随系统语言
|
||||
loglevel: LogLevelEnum.V2TIM_LOG_DEBUG,
|
||||
onTUIKitCallbackListener: (TIMCallback callbackValue) {
|
||||
@ -73,7 +100,8 @@ class _MyAppState extends State<MyApp> {
|
||||
}
|
||||
}, // [建议配置,详见此部分](https://cloud.tencent.com/document/product/269/70746#callback)
|
||||
listener: V2TimSDKListener(onConnectSuccess: () {
|
||||
loginIM();
|
||||
print('IM登录成功');
|
||||
// loginIM();
|
||||
}));
|
||||
}
|
||||
|
||||
@ -86,13 +114,6 @@ class _MyAppState extends State<MyApp> {
|
||||
return AssetImage(getBaseImage(image));
|
||||
}
|
||||
|
||||
loginIM() async {
|
||||
var info = await _coreInstance.login(
|
||||
userID: '123456',
|
||||
userSig:
|
||||
'eJwtzEELgjAYxvHvsmshc25rCl40OlRIYaVX0RUvrTFsDFn03TP1*Pwe*H-Q5VgGTvYoQSTAaD1t6KS2cIeJQxJRxpfn3T0bY6BDSUgx3sQRjfn8yMFAL0dnjBGM8awWXn-jggtBY0qXCjzGcJ7tT4eVrHa6aG9FWfsms*rqK3cW2hulHKkHtzU2L9sUfX-YTTG5');
|
||||
print(info);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
@ -165,8 +165,8 @@ class Api {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//获取IM配置信息
|
||||
static const getIMInfo = 'msg-service/im/token';
|
||||
|
||||
//发现页统计
|
||||
static const getInterestsCount = 'user-service/my/statistics';
|
||||
|
||||
Loading…
Reference in New Issue
Block a user