circle_app/circle_app/lib/app/userinfo/logic.dart
2023-08-10 16:43:23 +08:00

463 lines
12 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:image_picker/image_picker.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 '../../network/api.dart';
import '../../network/dio_manager.dart';
import '../../util/SharedPreferencesHelper.dart';
import '../../util/eventBus.dart';
import '../../util/qiniu.dart';
import '../../util/util.dart';
import '../dialog/BaseDialog.dart';
import 'state.dart';
class UserinfoLogic extends GetxController {
var userId = Get.arguments ?? "";
final UserinfoState state = UserinfoState();
final ImagePicker _picker = ImagePicker();
UserBean? userInfoBean;
String imId = '';
String ageMsg = "";
var isVip = 0;
var onLineCity = "";
var isLikeFoMsg = '';
var quToken = '';
bool isMe = false;
bool isEdit = false;
bool isUrgeStatus = false;
bool isOnline = false;
bool isShowAlbum = true;
bool isLike = false;
bool isBlack = false;
bool isBlackBeen = false;
bool isDestroy = false;
final startTime = DateTime.now();
SharedPreferences? sharedPreferences;
@override
void onInit() async {
super.onInit();
SmartDialog.showLoading();
sharedPreferences = await SharedPreferences.getInstance();
int? sharedUserId =
sharedPreferences!.getInt(SharedPreferencesHelper.USERID);
if (userId.isNotEmpty &&
sharedUserId != null &&
sharedUserId.toString() == userId) {
userId = '';
}
state.imaglist.clear();
if (userId.isEmpty) {
isMe =true;
update();
fetchUserInfo(Api.getUserInfo);
fetchMyAlbum(Api.getMyAlbum);
} else {
fetchUserInfo("${Api.getUserInfoTA + userId}/home");
fetchMyAlbum("${Api.getTaAlbum + userId}/albums");
fetchUrgeStatus("${Api.getUrgeStatus + userId}/urge/album/status");
fetchIsBlack("${Api.setBlock + userId}/block");
}
SmartDialog.dismiss();
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 {
var data = await DioManager.instance.get(url: url);
var bean = BaseResponse<ResponseBean>.fromJson(
data, (data) => ResponseBean.fromJson(data));
if (bean.isSuccess()) {
isMe = userId.isEmpty;
isLike = bean.data.isFollow;
isLikeFoMsg =
"${bean.data.likeMeCount}位圈友感兴趣,其中${bean.data.imageUrgeCount}位已催您更新";
userInfoBean = bean.data.user;
isVip = userInfoBean?.vip ?? 0;
imId = bean.data.accountId;
if (isMe) {
isOnline = true;
} else {
isOnline = userInfoBean!.isOnline;
isBlackBeen = bean.data.isBlock;
isDestroy = bean.data.isDestroy;
if (isBlackBeen) {
showOKToast("您已被对方拉黑");
}
}
onLineCity = isOnline ? "在线" : "离线";
if (userInfoBean?.city != null) {
onLineCity = "$onLineCity·${userInfoBean!.city}";
} else {
onLineCity = "$onLineCity·外星";
}
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age,
userInfoBean!.role, userInfoBean!.orientation);
} else if (bean.code == 9999) {
showBlackDialog(Get.context!);
} else {
showOKToast(bean.msg);
}
update();
}
Future<void> fetchMyAlbum(String url) async {
var myAlbumData = await DioManager.instance.get(url: url);
var myAlbumBean = BaseResponse<AlbumResponseBean>.fromJson(
myAlbumData, (myAlbumData) => AlbumResponseBean.fromJson(myAlbumData));
if (myAlbumBean.isSuccess()) {
state.imaglist.addAll(myAlbumBean.data.lists);
}
update();
}
Future<void> fetchUrgeStatus(String url) async {
var urgedata = await DioManager.instance.get(url: url);
var urgeBean = BaseResponse<UrgentStatus>.fromJson(
urgedata, (urgedata) => UrgentStatus.fromJson(urgedata));
isUrgeStatus = urgeBean.data?.isUrgent ?? false;
update();
}
Future<void> fetchQnToken(String url) async {
var data = await DioManager.instance.get(url: url, params: {});
var bean = BaseResponse<QnTokenData>.fromJson(
data, (data) => QnTokenData.fromJson(data));
if (bean.isSuccess()) {
quToken = bean.data?.token.toString() ?? '';
}
}
urgeChange() async {
var data = await DioManager.instance
.post(url: "${Api.urgeAlbum + userId}/urge/album");
var bean = BaseResponse<String>.fromJson(data, (data) => data);
if (bean.isSuccess()) {
showOKToast("催更成功");
isUrgeStatus = true;
update();
} else {
showOKToast(bean.msg);
}
}
delAlbumImage(int index) async {
var data = await DioManager.instance
.delete(url: Api.deleteAlbum + state.imaglist[index].id.toString());
var bean = BaseResponse<String>.fromJson(data, (data) => data);
if (bean.code == 200) {
state.imaglist.removeAt(index);
// Navigator.pop(Get.context!);
update();
}
}
setLike() async {
if (isBlack || isDestroy) {
showOKToast("喜欢失败,存在拉黑关系或者该账户已注销");
return;
}
var data = await DioManager.instance.post(
url: "${Api.setLike + userId}/follow",
params: {'status': isLike ? "0" : "1"});
var bean = BaseResponse<dynamic>.fromJson(
data,
(jsonData) => jsonData,
);
if (bean.isSuccess()) {
isLike = !isLike;
update();
}
showOKToast(bean.msg);
}
setBlock(String status) async {
List<String> parts = imId.split('_');
if (parts[2] == "10") {
showOKToast("不可拉黑客服号哦~");
return;
}
var data = await DioManager.instance.post(
url: "${Api.setBlock + userId}/block", params: {'status': status});
var bean = BaseResponse<dynamic>.fromJson(
data,
(jsonData) => jsonData,
);
if (bean.isSuccess()) {
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();
}
showOKToast(bean.msg);
}
Future getImageFile() async {
try {
final XFile? pickedFile = await _picker.pickImage(
source: ImageSource.gallery,
);
if (null == pickedFile) {
return;
}
SmartDialog.showLoading();
uploadImage(quToken, pickedFile, CONFIG.USER_ALBUM_IMAGE, (result) async {
var data = await DioManager.instance
.post(url: Api.updataAlbum, params: {"type": 1, "url": result});
var myAlbumBean = BaseResponse<AddAlbum>.fromJson(
data, (data) => AddAlbum.fromJson(data));
if (myAlbumBean.code == 200) {
SmartDialog.dismiss();
state.imaglist.insert(
0,
AlbumListItem(
id: myAlbumBean.data.id,
type: myAlbumBean.data.type,
url: result,
urlThumb: result));
update();
}
});
} catch (_) {}
}
}
class UserBean {
int id;
String nickname;
String avatar;
String birthday;
int age;
String signature;
int vip;
int gender;
int role;
int orientation;
List<Interest> interests;
double lng;
double lat;
String? city;
bool isOnline;
DateTime? offlineTime;
String avatarThumb;
UserBean({
required this.id,
required this.nickname,
required this.avatar,
required this.birthday,
required this.age,
required this.signature,
required this.vip,
required this.gender,
required this.role,
required this.orientation,
required this.interests,
required this.lng,
required this.lat,
this.city,
required this.isOnline,
this.offlineTime,
required this.avatarThumb,
});
factory UserBean.fromJson(Map<String, dynamic> json) {
return UserBean(
id: json['id'],
nickname: json['nickname'],
avatar: json['avatar'],
birthday: json['birthday'],
age: json['age'],
signature: json['signature'],
vip: json['vip'],
gender: json['gender'],
role: json['role'],
orientation: json['orientation'],
interests: List<Interest>.from(
json['interests'].map((x) => Interest.fromJson(x)),
),
lng: json['lng'],
lat: json['lat'],
city: json['city'],
isOnline: json['isOnline'],
offlineTime: json['offlineTime'] != null
? DateTime.parse(json['offlineTime'])
: null,
avatarThumb: json['avatar_thumb'],
);
}
}
class Interest {
int id;
String title;
Interest({
required this.id,
required this.title,
});
factory Interest.fromJson(Map<String, dynamic> json) {
return Interest(
id: json['id'],
title: json['title'],
);
}
}
class ResponseBean {
UserBean user;
int likeMeCount;
int imageUrgeCount;
bool isFollow;
bool isBlock;
bool isDestroy;
String accountId;
ResponseBean(
{required this.user,
required this.likeMeCount,
required this.imageUrgeCount,
required this.accountId,
required this.isBlock,
required this.isDestroy,
required this.isFollow});
factory ResponseBean.fromJson(Map<String, dynamic> json) {
return ResponseBean(
accountId: json['account_id'],
user: UserBean.fromJson(json['user']),
likeMeCount: json['like_me_count'],
imageUrgeCount: json['image_urge_count'],
isBlock: json['is_been_block'],
isDestroy: json['is_destroy'],
isFollow: json['is_follow'],
);
}
}
class AlbumResponseBean {
List<AlbumListItem> lists;
int total;
AlbumResponseBean({
required this.lists,
required this.total,
});
factory AlbumResponseBean.fromJson(Map<String, dynamic> json) {
return AlbumResponseBean(
lists: List<AlbumListItem>.from(
json['lists'].map((x) => AlbumListItem.fromJson(x))),
total: json['total'],
);
}
}
class AlbumListItem {
int id;
int type;
String url;
String urlThumb;
AlbumListItem({
required this.id,
required this.type,
required this.url,
required this.urlThumb,
});
factory AlbumListItem.fromJson(Map<String, dynamic> json) {
return AlbumListItem(
id: json['id'],
type: json['type'],
url: json['url'],
urlThumb: json['thumb'],
);
}
}
class AddAlbum {
int id;
int type;
String url;
AddAlbum({
required this.id,
required this.type,
required this.url,
});
factory AddAlbum.fromJson(Map<String, dynamic> json) {
return AddAlbum(
id: json['id'],
type: json['type'],
url: json['url'],
);
}
}
class UrgentStatus {
bool isUrgent;
UrgentStatus({
required this.isUrgent,
});
factory UrgentStatus.fromJson(Map<String, dynamic> json) {
return UrgentStatus(
isUrgent: json['is_urge'],
);
}
}