463 lines
12 KiB
Dart
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'],
|
|
);
|
|
}
|
|
}
|