拉黑关系的相关功能

This commit is contained in:
YangYuhao 2023-08-07 15:49:10 +08:00
parent 117d5a8682
commit 55060f137d
25 changed files with 733 additions and 240 deletions

View File

@ -66,10 +66,10 @@ android {
targetSdkVersion flutter.targetSdkVersion targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
versionName flutterVersionName versionName flutterVersionName
ndk { // ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a' // abiFilters 'armeabi-v7a', 'arm64-v8a'
ldLibs "log" // ldLibs "log"
} // }
} }
buildTypes { buildTypes {

View File

@ -5,27 +5,27 @@
android:src="@mipmap/launch_back" /> android:src="@mipmap/launch_back" />
</item> </item>
<!-- <item--> <item
<!-- android:top="141dp"--> android:top="141dp"
<!-- android:left="37dp"--> android:left="37dp"
<!-- android:width="100dp"--> android:width="65dp"
<!-- android:height="100dp"--> android:height="65dp"
<!-- >--> >
<!-- <bitmap--> <bitmap
<!-- android:src="@mipmap/logo" />--> android:src="@mipmap/logo" />
<!-- </item>--> </item>
<!-- <item--> <item
<!-- android:top="141dp"--> android:top="141dp"
<!-- android:left="157dp"--> android:left="114dp"
<!-- android:width="100dp"--> android:width="180dp"
<!-- android:height="100dp"--> android:height="73dp"
<!-- >--> >
<!-- <bitmap--> <bitmap
<!-- android:src="@mipmap/logo" />--> android:src="@mipmap/icon_top" />
<!-- </item>--> </item>
@ -40,15 +40,14 @@
<!-- android:src="@mipmap/logo" />--> <!-- android:src="@mipmap/logo" />-->
<!-- </item>--> <!-- </item>-->
<!-- <item--> <item
<!-- android:bottom="100dp"--> android:bottom="60dp"
<!-- android:width="100dp"-->
<!-- android:height="100dp"-->
<!-- android:gravity="bottom|center_horizontal"-->
<!-- >-->
<!-- <bitmap-->
<!-- android:src="@mipmap/logo" />--> android:gravity="bottom|center_horizontal"
<!-- </item>--> >
<bitmap
android:src="@mipmap/icon_btn" />
</item>
</layer-list> </layer-list>

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1012 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -706,7 +706,7 @@ class Call_outPage extends StatelessWidget {
// width: 339.sp, // width: 339.sp,
// padding: EdgeInsets.only(left: 17.sp, right: 17.sp), // padding: EdgeInsets.only(left: 17.sp, right: 17.sp),
// child: Text( // child: Text(
// '为打造纯净的社交环境,更好地服务大家,基于以下几方面考虑:1、平台升级为全天24小时人工审核保证用户真实避免骗子、酒托、虚假人士等扰乱平台 ;2、杜绝未入圈用户随意骚扰或影响已入圈的跨友;3、谢绝只会白嫖的猎奇人士。', // '为打造纯净的社交环境,更好地服务大家,基于以下几方面考虑:1、平台升级为全天24小时人工审核保证用户真实避免骗子、酒托、虚假人士等扰乱平台 ;2、杜绝未入圈用户随意骚扰或影响已入圈的;3、谢绝只会白嫖的猎奇人士。',
// style: TextStyle( // style: TextStyle(
// color: Color.fromRGBO(247, 250, 250, 0.8), // color: Color.fromRGBO(247, 250, 250, 0.8),
// fontSize: 12.sp)), // fontSize: 12.sp)),

View File

@ -8,6 +8,7 @@ import 'package:circle_app/network/dio_manager.dart';
import 'package:circle_app/util/util.dart'; import 'package:circle_app/util/util.dart';
import 'package:diff_match_patch/diff_match_patch.dart'; import 'package:diff_match_patch/diff_match_patch.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_setting_model.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_setting_model.dart';
import 'package:tencent_cloud_chat_uikit/data_services/friendShip/friendship_services.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart';
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -27,6 +28,8 @@ import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField
import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart';
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/wide.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/wide.dart';
import '../../../../util/eventBus.dart';
enum MuteStatus { none, me, all } enum MuteStatus { none, me, all }
GlobalKey<_InputTextFieldState> myInputTextFieldState = GlobalKey(); GlobalKey<_InputTextFieldState> myInputTextFieldState = GlobalKey();
@ -257,8 +260,15 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
return userList; return userList;
} }
bool isSendLoging = false;
onSubmitted() async { onSubmitted() async {
if(isSendLoging){
return;
}
if (isBlack) {
showToast("您已将对方拉黑,请移除黑名单后在发送消息~");
return;
}
lastText = ""; lastText = "";
String text = textEditingController.text.trim(); String text = textEditingController.text.trim();
final convType = widget.conversationType; final convType = widget.conversationType;
@ -302,6 +312,7 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
} }
if (text.isNotEmpty && text != zeroWidthSpace) { if (text.isNotEmpty && text != zeroWidthSpace) {
if (widget.model.repliedMessage != null) { if (widget.model.repliedMessage != null) {
MessageUtils.handleMessageError( MessageUtils.handleMessageError(
widget.model.sendReplyMessage( widget.model.sendReplyMessage(
@ -317,14 +328,14 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
convID: widget.conversationID, convID: widget.conversationID,
atUserList: getUserIdFromMemberInfoMap()); atUserList: getUserIdFromMemberInfoMap());
} else { } else {
var data = isSendLoging = true;
await DioManager.instance.post( var data = await DioManager.instance
url: Api.shieldWordCheck, params: {'text': text, 'type': 2}); .post(url: Api.shieldWordCheck, params: {'text': text, 'type': 2});
isSendLoging = false;
if (data['data']['code'] == 10000) { if (data['data']['code'] == 10000) {
List words = data['data']['words']; List words = data['data']['words'];
if (words.isNotEmpty) { if (words.isNotEmpty) {
for(int i = 0; i < words.length; i++) { for (int i = 0; i < words.length; i++) {
text = text.replaceAll(words[i], '*'); text = text.replaceAll(words[i], '*');
} }
} }
@ -625,6 +636,7 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
checkHintText(); checkHintText();
if (PlatformUtils().isWeb || PlatformUtils().isDesktop) { if (PlatformUtils().isWeb || PlatformUtils().isDesktop) {
focusNode = FocusNode( focusNode = FocusNode(
@ -713,7 +725,40 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
(appLocale == AppLocale.zhHans || appLocale == AppLocale.zhHant) (appLocale == AppLocale.zhHans || appLocale == AppLocale.zhHant)
? 'zh' ? 'zh'
: 'en'; : 'en';
if(null==commentBlackEvent){
commentBlackEvent = EventBusManager.on<CommentBlackEvent>().listen((event) {
if(event.userId == widget.currentConversation.userID!){
isBlack = event.isBlack;
}
});
getBlack();
}
} }
StreamSubscription? commentBlackEvent =null;
bool isBlack = false;
getBlack() async {
final FriendshipServices _friendshipServices =
serviceLocator<FriendshipServices>();
List<V2TimFriendInfo>? blacklist = await _friendshipServices.getBlackList();
if (blacklist != null) {
isBlack = false;
blacklist.forEach((element) {
print(element.userProfile!.nickName.toString());
if (element.userID == widget.currentConversation.userID!) {
isBlack = true;
}
});
await Future.delayed(Duration(milliseconds: 500));
EventBusManager.fire(CommentBlackMoreEvent());
}
}
@override @override
void didUpdateWidget(TIMInputTextField oldWidget) { void didUpdateWidget(TIMInputTextField oldWidget) {
@ -726,6 +771,7 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
textEditingController.clear(); textEditingController.clear();
} }
} }
} }
@override @override
@ -733,6 +779,12 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
// handleSetDraftText(); // handleSetDraftText();
widget.model.removeListener(onModelChanged); widget.model.removeListener(onModelChanged);
focusNode.dispose(); focusNode.dispose();
if(null!=commentBlackEvent){
print("TIMInputTextField解绑");
EventBusManager.cancelSubscription(commentBlackEvent!);
}
super.dispose(); super.dispose();
} }
@ -840,6 +892,7 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
addStickerToText: addStickerToText, addStickerToText: addStickerToText,
customStickerPanel: widget.customStickerPanel, customStickerPanel: widget.customStickerPanel,
forbiddenText: forbiddenText, forbiddenText: forbiddenText,
onChanged: (text) async { onChanged: (text) async {
if (widget.onChanged != null) { if (widget.onChanged != null) {
widget.onChanged!(text); widget.onChanged!(text);
@ -849,6 +902,7 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
}, },
backgroundColor: widget.backgroundColor, backgroundColor: widget.backgroundColor,
morePanelConfig: widget.morePanelConfig, morePanelConfig: widget.morePanelConfig,
userId: widget.currentConversation.userID!,
repliedMessage: value, repliedMessage: value,
currentCursor: currentCursor, currentCursor: currentCursor,
hintText: hintText, hintText: hintText,
@ -915,17 +969,12 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
resetHiText(String text) async { resetHiText(String text) async {
if (!hintText!.contains('说些什么吧~') && text.isNotEmpty) { if (!hintText!.contains('说些什么吧~') && text.isNotEmpty) {
if ((widget.currentConversation.lastMessage if ((widget.currentConversation.lastMessage?.customElem ?? null) !=
?.customElem ??
null) !=
null) { null) {
if (widget.currentConversation.lastMessage if (widget.currentConversation.lastMessage?.customElem!.extension ==
?.customElem!.extension ==
'cardData') { 'cardData') {
hintText = '说些什么吧~'; hintText = '说些什么吧~';
setState(() { setState(() {});
});
} }
} else { } else {
var result = await TencentImSDKPlugin.v2TIMManager var result = await TencentImSDKPlugin.v2TIMManager
@ -936,16 +985,13 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
lastMsgID: null, lastMsgID: null,
); );
if (result.code == 0 && if (result.code == 0 && (result.data?.isNotEmpty ?? false)) {
(result.data?.isNotEmpty ?? false)) {
V2TimMessage msg = result.data!.last!; V2TimMessage msg = result.data!.last!;
if (msg.customElem != null) { if (msg.customElem != null) {
if (msg.customElem!.extension == 'cardData') { if (msg.customElem!.extension == 'cardData') {
hintText = '说些什么吧~'; hintText = '说些什么吧~';
setState(() { setState(() {});
});
} }
} }
} }
@ -962,9 +1008,7 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
Map info = jsonDecode( Map info = jsonDecode(
widget.currentConversation.lastMessage!.customElem!.data!); widget.currentConversation.lastMessage!.customElem!.data!);
hintText = info['guide_text']; hintText = info['guide_text'];
setState(() { setState(() {});
});
} }
} else if (widget.currentConversation.lastMessage == null) { } else if (widget.currentConversation.lastMessage == null) {
getConverstationLastInfo(); getConverstationLastInfo();

View File

@ -14,6 +14,7 @@ import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_setting_model.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_setting_model.dart';
import 'package:tencent_cloud_chat_uikit/data_services/friendShip/friendship_services.dart';
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
import 'package:tencent_cloud_chat_uikit/ui/utils/message.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/message.dart';
@ -26,6 +27,8 @@ import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField
import 'package:tencent_extended_text_field/extended_text_field.dart'; import 'package:tencent_extended_text_field/extended_text_field.dart';
import 'package:tencent_keyboard_visibility/tencent_keyboard_visibility.dart'; import 'package:tencent_keyboard_visibility/tencent_keyboard_visibility.dart';
import '../../../../../util/eventBus.dart';
GlobalKey<_TIMTextFieldLayoutNarrowState> TIMnarrowTextFieldKey = GlobalKey(); GlobalKey<_TIMTextFieldLayoutNarrowState> TIMnarrowTextFieldKey = GlobalKey();
class TIMTextFieldLayoutNarrow extends StatefulWidget { class TIMTextFieldLayoutNarrow extends StatefulWidget {
@ -72,6 +75,8 @@ class TIMTextFieldLayoutNarrow extends StatefulWidget {
/// hint text for textField widget /// hint text for textField widget
final String? hintText; final String? hintText;
final String? userId;
final int? currentCursor; final int? currentCursor;
final ValueChanged<int?> setCurrentCursor; final ValueChanged<int?> setCurrentCursor;
@ -130,6 +135,7 @@ class TIMTextFieldLayoutNarrow extends StatefulWidget {
required this.showSendEmoji, required this.showSendEmoji,
required this.showMorePanel, required this.showMorePanel,
this.hintText, this.hintText,
this.userId,
required this.customEmojiStickerList, required this.customEmojiStickerList,
this.controller}) this.controller})
: super(key: key); : super(key: key);
@ -163,7 +169,45 @@ class _TIMTextFieldLayoutNarrowState
} }
}); });
} }
if(null==commentBlackEvent){
commentBlackEvent = EventBusManager.on<CommentBlackEvent>().listen((event) {
if(event.userId == widget.userId){
isBlack = event.isBlack;
}
});
}
getBlack();
} }
StreamSubscription? commentBlackEvent =null;
@override
void dispose() {
print("TIMTextFieldLayoutNarrow解绑");
if(null!=commentBlackEvent){
EventBusManager.cancelSubscription(commentBlackEvent!);
}
super.dispose();
}
bool isBlack = false;
getBlack() async {
final FriendshipServices _friendshipServices =
serviceLocator<FriendshipServices>();
List<V2TimFriendInfo>? blacklist = await _friendshipServices.getBlackList();
if (blacklist != null) {
isBlack = false;
blacklist.forEach((element) {
print(element.userProfile!.nickName.toString());
if (element.userID == widget.userId) {
isBlack = true;
}
});
}
}
void setSendButton() { void setSendButton() {
final value = widget.textEditingController.text; final value = widget.textEditingController.text;
@ -362,7 +406,7 @@ class _TIMTextFieldLayoutNarrowState
setKeyboardHeight ??= OptimizeUtils.debounce((height) { setKeyboardHeight ??= OptimizeUtils.debounce((height) {
settingModel.keyboardHeight = height; settingModel.keyboardHeight = height;
}, const Duration(seconds: 1)); }, const Duration(seconds: 1));
//
final debounceFunc = _debounce((value) { final debounceFunc = _debounce((value) {
if (isWebDevice() || isAndroidDevice()) { if (isWebDevice() || isAndroidDevice()) {
if (value.isEmpty && showMoreButton != true) { if (value.isEmpty && showMoreButton != true) {
@ -596,7 +640,7 @@ class _TIMTextFieldLayoutNarrowState
width: 10, width: 10,
), ),
InkWell( InkWell(
onTap: () { onTap: () async {
widget.onSubmitted(); widget.onSubmitted();
if (showKeyboard) { if (showKeyboard) {
widget.focusNode.requestFocus(); widget.focusNode.requestFocus();
@ -624,6 +668,10 @@ class _TIMTextFieldLayoutNarrowState
children: [ children: [
GestureDetector( GestureDetector(
onTap: () async { onTap: () async {
if (isBlack) {
showToast("您已将对方拉黑,请移除黑名单后在发送消息~");
return;
}
showKeyboard = showSendSoundText; showKeyboard = showSendSoundText;
if (showSendSoundText) { if (showSendSoundText) {
widget.focusNode.requestFocus(); widget.focusNode.requestFocus();
@ -659,6 +707,10 @@ class _TIMTextFieldLayoutNarrowState
), ),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
if (isBlack) {
showToast("您已将对方拉黑,请移除黑名单后在发送消息~");
return;
}
getImageFile(); getImageFile();
}, },
child: child:
@ -666,6 +718,10 @@ class _TIMTextFieldLayoutNarrowState
), ),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
if (isBlack) {
showToast("您已将对方拉黑,请移除黑名单后在发送消息~");
return;
}
getTakeImageFile(); getTakeImageFile();
}, },
child: Image.asset(getMsgImage('take_photo'), child: Image.asset(getMsgImage('take_photo'),

View File

@ -36,6 +36,7 @@ class _ChatPageState extends State<ChatPage> {
initEventBus(); initEventBus();
} }
initEventBus()async{ initEventBus()async{
EventBusManager.on<SendCoustomMessage>().listen((event) async{ EventBusManager.on<SendCoustomMessage>().listen((event) async{
V2TimValueCallback<V2TimMessage>? sendMessageRes = V2TimValueCallback<V2TimMessage>? sendMessageRes =
@ -98,8 +99,11 @@ class _ChatPageState extends State<ChatPage> {
return TIMChat( return TIMChat(
conversation: Get.arguments, conversation: Get.arguments,
customStickerPanel: renderCustomStickerPanel, customStickerPanel: renderCustomStickerPanel,
onTapAvatar :(String userId,TapDownDetails tapDownDetails){ onTapAvatar :(String userId,TapDownDetails tapDownDetails)async{
Get.toNamed(AppRoutes.UserInfoActivity,arguments: userId.toString().split('_').last); var data = await Get.toNamed(AppRoutes.UserInfoActivity,arguments: userId.toString().split('_').last);
// setState(() {
//
// });
}, },
controller : _timuiKitChatController, controller : _timuiKitChatController,
config: const TIMUIKitChatConfig( config: const TIMUIKitChatConfig(
@ -122,8 +126,9 @@ class _ChatPageState extends State<ChatPage> {
customAppBar:MyAppBar( customAppBar:MyAppBar(
centerTitle: con.showName!, centerTitle: con.showName!,
actionWdiget: GestureDetector( actionWdiget: GestureDetector(
onTap: () { onTap: () async{
Get.toNamed(AppRoutes.UserInfoActivity,arguments: con.userID.toString().split('_').last); var data = await Get.toNamed(AppRoutes.UserInfoActivity,arguments: con.userID.toString().split('_').last);
}, },
child: Text('TA的主页',style: TextStyle(color: const Color(0xFF00FFF4),fontSize:12.sp,fontWeight: FontWeight.w500),), child: Text('TA的主页',style: TextStyle(color: const Color(0xFF00FFF4),fontSize:12.sp,fontWeight: FontWeight.w500),),
), ),
@ -131,7 +136,7 @@ class _ChatPageState extends State<ChatPage> {
), ),
userAvatarBuilder: (BuildContext context, V2TimMessage message) { userAvatarBuilder: (BuildContext context, V2TimMessage message) {
return avatarWidget((message.faceUrl?.isNotEmpty ?? false) ? message.faceUrl! : 'http://qiniuyun.ikuayou.com/avatar/default/default_header.png'); return avatarWidget((message.faceUrl?.isNotEmpty ?? false) ? message.faceUrl! : 'https://qiniuyun.leyuan666.com/quanzi/avatar/default.png');
}, },
); );

View File

@ -148,7 +148,7 @@ class _CirclePageState extends State<CirclePage>
onTap: () { onTap: () {
Get.toNamed(AppRoutes.VisitorListActivity); Get.toNamed(AppRoutes.VisitorListActivity);
}, },
child: Container( child: SizedBox(
width: 30.sp * widgets.length, width: 30.sp * widgets.length,
height: 44.sp, height: 44.sp,
child: Stack( child: Stack(
@ -207,7 +207,7 @@ class _CirclePageState extends State<CirclePage>
url, url,
width: (width - 1).sp, width: (width - 1).sp,
height: (width - 1).sp, height: (width - 1).sp,
fit: BoxFit.fill, fit: BoxFit.cover,
), ),
) : Text(url,style: TextStyle(color: Color(0xffF756FF),fontSize: 12.sp),) ) : Text(url,style: TextStyle(color: Color(0xffF756FF),fontSize: 12.sp),)
], ],

View File

@ -0,0 +1,175 @@
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_install_app/flutter_install_app.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../main.dart';
import '../../network/dio_manager.dart';
import '../../util/util.dart';
class BaseDialog extends StatefulWidget {
final bool isDismiss;
BaseDialog({required this.isDismiss});
@override
BaseDialogState createState() => BaseDialogState();
}
double myProgress = 0;
class BaseDialogState extends State<BaseDialog> {
bool isDownload = false;
void incrementCounter() {}
void setDownloadUi() {
setState(() {
isDownload = true;
});
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
return widget.isDismiss;
},
child: Dialog(
backgroundColor: Colors.transparent,
child: Container(
height: 200.sp,
padding: const EdgeInsets.all(1.0),
child: Stack(
children: [
Container(
decoration: BoxDecoration(
shape: BoxShape.rectangle,
borderRadius: BorderRadius.circular(10.0),
gradient: const LinearGradient(
colors: [Color(0xFFDD3DF4), Color(0xFF30FFD9)],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
),
Container(
margin: EdgeInsets.all(1.sp),
decoration: BoxDecoration(
shape: BoxShape.rectangle,
borderRadius: BorderRadius.circular(10.0),
gradient: const LinearGradient(
colors: [Color(0xFF4C3E5F), Color(0xFF324140)],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
),
Container(
margin: EdgeInsets.only(top: 24.sp),
child: Column(
children: [
Center(
child: Text(
"提示",
style: TextStyle(color: Colors.white, fontSize: 16.sp),
),
),
SizedBox(
height: 85.sp,
child: ListView(
children: [
Container(
margin: EdgeInsets.only(
top: 36.sp, left: 14.sp, right: 14.sp),
alignment: Alignment.center,
child: Text(
"您已被对方拉进黑名单,去看看其他人吧~",
textAlign: TextAlign.center,
style: TextStyle(
color: const Color(0xCCF7FAFA),
fontSize: 16.sp),
),
)
],
),
),
isDownload
? GestureDetector(
onTap: () async {
//incrementCounter();
},
child: Container(
margin: EdgeInsets.only(top: 24.sp),
child: CircularProgressIndicator(
value: myProgress,
backgroundColor: Colors.grey,
valueColor: const AlwaysStoppedAnimation<Color>(
Color(0xFF30FFD9)),
strokeWidth: 4.0.sp,
),
),
)
: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () async {
Navigator.pop(context);
Get.back();
},
child: Container(
width: 200.sp,
margin: EdgeInsets.only(top: 14.sp),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17),
gradient: const LinearGradient(
colors: [
Color(0xFF06F9FA),
Color(0xFFDC5BFD),
],
begin: Alignment.centerLeft,
end: Alignment.centerRight,
),
),
padding: EdgeInsets.only(
top: 10.sp,
bottom: 10.sp,
left: 52.sp,
right: 52.sp),
child: Center(
child: Text(
"好的",
style: TextStyle(
color: Colors.white,
fontSize: 12.sp,
),
),
),
),
)
],
),
),
Positioned(
right: 8.sp,
top: 8.sp,
child: widget.isDismiss? GestureDetector(
onTap: (){
Navigator.pop(context);
},
child: Icon(Icons.close,color: Colors.white,size: 24.sp,)):Container())
],
),
),
),
);
}
}

View File

@ -1,8 +1,11 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
import '../../components/my_app_bar.dart'; import '../../components/my_app_bar.dart';
import '../../main.dart';
import '../../router/app_routers.dart'; import '../../router/app_routers.dart';
import '../../util/util.dart'; import '../../util/util.dart';
import 'logic.dart'; import 'logic.dart';
@ -222,8 +225,20 @@ class HelpPage extends StatelessWidget {
borderRadius: BorderRadius.circular(20.sp), borderRadius: BorderRadius.circular(20.sp),
), ),
child: TextButton.icon( child: TextButton.icon(
onPressed: () { onPressed: () async{
// Handle contact service button press var con;
if(kDebugMode){
con = V2TimConversation(
conversationID: "c2c_qpqz_dev_10_102", userID: "qpqz_dev_10_102", showName: "测试乐园客服", type: 1);
}else{
con = V2TimConversation(
conversationID: "c2c_qpqz_prod_10_102", userID: "qpqz_prod_10_102", showName: "乐园客服", type: 1);
}
Get.toNamed(AppRoutes.Chat, arguments: con);
// sendTextMsg('qpqz_dev_10_102',content :"你好吗? ");
// pushChatPage(logic.userInfoBean!.id.toString(), logic.imId,
// logic.userInfoBean!.nickname);
}, },
icon: Image.asset( icon: Image.asset(
getMineImage("im_service"), getMineImage("im_service"),

View File

@ -15,7 +15,6 @@ import '../msg/view.dart';
import 'state.dart'; import 'state.dart';
class HomeLogic extends GetxController { class HomeLogic extends GetxController {
PageController pageController = PageController(initialPage: 1); PageController pageController = PageController(initialPage: 1);
int currentIndex = 1; int currentIndex = 1;
Widget currentPage = Container(); Widget currentPage = Container();
@ -36,7 +35,7 @@ class HomeLogic extends GetxController {
} }
@override @override
void onReady() async{ void onReady() async {
// TODO: implement onReady // TODO: implement onReady
super.onReady(); super.onReady();
@ -44,41 +43,37 @@ class HomeLogic extends GetxController {
var data = await DioManager.instance.get(url: Api.APP_VERSION); var data = await DioManager.instance.get(url: Api.APP_VERSION);
var bean = BaseResponse<UpdateInfo>.fromJson( var bean = BaseResponse<UpdateInfo>.fromJson(
data, (data) => UpdateInfo.fromJson(data)); data, (data) => UpdateInfo.fromJson(data));
if(bean.isSuccess()&&bean.data.update==1){ if (bean.isSuccess() && bean.data.update == 1) {
// showReportDialog(Get.context!,bean.data.constraint==0,bean.data); showReportDialog(Get.context!, bean.data.constraint == 0, bean.data);
} }
} }
void showReportDialog(BuildContext context,bool isDismiss,UpdateInfo updateInfo) { void showReportDialog(
BuildContext context, bool isDismiss, UpdateInfo updateInfo) {
showDialog( showDialog(
context: context, context: context,
barrierDismissible: isDismiss, barrierDismissible: isDismiss,
builder: (BuildContext context) { builder: (BuildContext context) {
return UpdateDialog(isDismiss: isDismiss,updateInfo : updateInfo,); return UpdateDialog(
} isDismiss: isDismiss,
); updateInfo: updateInfo,
);
});
} }
void getIMData() async { void getIMData() async {
// _coreInstance.; // _coreInstance.;
if (!coreInstance.isLoginSuccess) { if (!coreInstance.isLoginSuccess) {
var data = await DioManager.instance var data = await DioManager.instance.get(url: Api.getIMInfo);
.get(url: Api.getIMInfo);
if (data['code'] == 200) { if (data['code'] == 200) {
loginIM(data['data']['account_id'].toString(), data['data']['user_sig']); loginIM(
data['data']['account_id'].toString(), data['data']['user_sig']);
} }
} }
} }
String getInfo () { String getInfo() {
return getBaseImage('image'); return getBaseImage('image');
} }
updateIndex(int index) { updateIndex(int index) {
@ -86,8 +81,7 @@ class HomeLogic extends GetxController {
if (index == 1) { if (index == 1) {
final logic = Get.put(CircleLogic()); final logic = Get.put(CircleLogic());
logic.loadCirclePeopleData(); logic.loadCirclePeopleData();
}else } else if (index == 2) {
if(index == 2){
final logic = Get.put(MinefragmentLogic()); final logic = Get.put(MinefragmentLogic());
logic.getMode(); logic.getMode();
} }

View File

@ -173,12 +173,12 @@ class LoginPage extends StatelessWidget {
width: 76.sp, width: 76.sp,
height: 29.sp, height: 29.sp,
decoration: BoxDecoration( decoration: BoxDecoration(
color:logic.isPhoto ? logic.sendCodeBtn? Colors.white30: Colors.transparent : Colors.white30, color:logic.isPhoto ? logic.sendCodeBtn? Colors.white30:const Color(0xff0AFCFF) : Colors.white30,
borderRadius: BorderRadius.circular( borderRadius: BorderRadius.circular(
29.sp / 2) 29.sp / 2)
), ),
child: Text(logic.sendCodeBtn ? '${logic.seconds}s' : '获取验证码', style: TextStyle( child: Text(logic.sendCodeBtn ? '${logic.seconds}s' : '获取验证码', style: TextStyle(
color: Colors.white, fontSize: 12.sp),), color: logic.isPhoto ? logic.sendCodeBtn? Colors.white:Colors.black : Colors.white, fontSize: 12.sp),),
), ),
)), )),

View File

@ -167,7 +167,7 @@ class TIMConversationItem extends TIMUIKitStatelessWidget {
children: [ children: [
ClipOval( ClipOval(
child: CachedNetworkImage( child: CachedNetworkImage(
imageUrl: faceUrl==""?"http://qiniuyun.ikuayou.com/avatar/default/default_header.png":faceUrl, imageUrl: faceUrl==""?"https://qiniuyun.leyuan666.com/quanzi/avatar/default.png":faceUrl,
fit: BoxFit.cover, fit: BoxFit.cover,
width: isDesktopScreen ? 40 : 44, width: isDesktopScreen ? 40 : 44,
height: isDesktopScreen ? 40 : 44, height: isDesktopScreen ? 40 : 44,

View File

@ -48,11 +48,16 @@ class SplashLogic extends GetxController {
}); });
Get.offNamed(AppRoutes.Complete_materialPage); Get.offNamed(AppRoutes.Complete_materialPage);
return; return;
} else if(bean.code == 5000||bean.code == 5001||bean.code == 5002||bean.code == 5003){
pushLoginPage();
return;
} }
showToast(bean.msg.toString()); showToast(bean.msg.toString());
if (bean.code == 500) { if (bean.code == 500) {
await Future.delayed(Duration(seconds: 5)); await Future.delayed(Duration(seconds: 5));
onInit(); onInit();
}else {
pushLoginPage();
} }
// Get.toNamed(AppRoutes.Home); // Get.toNamed(AppRoutes.Home);

View File

@ -1,15 +1,21 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:tencent_cloud_chat_uikit/data_services/friendShip/friendship_services.dart';
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
import '../../common/config.dart'; import '../../common/config.dart';
import '../../network/api.dart'; import '../../network/api.dart';
import '../../network/dio_manager.dart'; import '../../network/dio_manager.dart';
import '../../util/SharedPreferencesHelper.dart'; import '../../util/SharedPreferencesHelper.dart';
import '../../util/eventBus.dart';
import '../../util/qiniu.dart'; import '../../util/qiniu.dart';
import '../../util/util.dart'; import '../../util/util.dart';
import '../dialog/BaseDialog.dart';
import 'state.dart'; import 'state.dart';
class UserinfoLogic extends GetxController { class UserinfoLogic extends GetxController {
@ -30,32 +36,56 @@ class UserinfoLogic extends GetxController {
bool isShowAlbum = true; bool isShowAlbum = true;
bool isLike = false; bool isLike = false;
bool isBlack = false;
bool isBlackBeen = false;
bool isDestroy = false;
final startTime = DateTime.now(); final startTime = DateTime.now();
SharedPreferences? sharedPreferences; SharedPreferences? sharedPreferences;
@override @override
void onInit() async { void onInit() async {
super.onInit(); super.onInit();
SmartDialog.showLoading(); SmartDialog.showLoading();
sharedPreferences = await SharedPreferences.getInstance(); sharedPreferences = await SharedPreferences.getInstance();
int? sharedUserId = sharedPreferences!.getInt(SharedPreferencesHelper.USERID); int? sharedUserId =
sharedPreferences!.getInt(SharedPreferencesHelper.USERID);
if (userId.isNotEmpty && sharedUserId != null && sharedUserId.toString() == userId) { if (userId.isNotEmpty &&
sharedUserId != null &&
sharedUserId.toString() == userId) {
userId = ''; userId = '';
} }
state.imaglist.clear(); state.imaglist.clear();
if (userId.isEmpty) { if (userId.isEmpty) {
fetchUserInfo(Api.getUserInfo); fetchUserInfo(Api.getUserInfo);
fetchMyAlbum(Api.getMyAlbum); fetchMyAlbum(Api.getMyAlbum);
} else { } else {
fetchUserInfo("${Api.getUserInfoTA + userId}/home"); fetchUserInfo("${Api.getUserInfoTA + userId}/home");
fetchMyAlbum("${Api.getTaAlbum + userId}/albums"); fetchMyAlbum("${Api.getTaAlbum + userId}/albums");
fetchUrgeStatus("${Api.getUrgeStatus + userId}/urge/album/status"); fetchUrgeStatus("${Api.getUrgeStatus + userId}/urge/album/status");
fetchIsBlack("${Api.setBlock + userId}/block");
} }
SmartDialog.dismiss(); SmartDialog.dismiss();
fetchQnToken(Api.getqiniuToken); fetchQnToken(Api.getqiniuToken);
}
void showBlackDialog(BuildContext context) {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return BaseDialog(
isDismiss: false,
);
});
}
Future<void> fetchIsBlack(String url) async {
var data = await DioManager.instance.get(url: url);
isBlack = data["data"]["status"] == 1;
} }
Future<void> fetchUserInfo(String url) async { Future<void> fetchUserInfo(String url) async {
@ -66,22 +96,31 @@ class UserinfoLogic extends GetxController {
if (bean.isSuccess()) { if (bean.isSuccess()) {
isMe = userId.isEmpty; isMe = userId.isEmpty;
isLike = bean.data.isFollow; isLike = bean.data.isFollow;
isLikeFoMsg = "${bean.data.imageUrgeCount}位圈友感兴趣,其中${bean.data.likeMeCount}位已催您更新"; isLikeFoMsg =
"${bean.data.likeMeCount}位圈友感兴趣,其中${bean.data.imageUrgeCount}位已催您更新";
userInfoBean = bean.data.user; userInfoBean = bean.data.user;
isVip = userInfoBean?.vip ?? 0; isVip = userInfoBean?.vip ?? 0;
imId = bean.data.accountId; imId = bean.data.accountId;
if (isMe) { if (isMe) {
isOnline = true; isOnline = true;
}else{ } else {
isOnline = userInfoBean!.isOnline; isOnline = userInfoBean!.isOnline;
isBlackBeen = bean.data.isBlock;
isDestroy = bean.data.isDestroy;
if(isBlackBeen){
showToast("您已被对方拉黑");
}
} }
onLineCity = isOnline ? "在线" : "离线"; onLineCity = isOnline ? "在线" : "离线";
if (userInfoBean?.city != null) { if (userInfoBean?.city != null) {
onLineCity = "$onLineCity·${userInfoBean!.city}"; onLineCity = "$onLineCity·${userInfoBean!.city}";
}else{ } else {
onLineCity = "$onLineCity·外星"; onLineCity = "$onLineCity·外星";
} }
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, userInfoBean!.role, userInfoBean!.orientation); ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age,
userInfoBean!.role, userInfoBean!.orientation);
} else if (bean.code == 9999) {
showBlackDialog(Get.context!);
} else { } else {
showToast(bean.msg); showToast(bean.msg);
} }
@ -104,7 +143,7 @@ class UserinfoLogic extends GetxController {
var urgeBean = BaseResponse<UrgentStatus>.fromJson( var urgeBean = BaseResponse<UrgentStatus>.fromJson(
urgedata, (urgedata) => UrgentStatus.fromJson(urgedata)); urgedata, (urgedata) => UrgentStatus.fromJson(urgedata));
isUrgeStatus = urgeBean.data?.isUrgent ?? false; isUrgeStatus = urgeBean.data?.isUrgent ?? false;
update(); update();
} }
Future<void> fetchQnToken(String url) async { Future<void> fetchQnToken(String url) async {
@ -114,10 +153,8 @@ class UserinfoLogic extends GetxController {
if (bean.isSuccess()) { if (bean.isSuccess()) {
quToken = bean.data?.token.toString() ?? ''; quToken = bean.data?.token.toString() ?? '';
} }
} }
urgeChange() async { urgeChange() async {
var data = await DioManager.instance var data = await DioManager.instance
.post(url: "${Api.urgeAlbum + userId}/urge/album"); .post(url: "${Api.urgeAlbum + userId}/urge/album");
@ -126,7 +163,7 @@ class UserinfoLogic extends GetxController {
showToast("催更成功"); showToast("催更成功");
isUrgeStatus = true; isUrgeStatus = true;
update(); update();
}else { } else {
showToast(bean.msg); showToast(bean.msg);
} }
} }
@ -143,6 +180,11 @@ class UserinfoLogic extends GetxController {
} }
setLike() async { setLike() async {
if(isBlack||isDestroy){
showToast("喜欢失败,存在拉黑关系或者该账户已注销");
return;
}
var data = await DioManager.instance.post( var data = await DioManager.instance.post(
url: "${Api.setLike + userId}/follow", url: "${Api.setLike + userId}/follow",
params: {'status': isLike ? "0" : "1"}); params: {'status': isLike ? "0" : "1"});
@ -157,15 +199,40 @@ class UserinfoLogic extends GetxController {
showToast(bean.msg); showToast(bean.msg);
} }
setBlock() async { setBlock(String status) async {
var data = await DioManager.instance List<String> parts = imId.split('_');
.post(url: "${Api.setBlock + userId}/block", params: {'status': "1"}); if (parts[2] == "10") {
showToast("不可拉黑客服号哦~");
return;
}
var data = await DioManager.instance.post(
url: "${Api.setBlock + userId}/block", params: {'status': status});
var bean = BaseResponse<dynamic>.fromJson( var bean = BaseResponse<dynamic>.fromJson(
data, data,
(jsonData) => jsonData, (jsonData) => jsonData,
); );
if (bean.isSuccess()) { if (bean.isSuccess()) {
Navigator.pop(Get.context!); final FriendshipServices _friendshipServices =
serviceLocator<FriendshipServices>();
isBlack = status == "1";
try {
if (isBlack) {
Navigator.pop(Get.context!);
var result =
await _friendshipServices.addToBlackList(userIDList: [imId]);
print("拉黑成功" + result.toString());
} else {
var result =
await _friendshipServices.deleteFromBlackList(userIDList: [imId]);
print("取消拉黑成功" + result.toString());
}
// await Future.delayed(Duration(milliseconds: 500));
// Future.delayed(Duration(seconds: 3),() {
EventBusManager.fire(CommentBlackEvent(userId: imId, isBlack: isBlack));
// });
} catch (e) {}
update(); update();
} }
showToast(bean.msg); showToast(bean.msg);
@ -189,10 +256,12 @@ class UserinfoLogic extends GetxController {
if (myAlbumBean.code == 200) { if (myAlbumBean.code == 200) {
SmartDialog.dismiss(); SmartDialog.dismiss();
state.imaglist.insert(0,AlbumListItem( state.imaglist.insert(
id: myAlbumBean.data.id, 0,
type: myAlbumBean.data.type, AlbumListItem(
url: result)); id: myAlbumBean.data.id,
type: myAlbumBean.data.type,
url: result));
update(); update();
} }
}); });
@ -288,6 +357,8 @@ class ResponseBean {
int likeMeCount; int likeMeCount;
int imageUrgeCount; int imageUrgeCount;
bool isFollow; bool isFollow;
bool isBlock;
bool isDestroy;
String accountId; String accountId;
ResponseBean( ResponseBean(
@ -295,6 +366,8 @@ class ResponseBean {
required this.likeMeCount, required this.likeMeCount,
required this.imageUrgeCount, required this.imageUrgeCount,
required this.accountId, required this.accountId,
required this.isBlock,
required this.isDestroy,
required this.isFollow}); required this.isFollow});
factory ResponseBean.fromJson(Map<String, dynamic> json) { factory ResponseBean.fromJson(Map<String, dynamic> json) {
@ -303,6 +376,8 @@ class ResponseBean {
user: UserBean.fromJson(json['user']), user: UserBean.fromJson(json['user']),
likeMeCount: json['like_me_count'], likeMeCount: json['like_me_count'],
imageUrgeCount: json['image_urge_count'], imageUrgeCount: json['image_urge_count'],
isBlock: json['is_been_block'],
isDestroy: json['is_destroy'],
isFollow: json['is_follow'], isFollow: json['is_follow'],
); );
} }

View File

@ -94,11 +94,44 @@ class MyTabbedScreenState extends State<UserinfoPage>
Widget _meInfoButton(UserinfoLogic controller) { Widget _meInfoButton(UserinfoLogic controller) {
if (controller.isMe) { if (controller.isMe) {
return const SizedBox(); return GestureDetector(
onTap: () async {
await Get.toNamed(
AppRoutes.Complete_materialPage,
arguments: "user",
);
logic.onInit();
},
child: Center(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17),
gradient: const LinearGradient(
colors: [
Color(0xFF06F9FA),
Color(0xFFDC5BFD),
],
begin: Alignment.centerLeft,
end: Alignment.centerRight,
),
),
padding: EdgeInsets.symmetric(
vertical: 10.sp,
horizontal: 55.sp,
),
child: const Text(
"完善个人形象",
style: TextStyle(
color: Colors.white,
fontSize: 12,
),
),
),
));
} else { } else {
final likeButton = GestureDetector( final likeButton = GestureDetector(
onTap: () { onTap: () {
_showBottomSheet(context); _showBottomSheet(context, controller);
}, },
child: Image( child: Image(
image: AssetImage(getMineImage("icon_like")), image: AssetImage(getMineImage("icon_like")),
@ -137,9 +170,19 @@ class MyTabbedScreenState extends State<UserinfoPage>
final chatButton = GestureDetector( final chatButton = GestureDetector(
onTap: () { onTap: () {
if(logic.isBlack||logic.isDestroy||logic.isBlackBeen){
showToast("私聊失败,存在拉黑关系或者该账户已注销");
return;
}
if (logic.userInfoBean != null) { if (logic.userInfoBean != null) {
pushChatPage(logic.userInfoBean!.id.toString(), logic.imId, String msg = Get.previousRoute;
logic.userInfoBean!.nickname); if (msg == AppRoutes.Chat) {
Get.back();
} else {
pushChatPage(logic.userInfoBean!.id.toString(), logic.imId,
logic.userInfoBean!.nickname);
}
} }
}, },
child: Container( child: Container(
@ -204,7 +247,7 @@ class MyTabbedScreenState extends State<UserinfoPage>
], ],
), ),
), ),
Container( Container(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
horizontal: 19.sp, horizontal: 19.sp,
), ),
@ -222,7 +265,7 @@ class MyTabbedScreenState extends State<UserinfoPage>
), ),
), ),
SizedBox(width: 8.sp), SizedBox(width: 8.sp),
_buildInfoRow(controller), logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): _buildInfoRow(controller),
], ],
), ),
Row( Row(
@ -238,7 +281,7 @@ class MyTabbedScreenState extends State<UserinfoPage>
: const Color(0xFF787575), : const Color(0xFF787575),
), ),
), ),
Text( logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): Text(
controller.onLineCity, controller.onLineCity,
style: TextStyle( style: TextStyle(
fontSize: 12.sp, fontSize: 12.sp,
@ -254,7 +297,7 @@ class MyTabbedScreenState extends State<UserinfoPage>
), ),
SizedBox( SizedBox(
height: 59.sp, height: 59.sp,
child: _buildInterestsListView(interests), child: logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): _buildInterestsListView(interests),
), ),
titleTab(controller), titleTab(controller),
Expanded( Expanded(
@ -264,8 +307,8 @@ class MyTabbedScreenState extends State<UserinfoPage>
_tabController.animateTo(index); _tabController.animateTo(index);
}, },
children: [ children: [
_imageAdapter(controller), logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container():_imageAdapter(controller),
HomeCallOutView(controller.userId), logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): HomeCallOutView(controller.userId),
], ],
), ),
), ),
@ -360,7 +403,7 @@ class MyTabbedScreenState extends State<UserinfoPage>
); );
}, },
), ),
GestureDetector( logic.isBlack||logic.isDestroy||logic.isBlackBeen?Container(): GestureDetector(
onTap: () { onTap: () {
if (controller.isMe) { if (controller.isMe) {
controller.isEdit = !controller.isEdit; controller.isEdit = !controller.isEdit;
@ -410,35 +453,47 @@ class MyTabbedScreenState extends State<UserinfoPage>
Widget _imageAdapter(UserinfoLogic controller) { Widget _imageAdapter(UserinfoLogic controller) {
//print(controller.state.imaglist); //print(controller.state.imaglist);
return controller.state.imaglist.isEmpty
? Column(mainAxisAlignment: MainAxisAlignment.start, children: [ // :
const SizedBox(height: 100,), return Container(
Image.asset( padding: EdgeInsets.symmetric(horizontal: 19.sp),
getBaseImage('no_result'), child: Stack(
width: 200, children: [
// height: 11, Column(
), children: [
const SizedBox(height: 26,), if (controller.isMe)
Text( Container(
controller.isMe?"点击管理即可上传形象照哦~":"TA还没有发布过形象照快去催TA更新吧~", margin: EdgeInsets.only(top: 18.sp, bottom: 14.sp),
style: const TextStyle(color: Colors.white30), child: Text(
), controller.isLikeFoMsg,
]) style: const TextStyle(color: Colors.white30),
: Container( ),
padding: EdgeInsets.symmetric(horizontal: 19.sp), ),
child: Stack( controller.state.imaglist.isEmpty && !controller.isEdit
children: [ ? Center(
Column( child: Column(
children: [ mainAxisAlignment: MainAxisAlignment.start,
if (controller.isMe) children: [
Container( const SizedBox(
margin: EdgeInsets.only(top: 18.sp, bottom: 14.sp), height: 100,
child: Text( ),
controller.isLikeFoMsg, Image.asset(
style: const TextStyle(color: Colors.white30), getBaseImage('no_result'),
), width: 200,
), // height: 11,
Expanded( ),
const SizedBox(
height: 26,
),
Text(
controller.isMe
? "点击管理即可上传形象照哦~"
: "TA还没有发布过形象照快去催TA更新吧~",
style: const TextStyle(color: Colors.white30),
),
]),
)
: Expanded(
child: GridView.builder( child: GridView.builder(
padding: const EdgeInsets.only(bottom: 58.0), padding: const EdgeInsets.only(bottom: 58.0),
shrinkWrap: true, shrinkWrap: true,
@ -497,52 +552,11 @@ class MyTabbedScreenState extends State<UserinfoPage>
}, },
), ),
), ),
], ],
), ),
if (logic.isMe) ],
Positioned( ),
left: 0, );
right: 0,
bottom: 26.sp,
child: GestureDetector(
onTap: () async {
await Get.toNamed(
AppRoutes.Complete_materialPage,
arguments: "user",
);
logic.onInit();
},
child: Center(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17),
gradient: const LinearGradient(
colors: [
Color(0xFF06F9FA),
Color(0xFFDC5BFD),
],
begin: Alignment.centerLeft,
end: Alignment.centerRight,
),
),
padding: EdgeInsets.symmetric(
vertical: 10.sp,
horizontal: 55.sp,
),
child: const Text(
"完善个人形象",
style: TextStyle(
color: Colors.white,
fontSize: 12,
),
),
),
),
),
),
],
),
);
} }
Widget _buildInfoRow(UserinfoLogic controller) { Widget _buildInfoRow(UserinfoLogic controller) {
@ -711,7 +725,7 @@ class MyTabbedScreenState extends State<UserinfoPage>
); );
} }
void _showBottomSheet(BuildContext context) { void _showBottomSheet(BuildContext context, UserinfoLogic controller) {
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
@ -762,8 +776,13 @@ class MyTabbedScreenState extends State<UserinfoPage>
), ),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
Navigator.pop(context); if (controller.isBlack) {
_showReportDialog(context); logic.setBlock("0");
Navigator.pop(context);
} else {
Navigator.pop(context);
_showReportDialog(context);
}
}, },
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
@ -775,8 +794,8 @@ class MyTabbedScreenState extends State<UserinfoPage>
), ),
Container( Container(
margin: EdgeInsets.only(top: 2.sp), margin: EdgeInsets.only(top: 2.sp),
child: const Text( child: Text(
"拉黑", controller.isBlack ? "取消拉黑" : "拉黑",
style: TextStyle(color: Colors.white), style: TextStyle(color: Colors.white),
), ),
), ),
@ -1031,7 +1050,7 @@ class MyTabbedScreenState extends State<UserinfoPage>
SizedBox(width: 24.sp), SizedBox(width: 24.sp),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
logic.setBlock(); logic.setBlock("1");
}, },
child: Container( child: Container(
margin: EdgeInsets.only(top: 24.sp), margin: EdgeInsets.only(top: 24.sp),

View File

@ -1,5 +1,5 @@
class CONFIG{ class CONFIG{
static const IMAGE_HEAD = 'http://qiniuyun.ikuayou.com/'; static const IMAGE_HEAD = 'https://qiniuyun.leyuan666.com/';
static const CALL_OUT_VIDEO = 'call_out_video/'; static const CALL_OUT_VIDEO = 'call_out_video/';

View File

@ -17,6 +17,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart';
import 'package:tencent_cloud_chat_uikit/data_services/core/core_services.dart';
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
import 'package:tencent_chat_push_for_china/model/appInfo.dart'; import 'package:tencent_chat_push_for_china/model/appInfo.dart';
@ -66,11 +67,11 @@ initPush() {
} }
// //
pushChatPage(String userId, String imId, String userName) async { pushChatPage(String userId, String imId, String userName) {
var con = V2TimConversation( var con = V2TimConversation(
conversationID: "c2c_$imId", userID: imId, showName: userName, type: 1); conversationID: "c2c_$imId", userID: imId, showName: userName, type: 1);
await createCustomMsg(userId, imId);
Get.toNamed(AppRoutes.Chat, arguments: con); Get.toNamed(AppRoutes.Chat, arguments: con);
createCustomMsg(userId, imId);
} }
createCustomMsg(String userId, String imId) async { createCustomMsg(String userId, String imId) async {
@ -272,7 +273,7 @@ class _MyAppState extends State<MyApp> {
coreInstance.init( coreInstance.init(
sdkAppID: IM_SDK_APP_ID, sdkAppID: IM_SDK_APP_ID,
// Replace 0 with the SDKAppID of your IM application when integrating // Replace 0 with the SDKAppID of your IM application when integrating
// language: LanguageEnum.en, // // language: LanguageEnum.zhHans, //
loglevel: LogLevelEnum.V2TIM_LOG_DEBUG, loglevel: LogLevelEnum.V2TIM_LOG_DEBUG,
onTUIKitCallbackListener: (TIMCallback callbackValue) { onTUIKitCallbackListener: (TIMCallback callbackValue) {
switch (callbackValue.type) { switch (callbackValue.type) {
@ -282,6 +283,13 @@ class _MyAppState extends State<MyApp> {
break; break;
case TIMCallbackType.API_ERROR: case TIMCallbackType.API_ERROR:
//Prints the API error to console, and shows the error message. //Prints the API error to console, and shows the error message.
if(callbackValue.errorCode==20007){
showToast("您已被对方拉黑,换个人聊聊天吧~");
return;
}
if(callbackValue.errorCode==6015){
return;
}
print( print(
"Error from TUIKit: ${callbackValue.errorMsg}, Code: ${callbackValue.errorCode}"); "Error from TUIKit: ${callbackValue.errorMsg}, Code: ${callbackValue.errorCode}");
if (callbackValue.errorCode == 10004 && if (callbackValue.errorCode == 10004 &&

View File

@ -1,7 +1,7 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
class Api { class Api {
static const baseUrl = kDebugMode ? 'http://192.168.3.55:2000/' : 'http://192.168.3.55:2000/'; static const baseUrl = kDebugMode ? 'http://192.168.3.55:2000/' : 'https://leyuan666.com/zuul-service/';
// static const baseUrl = 'https://leyuan666.com/zuul-service/'; // static const baseUrl = 'https://leyuan666.com/zuul-service/';
@ -79,16 +79,35 @@ class Api {
static const getUserMine = 'user-service/my/main'; static const getUserMine = 'user-service/my/main';
// //
static const getUserInfo = 'user-service/my/home'; static const getUserInfo = 'user-service/my/home';
// //
static const getUserInfoTA = 'user-service/user/'; static const getUserInfoTA = 'user-service/user/';
//
static const setBlock = 'user-service/user/';
//
static const setLike = 'user-service/user/';
//
static const offAccount = 'user-service/user/destroy';
//
static const bindingPhoto = 'user-service/user/phone';
//
static const blackList = 'user-service/blacklist/users';
// //
static const getMyAlbum = 'up-service/my/albums'; static const getMyAlbum = 'up-service/my/albums';
@ -117,13 +136,8 @@ class Api {
static const getUrgeStatus = 'up-service/user/'; static const getUrgeStatus = 'up-service/user/';
//
static const setBlock = 'user-service/user/';
//
static const setLike = 'user-service/user/';
// //
@ -146,26 +160,11 @@ class Api {
//
static const offAccount = 'user-service/user/destroy';
//
static const blackList = 'user-service/blacklist/users';
//
static const bindingPhoto = 'user-service/user/phone';
// //
static const getFeedBack = 'up-service/feedback'; static const getFeedBack = 'up-service/feedback';

View File

@ -38,4 +38,13 @@ class SendCoustomMessage {
V2TimValueCallback<V2TimMsgCreateInfoResult>? createCustomMessageRes = null; V2TimValueCallback<V2TimMsgCreateInfoResult>? createCustomMessageRes = null;
SendCoustomMessage(this.createCustomMessageRes);} SendCoustomMessage(this.createCustomMessageRes);
}
class CommentBlackEvent {
String userId = "";
bool isBlack = false;
CommentBlackEvent( {required this.userId,required this.isBlack });
}
class CommentBlackMoreEvent {
}

View File

@ -12,6 +12,7 @@ import device_info_plus_macos
import fc_native_video_thumbnail_for_us import fc_native_video_thumbnail_for_us
import file_selector_macos import file_selector_macos
import geolocator_apple import geolocator_apple
import local_notifications_for_us
import package_info_plus_macos import package_info_plus_macos
import pasteboard import pasteboard
import path_provider_foundation import path_provider_foundation
@ -30,6 +31,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FcNativeVideoThumbnailPlugin.register(with: registry.registrar(forPlugin: "FcNativeVideoThumbnailPlugin")) FcNativeVideoThumbnailPlugin.register(with: registry.registrar(forPlugin: "FcNativeVideoThumbnailPlugin"))
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin"))
PasteboardPlugin.register(with: registry.registrar(forPlugin: "PasteboardPlugin")) PasteboardPlugin.register(with: registry.registrar(forPlugin: "PasteboardPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))

View File

@ -329,6 +329,14 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.5" version: "1.0.5"
dbus:
dependency: transitive
description:
name: dbus
sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.7.8"
desktop_drop: desktop_drop:
dependency: transitive dependency: transitive
description: description:
@ -433,6 +441,14 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.0.0+3" version: "2.0.0+3"
event_bus:
dependency: "direct main"
description:
name: event_bus
sha256: "44baa799834f4c803921873e7446a2add0f3efa45e101a054b1f0ab9b95f8edc"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
extended_image: extended_image:
dependency: transitive dependency: transitive
description: description:
@ -542,6 +558,14 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_apns_only:
dependency: transitive
description:
name: flutter_apns_only
sha256: "70da0d520a5b8088dc7a52abb9a63d3191521c7ec2360461af776cdaee50ab74"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.6.0"
flutter_blurhash: flutter_blurhash:
dependency: transitive dependency: transitive
description: description:
@ -598,6 +622,22 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.0.1" version: "2.0.1"
flutter_local_notifications_linux:
dependency: transitive
description:
name: flutter_local_notifications_linux
sha256: b472bfc173791b59ede323661eae20f7fff0b6908fea33dd720a6ef5d576bae8
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.5.1"
flutter_local_notifications_platform_interface:
dependency: transitive
description:
name: flutter_local_notifications_platform_interface
sha256: "21bceee103a66a53b30ea9daf677f990e5b9e89b62f222e60dd241cd08d63d3a"
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.0.0"
flutter_luban: flutter_luban:
dependency: "direct main" dependency: "direct main"
description: description:
@ -614,6 +654,14 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "0.6.15" version: "0.6.15"
flutter_native_splash:
dependency: "direct main"
description:
name: flutter_native_splash
sha256: "6777a3abb974021a39b5fdd2d46a03ca390e03903b6351f21d10e7ecc969f12d"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.2.16"
flutter_page_indicator: flutter_page_indicator:
dependency: transitive dependency: transitive
description: description:
@ -824,6 +872,14 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "4.0.2" version: "4.0.2"
huawei_push:
dependency: transitive
description:
name: huawei_push
sha256: "71e84086f28eeab3bd4fef66f0cefad1adcb537a77ade154020af60c1dfe55fb"
url: "https://pub.flutter-io.cn"
source: hosted
version: "6.10.0+300"
image: image:
dependency: transitive dependency: transitive
description: description:
@ -952,6 +1008,14 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.2.0+4" version: "1.2.0+4"
local_notifications_for_us:
dependency: transitive
description:
name: local_notifications_for_us
sha256: "0453c3c8e021474d36bc1ccdae06688e7e1c6d3d62114e2f3c4eebd0e2f035d7"
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.4"
logging: logging:
dependency: transitive dependency: transitive
description: description:
@ -1216,6 +1280,14 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.6.0" version: "2.6.0"
plain_notification_token_for_us:
dependency: transitive
description:
name: plain_notification_token_for_us
sha256: ba4e5ff9b24abec39aad2d2d07fbfc02966b37fd5ae98ed9f8af20e4c4f906ad
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0+1"
platform: platform:
dependency: transitive dependency: transitive
description: description:
@ -1461,6 +1533,14 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.0.4" version: "2.0.4"
tencent_chat_push_for_china:
dependency: "direct main"
description:
name: tencent_chat_push_for_china
sha256: "7877e18a229c93fd5fa9dcda5b37bea0e4f6ad29ec93ceaeb2bca9bb82d75480"
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.6.2+1"
tencent_cloud_chat_sdk: tencent_cloud_chat_sdk:
dependency: transitive dependency: transitive
description: description:
@ -1581,6 +1661,14 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "2.0.1" version: "2.0.1"
timezone:
dependency: transitive
description:
name: timezone
sha256: "1cfd8ddc2d1cfd836bc93e67b9be88c3adaeca6f40a00ca999104c30693cdca0"
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.9.2"
transformer_page_view: transformer_page_view:
dependency: transitive dependency: transitive
description: description:
@ -1865,10 +1953,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: xdg_directories name: xdg_directories
sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "1.0.0" version: "0.2.0+3"
xml: xml:
dependency: transitive dependency: transitive
description: description: