350 lines
8.7 KiB
Dart
350 lines
8.7 KiB
Dart
|
|
import 'dart:convert';
|
|
|
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:image_picker/image_picker.dart';
|
|
|
|
import '../../common/config.dart';
|
|
import '../../network/api.dart';
|
|
import '../../network/dio_manager.dart';
|
|
import '../../util/qiniu.dart';
|
|
import '../../util/util.dart';
|
|
import '../login/complete_material/logic.dart';
|
|
import 'state.dart';
|
|
|
|
class UserinfoLogic extends GetxController {
|
|
var userId = Get.arguments ?? "";
|
|
final UserinfoState state = UserinfoState();
|
|
final ImagePicker _picker = ImagePicker();
|
|
UserBean? userInfoBean = null;
|
|
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;
|
|
|
|
@override
|
|
void onInit() async {
|
|
super.onInit();
|
|
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;
|
|
|
|
onLineCity = userInfoBean!.isOnline == true ? "在线" : "离线";
|
|
isOnline = userInfoBean!.isOnline;
|
|
if (userInfoBean!.city != null) {
|
|
onLineCity = "$onLineCity·${userInfoBean!.city}";
|
|
}
|
|
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age,
|
|
userInfoBean!.role, userInfoBean!.orientation);
|
|
} else {
|
|
showToast(bean.msg);
|
|
}
|
|
|
|
var myAlbumData = await DioManager.instance.get(url: Api.getMyAlbum,);
|
|
var myAlbumBean = BaseResponse<AlbumResponseBean>.fromJson(
|
|
myAlbumData, (myAlbumData) => AlbumResponseBean.fromJson(myAlbumData));
|
|
if(myAlbumBean.isSuccess()){
|
|
myAlbumBean.data.lists.forEach((element) {
|
|
state.imaglist.add(element);
|
|
});
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
isMe = false;
|
|
var data = await DioManager.instance
|
|
.get(url: "${Api.getUserInfoTA + userId}/home");
|
|
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;
|
|
onLineCity = userInfoBean!.isOnline == true ? "在线" : "离线";
|
|
if (userInfoBean!.city != null) {
|
|
onLineCity = "$onLineCity·${userInfoBean!.city}";
|
|
}
|
|
|
|
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age,
|
|
userInfoBean!.role, userInfoBean!.orientation);
|
|
} else {
|
|
showToast(bean.msg);
|
|
}
|
|
|
|
|
|
var myAlbumData = await DioManager.instance.get(url: Api.getTaAlbum+userId+"/albums");
|
|
var myAlbumBean = BaseResponse<AlbumResponseBean>.fromJson(
|
|
myAlbumData, (myAlbumData) => AlbumResponseBean.fromJson(myAlbumData));
|
|
if(myAlbumBean.isSuccess()){
|
|
myAlbumBean.data.lists.forEach((element) {
|
|
state.imaglist.add(AlbumListItem(id: element.id,type: element.type,url:element.url));
|
|
});
|
|
}
|
|
|
|
|
|
|
|
var urgedata = await DioManager.instance.get(url: Api.getUrgeStatus+userId+"/urge/album/status");
|
|
var urgeBean = BaseResponse<UrgentStatus>.fromJson(
|
|
urgedata, (urgedata) => UrgentStatus.fromJson(urgedata));
|
|
isUrgeStatus = urgeBean.data.isUrgent;
|
|
|
|
}
|
|
update();
|
|
|
|
var data =
|
|
await DioManager.instance.get(url: Api.getqiniuToken, 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()){
|
|
showToast("催更成功");
|
|
isUrgeStatus = true;
|
|
update();
|
|
}
|
|
|
|
}
|
|
|
|
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);
|
|
update();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
Future getImageFile() async {
|
|
try {
|
|
final XFile? pickedFile = await _picker.pickImage(
|
|
source: ImageSource.gallery,
|
|
);
|
|
if (null == pickedFile) {
|
|
return;
|
|
}
|
|
|
|
SmartDialog.showLoading();
|
|
upDataImage(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.add(AlbumListItem(id:myAlbumBean.data.id,type:myAlbumBean.data.type,url: result));
|
|
update();
|
|
}
|
|
|
|
});
|
|
} catch (e) {}
|
|
}
|
|
|
|
}
|
|
|
|
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;
|
|
|
|
ResponseBean({
|
|
required this.user,
|
|
required this.likeMeCount,
|
|
required this.imageUrgeCount,
|
|
});
|
|
|
|
factory ResponseBean.fromJson(Map<String, dynamic> json) {
|
|
return ResponseBean(
|
|
user: UserBean.fromJson(json['user']),
|
|
likeMeCount: json['like_me_count'],
|
|
imageUrgeCount: json['image_urge_count'],
|
|
);
|
|
}
|
|
}
|
|
|
|
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;
|
|
|
|
AlbumListItem({
|
|
required this.id,
|
|
required this.type,
|
|
required this.url,
|
|
});
|
|
|
|
factory AlbumListItem.fromJson(Map<String, dynamic> json) {
|
|
return AlbumListItem(
|
|
id: json['id'],
|
|
type: json['type'],
|
|
url: json['url'],
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
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'],
|
|
);
|
|
}
|
|
}
|
|
|
|
|