circle_app/circle_app/lib/app/userinfo/logic.dart
2023-07-19 17:52:53 +08:00

382 lines
9.5 KiB
Dart

import 'package:flutter/cupertino.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 '../../common/config.dart';
import '../../network/api.dart';
import '../../network/dio_manager.dart';
import '../../util/SharedPreferencesHelper.dart';
import '../../util/qiniu.dart';
import '../../util/util.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;
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) {
fetchUserInfo(Api.getUserInfo);
fetchMyAlbum(Api.getMyAlbum);
} else {
fetchUserInfo("${Api.getUserInfoTA + userId}/home");
fetchMyAlbum("${Api.getTaAlbum + userId}/albums");
fetchUrgeStatus("${Api.getUrgeStatus + userId}/urge/album/status");
}
SmartDialog.dismiss();
fetchQnToken(Api.getqiniuToken);
}
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.imageUrgeCount}位圈友感兴趣,其中${bean.data.likeMeCount}位已催您更新";
userInfoBean = bean.data.user;
isVip = userInfoBean?.vip ?? 0;
imId = bean.data.accountId;
if (isMe) {
isOnline = true;
}else{
isOnline = userInfoBean!.isOnline;
}
onLineCity = isOnline ? "在线" : "离线";
if (userInfoBean?.city != null) {
onLineCity = "$onLineCity·${userInfoBean!.city}";
}else{
onLineCity = "$onLineCity·外星";
}
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, userInfoBean!.role, userInfoBean!.orientation);
} else {
showToast(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()) {
showToast("催更成功");
isUrgeStatus = true;
update();
}else {
showToast(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 {
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();
}
showToast(bean.msg);
}
setBlock() async {
var data = await DioManager.instance
.post(url: "${Api.setBlock + userId}/block", params: {'status': "1"});
var bean = BaseResponse<dynamic>.fromJson(
data,
(jsonData) => jsonData,
);
if (bean.isSuccess()) {
Navigator.pop(Get.context!);
update();
}
showToast(bean.msg);
}
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 (_) {}
}
}
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;
String accountId;
ResponseBean(
{required this.user,
required this.likeMeCount,
required this.imageUrgeCount,
required this.accountId,
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'],
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;
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'],
);
}
}