新增del请求 完成个人信息相册相关和催更
This commit is contained in:
parent
9e55ec1d68
commit
7bd1baad87
@ -1,15 +1,11 @@
|
|||||||
import 'dart:io';
|
|
||||||
import 'dart:math';
|
|
||||||
|
|
||||||
import 'package:circle_app/network/dio_manager.dart';
|
import 'package:circle_app/network/dio_manager.dart';
|
||||||
import 'package:circle_app/router/app_routers.dart';
|
import 'package:circle_app/router/app_routers.dart';
|
||||||
import 'package:circle_app/util/util.dart';
|
import 'package:circle_app/util/util.dart';
|
||||||
import 'package:flutter_luban/flutter_luban.dart';
|
|
||||||
import 'package:flutter_pickers/time_picker/model/pduration.dart';
|
import 'package:flutter_pickers/time_picker/model/pduration.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:qiniu_flutter_sdk/qiniu_flutter_sdk.dart';
|
|
||||||
|
|
||||||
import '../../../common/config.dart';
|
import '../../../common/config.dart';
|
||||||
import '../../../network/api.dart';
|
import '../../../network/api.dart';
|
||||||
@ -17,7 +13,6 @@ import '../../../util/device.dart';
|
|||||||
import '../../../util/qiniu.dart';
|
import '../../../util/qiniu.dart';
|
||||||
import '../../select_circle/logic.dart';
|
import '../../select_circle/logic.dart';
|
||||||
import '../../userinfo/logic.dart';
|
import '../../userinfo/logic.dart';
|
||||||
import '../login/logic.dart';
|
|
||||||
import 'state.dart';
|
import 'state.dart';
|
||||||
|
|
||||||
class Complete_materialLogic extends GetxController {
|
class Complete_materialLogic extends GetxController {
|
||||||
@ -59,6 +54,9 @@ class Complete_materialLogic extends GetxController {
|
|||||||
state.textEditingController.text = userInfoBean!.nickname;
|
state.textEditingController.text = userInfoBean!.nickname;
|
||||||
state.descEditingController.text = userInfoBean!.signature;
|
state.descEditingController.text = userInfoBean!.signature;
|
||||||
headUrl = userInfoBean!.avatar;
|
headUrl = userInfoBean!.avatar;
|
||||||
|
userInfoBean!.interests.forEach((element) {
|
||||||
|
numbers.add(MyConfigData(element.id.toString(),element.title,false));
|
||||||
|
});
|
||||||
update();
|
update();
|
||||||
// state.nickName = userInfoBean!.nickname;
|
// state.nickName = userInfoBean!.nickname;
|
||||||
}else{
|
}else{
|
||||||
@ -72,7 +70,10 @@ class Complete_materialLogic extends GetxController {
|
|||||||
await DioManager.instance.get(url: Api.getqiniuToken, params: {});
|
await DioManager.instance.get(url: Api.getqiniuToken, params: {});
|
||||||
var bean = BaseResponse<QnTokenData>.fromJson(
|
var bean = BaseResponse<QnTokenData>.fromJson(
|
||||||
data, (data) => QnTokenData.fromJson(data));
|
data, (data) => QnTokenData.fromJson(data));
|
||||||
quToken = bean.data!.token.toString();
|
if(bean.isSuccess()){
|
||||||
|
quToken = bean.data!.token.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
var data1 =
|
var data1 =
|
||||||
await DioManager.instance.get(url: Api.getCircleList, params: {});
|
await DioManager.instance.get(url: Api.getCircleList, params: {});
|
||||||
@ -102,7 +103,7 @@ class Complete_materialLogic extends GetxController {
|
|||||||
}
|
}
|
||||||
SmartDialog.showLoading();
|
SmartDialog.showLoading();
|
||||||
upDataImage(quToken,pickedFile!,CONFIG.USER_INFO_AVATAR,(result){
|
upDataImage(quToken,pickedFile!,CONFIG.USER_INFO_AVATAR,(result){
|
||||||
SmartDialog.dismiss();
|
SmartDialog.dismiss(force: true);
|
||||||
headUrl = result;
|
headUrl = result;
|
||||||
update();
|
update();
|
||||||
});
|
});
|
||||||
@ -175,38 +176,60 @@ class Complete_materialLogic extends GetxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
editInfo() async {
|
editInfo() async {
|
||||||
Map<String, dynamic> params = Map();
|
if (state.textEditingController.text.isEmpty) {
|
||||||
if (numbers.length > 0) {
|
showToast('请输入您的昵称');
|
||||||
List<String> interestsList = [];
|
return;
|
||||||
numbers.forEach((element) {
|
} else if (state.sex.isEmpty) {
|
||||||
interestsList.add(element.id);
|
showToast('请选择您的属性');
|
||||||
});
|
return;
|
||||||
params['interests'] = interestsList;
|
} else if (state.age.isEmpty) {
|
||||||
|
showToast('请选择您的年龄');
|
||||||
|
return;
|
||||||
|
} else if (state.role.isEmpty) {
|
||||||
|
showToast('请选择您的角色');
|
||||||
|
return;
|
||||||
|
} else if (state.role.isEmpty) {
|
||||||
|
showToast('请选择您的角色');
|
||||||
|
return;
|
||||||
|
} else if (state.orientation.isEmpty) {
|
||||||
|
showToast('请选择您的取向');
|
||||||
|
return;
|
||||||
|
} else if (numbers.isEmpty) {
|
||||||
|
showToast('请选择您的兴趣');
|
||||||
|
// return;
|
||||||
|
} else if (state.descEditingController.text.isEmpty) {
|
||||||
|
showToast('请输入您的交友宣言');
|
||||||
|
return;
|
||||||
|
} else if (state.descEditingController.text.length < 5) {
|
||||||
|
showToast('您的交友宣言太短');
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (!headUrl.isEmpty) {
|
if (headUrl == '') {
|
||||||
params['avatar_url'] = headUrl;
|
showToast('请上传头像');
|
||||||
}
|
return;
|
||||||
if (!state.brithday.isEmpty) {
|
|
||||||
params['birthday'] = state.brithday;
|
|
||||||
}
|
|
||||||
if (!state.genderId.isEmpty) {
|
|
||||||
params['gender'] = state.genderId;
|
|
||||||
}
|
|
||||||
if (!state.roleId.isEmpty) {
|
|
||||||
params['role'] = state.roleId;
|
|
||||||
}
|
|
||||||
if (!state.orientationId.isEmpty) {
|
|
||||||
params['orientation'] = state.orientationId;
|
|
||||||
}
|
}
|
||||||
LatLng location = await getLocation();
|
LatLng location = await getLocation();
|
||||||
params['lat'] = location.latitude;
|
List<String> interestsList = [];
|
||||||
params['lng'] = location.longitude;
|
numbers.forEach((element) {
|
||||||
params['nickname'] = state.textEditingController.text;
|
interestsList.add(element.id);
|
||||||
params['signature'] = state.descEditingController.text;
|
});
|
||||||
var data = await DioManager.instance.put(url: Api.UpdataUserInfo, params: params);
|
var data = await DioManager.instance.put(url: Api.UpdataUserInfo, params: {
|
||||||
|
'avatar_url': headUrl,
|
||||||
|
'birthday': state.brithday,
|
||||||
|
'gender': state.genderId, //性别
|
||||||
|
'role': state.roleId, //Int 角色
|
||||||
|
'interests': interestsList, //兴趣
|
||||||
|
'orientation': state.orientationId, //Int 爱好
|
||||||
|
'lat': location.latitude,
|
||||||
|
'lng': location.longitude,
|
||||||
|
'nickname': state.textEditingController.text,
|
||||||
|
'signature': state.descEditingController.text,
|
||||||
|
});
|
||||||
var bean = BaseResponse<String>.fromJson(data, (data) => data);
|
var bean = BaseResponse<String>.fromJson(data, (data) => data);
|
||||||
if (bean.code == 200) {
|
if (bean.code == 200) {
|
||||||
Get.back();
|
Get.back();
|
||||||
|
}else{
|
||||||
|
showToast(bean.msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,13 +9,15 @@ import 'package:flutter_pickers/time_picker/model/date_mode.dart';
|
|||||||
import 'package:flutter_pickers/time_picker/model/pduration.dart';
|
import 'package:flutter_pickers/time_picker/model/pduration.dart';
|
||||||
import 'package:flutter_pickers/time_picker/model/suffix.dart';
|
import 'package:flutter_pickers/time_picker/model/suffix.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
import 'logic.dart';
|
import 'logic.dart';
|
||||||
|
|
||||||
class Complete_materialPage extends StatelessWidget {
|
class Complete_materialPage extends StatelessWidget {
|
||||||
Complete_materialPage({Key? key}) : super(key: key);
|
Complete_materialPage({Key? key}) : super(key: key);
|
||||||
final logic = Get.put(Complete_materialLogic());
|
|
||||||
|
// final logic = Get.put(Complete_materialLogic());
|
||||||
|
|
||||||
// PickerStyle pickerStyle = PickerStyle();
|
// PickerStyle pickerStyle = PickerStyle();
|
||||||
@override
|
@override
|
||||||
@ -63,8 +65,8 @@ class Complete_materialPage extends StatelessWidget {
|
|||||||
)
|
)
|
||||||
: ClipOval(
|
: ClipOval(
|
||||||
child: CachedNetworkImage(
|
child: CachedNetworkImage(
|
||||||
fit: BoxFit.fill,
|
fit: BoxFit.cover,
|
||||||
imageUrl: controller.headUrl,
|
imageUrl: controller.headUrl,
|
||||||
width: 86.sp,
|
width: 86.sp,
|
||||||
height: 86.sp,
|
height: 86.sp,
|
||||||
),
|
),
|
||||||
@ -156,9 +158,9 @@ class Complete_materialPage extends StatelessWidget {
|
|||||||
var data = await Get.toNamed(
|
var data = await Get.toNamed(
|
||||||
AppRoutes.SelectCircleActivity,
|
AppRoutes.SelectCircleActivity,
|
||||||
arguments: {
|
arguments: {
|
||||||
"interestMap" :controller.configBean.interestMap,
|
"interestMap": controller.configBean.interestMap,
|
||||||
'selectCircle':controller.numbers,
|
'selectCircle': controller.numbers,
|
||||||
"isRodio" :false
|
"isRodio": false
|
||||||
});
|
});
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
controller.numbers = data;
|
controller.numbers = data;
|
||||||
@ -345,7 +347,6 @@ class Complete_materialPage extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
showSexPiker(context, Complete_materialLogic controller) {
|
showSexPiker(context, Complete_materialLogic controller) {
|
||||||
Pickers.showSinglePicker(context,
|
Pickers.showSinglePicker(context,
|
||||||
pickerStyle: DefaultPickerStyle.dark(),
|
pickerStyle: DefaultPickerStyle.dark(),
|
||||||
|
|||||||
@ -352,8 +352,9 @@ class MinefragmentPage extends StatelessWidget {
|
|||||||
Widget _buildAvatarRow(MinefragmentLogic logic) {
|
Widget _buildAvatarRow(MinefragmentLogic logic) {
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
behavior: HitTestBehavior.opaque,
|
behavior: HitTestBehavior.opaque,
|
||||||
onTap: () {
|
onTap: () async{
|
||||||
Get.toNamed(AppRoutes.UserInfoActivity, arguments: "");
|
await Get.toNamed(AppRoutes.UserInfoActivity, arguments: "");
|
||||||
|
logic.onInit();
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
width: Get.width,
|
width: Get.width,
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import 'dart:io';
|
|
||||||
|
|
||||||
import 'package:flutter_luban/flutter_luban.dart';
|
import 'dart:convert';
|
||||||
|
|
||||||
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';
|
||||||
@ -23,7 +23,10 @@ class UserinfoLogic extends GetxController {
|
|||||||
var onLineCity = "";
|
var onLineCity = "";
|
||||||
var isLikeFoMsg = '';
|
var isLikeFoMsg = '';
|
||||||
var quToken = '';
|
var quToken = '';
|
||||||
bool isMe = false;
|
bool isMe = false;
|
||||||
|
bool isEdit = false;
|
||||||
|
bool isUrgeStatus = false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() async {
|
void onInit() async {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
@ -32,54 +35,105 @@ bool isMe = false;
|
|||||||
var data = await DioManager.instance.get(url: Api.getUserInfo);
|
var data = await DioManager.instance.get(url: Api.getUserInfo);
|
||||||
var bean = BaseResponse<ResponseBean>.fromJson(
|
var bean = BaseResponse<ResponseBean>.fromJson(
|
||||||
data, (data) => ResponseBean.fromJson(data));
|
data, (data) => ResponseBean.fromJson(data));
|
||||||
if(bean.isSuccess()){
|
if (bean.isSuccess()) {
|
||||||
isLikeFoMsg = "${bean.data.imageUrgeCount}位圈友感兴趣,其中${bean.data.likeMeCount}位已催您更新";
|
isLikeFoMsg =
|
||||||
|
"${bean.data.imageUrgeCount}位圈友感兴趣,其中${bean.data.likeMeCount}位已催您更新";
|
||||||
userInfoBean = bean.data.user;
|
userInfoBean = bean.data.user;
|
||||||
isVip = userInfoBean!.vip;
|
isVip = userInfoBean!.vip;
|
||||||
|
|
||||||
onLineCity = userInfoBean!.isOnline == true? "在线":"离线";
|
onLineCity = userInfoBean!.isOnline == true ? "在线" : "离线";
|
||||||
if(userInfoBean!.city != null) {
|
if (userInfoBean!.city != null) {
|
||||||
onLineCity = "$onLineCity·${userInfoBean!.city}";
|
onLineCity = "$onLineCity·${userInfoBean!.city}";
|
||||||
}
|
}
|
||||||
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, userInfoBean!.role, userInfoBean!.orientation);
|
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age,
|
||||||
}else{
|
userInfoBean!.role, userInfoBean!.orientation);
|
||||||
|
} else {
|
||||||
showToast(bean.msg);
|
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 {
|
} else {
|
||||||
isMe = false;
|
isMe = false;
|
||||||
var data = await DioManager.instance.get(url: Api.getUserInfoTA+userId+"/home");
|
var data = await DioManager.instance
|
||||||
|
.get(url: "${Api.getUserInfoTA + userId}/home");
|
||||||
var bean = BaseResponse<ResponseBean>.fromJson(
|
var bean = BaseResponse<ResponseBean>.fromJson(
|
||||||
data, (data) => ResponseBean.fromJson(data));
|
data, (data) => ResponseBean.fromJson(data));
|
||||||
if(bean.isSuccess()){
|
if (bean.isSuccess()) {
|
||||||
isLikeFoMsg = "${bean.data.imageUrgeCount}位圈友感兴趣,其中${bean.data.likeMeCount}位已催您更新";
|
isLikeFoMsg =
|
||||||
userInfoBean = bean.data!.user;
|
"${bean.data.imageUrgeCount}位圈友感兴趣,其中${bean.data.likeMeCount}位已催您更新";
|
||||||
isVip = userInfoBean!.vip;
|
userInfoBean = bean.data!.user;
|
||||||
onLineCity = userInfoBean!.isOnline == true? "在线":"离线";
|
isVip = userInfoBean!.vip;
|
||||||
if(userInfoBean!.city != null){
|
onLineCity = userInfoBean!.isOnline == true ? "在线" : "离线";
|
||||||
onLineCity = "$onLineCity·${userInfoBean!.city}";
|
if (userInfoBean!.city != null) {
|
||||||
}
|
onLineCity = "$onLineCity·${userInfoBean!.city}";
|
||||||
|
}
|
||||||
|
|
||||||
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, userInfoBean!.role, userInfoBean!.orientation);
|
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age,
|
||||||
}else{
|
userInfoBean!.role, userInfoBean!.orientation);
|
||||||
|
} else {
|
||||||
showToast(bean.msg);
|
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(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();
|
update();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var data =
|
var data =
|
||||||
await DioManager.instance.get(url: Api.getqiniuToken, params: {});
|
await DioManager.instance.get(url: Api.getqiniuToken, params: {});
|
||||||
var bean = BaseResponse<QnTokenData>.fromJson(
|
var bean = BaseResponse<QnTokenData>.fromJson(
|
||||||
data, (data) => QnTokenData.fromJson(data));
|
data, (data) => QnTokenData.fromJson(data));
|
||||||
quToken = bean.data!.token.toString();
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
updataImage(){
|
|
||||||
showToast(""+state.updataimaglist.toString());
|
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 {
|
Future getImageFile() async {
|
||||||
@ -87,20 +141,29 @@ bool isMe = false;
|
|||||||
final XFile? pickedFile = await _picker.pickImage(
|
final XFile? pickedFile = await _picker.pickImage(
|
||||||
source: ImageSource.gallery,
|
source: ImageSource.gallery,
|
||||||
);
|
);
|
||||||
if(null==pickedFile){
|
if (null == pickedFile) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SmartDialog.showLoading();
|
|
||||||
upDataImage(quToken,pickedFile!,CONFIG.USER_ALBUM_IMAGE,(result){
|
|
||||||
SmartDialog.dismiss();
|
|
||||||
state.imaglist.add(result);
|
|
||||||
state.updataimaglist.add(result);
|
|
||||||
update();
|
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
|
|
||||||
}
|
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 {
|
class UserBean {
|
||||||
@ -114,6 +177,7 @@ class UserBean {
|
|||||||
int gender;
|
int gender;
|
||||||
int role;
|
int role;
|
||||||
int orientation;
|
int orientation;
|
||||||
|
List<Interest> interests;
|
||||||
double lng;
|
double lng;
|
||||||
double lat;
|
double lat;
|
||||||
String? city;
|
String? city;
|
||||||
@ -132,6 +196,7 @@ class UserBean {
|
|||||||
required this.gender,
|
required this.gender,
|
||||||
required this.role,
|
required this.role,
|
||||||
required this.orientation,
|
required this.orientation,
|
||||||
|
required this.interests,
|
||||||
required this.lng,
|
required this.lng,
|
||||||
required this.lat,
|
required this.lat,
|
||||||
this.city,
|
this.city,
|
||||||
@ -152,16 +217,38 @@ class UserBean {
|
|||||||
gender: json['gender'],
|
gender: json['gender'],
|
||||||
role: json['role'],
|
role: json['role'],
|
||||||
orientation: json['orientation'],
|
orientation: json['orientation'],
|
||||||
|
interests: List<Interest>.from(
|
||||||
|
json['interests'].map((x) => Interest.fromJson(x)),
|
||||||
|
),
|
||||||
lng: json['lng'],
|
lng: json['lng'],
|
||||||
lat: json['lat'],
|
lat: json['lat'],
|
||||||
city: json['city'],
|
city: json['city'],
|
||||||
isOnline: json['isOnline'],
|
isOnline: json['isOnline'],
|
||||||
offlineTime: json['offlineTime'] != null ? DateTime.parse(json['offlineTime']) : null,
|
offlineTime: json['offlineTime'] != null
|
||||||
|
? DateTime.parse(json['offlineTime'])
|
||||||
|
: null,
|
||||||
avatarThumb: json['avatar_thumb'],
|
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 {
|
class ResponseBean {
|
||||||
UserBean user;
|
UserBean user;
|
||||||
int likeMeCount;
|
int likeMeCount;
|
||||||
@ -182,3 +269,76 @@ class ResponseBean {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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'],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
|
import 'logic.dart';
|
||||||
|
|
||||||
class UserinfoState {
|
class UserinfoState {
|
||||||
UserinfoState() {
|
UserinfoState() {
|
||||||
|
|
||||||
///Initialize variables
|
///Initialize variables
|
||||||
}
|
}
|
||||||
List<String> imaglist = [];
|
List<AlbumListItem> imaglist = [];
|
||||||
List<String> updataimaglist = [];
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -87,7 +87,8 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
// showToast("完善资料");
|
// showToast("完善资料");
|
||||||
Get.toNamed(AppRoutes.Complete_materialPage, arguments: "user");
|
Get.toNamed(AppRoutes.Complete_materialPage, arguments: "user");
|
||||||
|
// controller.onInit();
|
||||||
},
|
},
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Container(
|
child: Container(
|
||||||
@ -243,7 +244,7 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
// margin: EdgeInsets.only(top: 18.sp, bottom: 18.sp),
|
// margin: EdgeInsets.only(top: 18.sp, bottom: 18.sp),
|
||||||
height: 59.sp,
|
height: 59.sp,
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
itemCount: 8,
|
itemCount: controller.userInfoBean==null ? 0 : controller.userInfoBean!.interests.length,
|
||||||
// 替换为实际的 item 数量
|
// 替换为实际的 item 数量
|
||||||
scrollDirection: Axis.horizontal,
|
scrollDirection: Axis.horizontal,
|
||||||
// 设置为水平方向
|
// 设置为水平方向
|
||||||
@ -275,7 +276,7 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
top: 2.sp, bottom: 2.sp, left: 15.sp, right: 15.sp),
|
top: 2.sp, bottom: 2.sp, left: 15.sp, right: 15.sp),
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Text(
|
child: Text(
|
||||||
"圆角背景边框",
|
controller.userInfoBean!.interests[index].title,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 11.0,
|
fontSize: 11.0,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
@ -334,15 +335,17 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
GestureDetector(onTap: (){
|
GestureDetector(onTap: (){
|
||||||
controller.updataImage();
|
controller.isMe? controller.isEdit = !controller.isEdit : controller.urgeChange();
|
||||||
|
controller.update();
|
||||||
|
// controller.updataImage();
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(17),
|
borderRadius: BorderRadius.circular(17),
|
||||||
gradient: LinearGradient(
|
gradient: LinearGradient(
|
||||||
colors: [
|
colors: [
|
||||||
controller.state.updataimaglist.length==0 && controller.isMe? Color(0xFF4A3E5D):Color(0xFF06F9FA),
|
Color(0xFF06F9FA),
|
||||||
controller.state.updataimaglist.length==0 && controller.isMe? Color(0xFF344143):Color(0xFFDC5BFD),
|
Color(0xFFDC5BFD),
|
||||||
],
|
],
|
||||||
begin: Alignment.centerLeft,
|
begin: Alignment.centerLeft,
|
||||||
end: Alignment.centerRight,
|
end: Alignment.centerRight,
|
||||||
@ -351,7 +354,7 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
top: 2.sp, bottom: 2.sp, left: 12.sp, right: 12.sp),
|
top: 2.sp, bottom: 2.sp, left: 12.sp, right: 12.sp),
|
||||||
child: Text(
|
child: Text(
|
||||||
controller.isMe? "完成" : "催更",
|
controller.isMe? controller.isEdit?"完成": "管理" : controller.isUrgeStatus? "已催更":"催更",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
@ -367,9 +370,11 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||||
crossAxisCount: 3, // 每行显示的项目数量
|
crossAxisCount: 3, // 每行显示的项目数量
|
||||||
),
|
),
|
||||||
itemCount:controller.isMe? controller.state.imaglist.length+1: controller.state.imaglist.length, // 项目的总数量,包括固定图片和接口获取的项目
|
itemCount:controller.isMe?
|
||||||
|
controller.isEdit? controller.state.imaglist.length+1 : controller.state.imaglist.length:
|
||||||
|
controller.state.imaglist.length, // 项目的总数量,包括固定图片和接口获取的项目
|
||||||
itemBuilder: (BuildContext context, int index) {
|
itemBuilder: (BuildContext context, int index) {
|
||||||
if(controller.isMe){
|
if(controller.isMe&&controller.isEdit){
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
// 第一个项目,显示固定的图片
|
// 第一个项目,显示固定的图片
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
@ -389,7 +394,7 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
margin: EdgeInsets.all(5.sp),
|
margin: EdgeInsets.all(5.sp),
|
||||||
child: Center(
|
child: Center(
|
||||||
child: _buildImageItem(
|
child: _buildImageItem(
|
||||||
controller.state.imaglist[index-1],
|
controller.state.imaglist[index-1].url,
|
||||||
controller,index-1)),
|
controller,index-1)),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -398,7 +403,7 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
margin: EdgeInsets.all(5.sp),
|
margin: EdgeInsets.all(5.sp),
|
||||||
child: Center(
|
child: Center(
|
||||||
child: _buildImageItem(
|
child: _buildImageItem(
|
||||||
controller.state.imaglist[index],
|
controller.state.imaglist[index].url,
|
||||||
controller,index)),
|
controller,index)),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -555,11 +560,11 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
_showDelImgDialog(context,controller,index);
|
_showDelImgDialog(context,controller,index);
|
||||||
|
|
||||||
},
|
},
|
||||||
child: Image(
|
child:controller.isEdit? Image(
|
||||||
image: AssetImage(getMineImage("icon_img_del")),
|
image: AssetImage(getMineImage("icon_img_del")),
|
||||||
width: 20.sp,
|
width: 20.sp,
|
||||||
height: 20.sp,
|
height: 20.sp,
|
||||||
),
|
):Container(),
|
||||||
))
|
))
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
@ -744,10 +749,9 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
controller.state.updataimaglist.remove(controller.state.updataimaglist[index]);
|
controller.delAlbumImage(index);
|
||||||
controller.state.imaglist.removeAt(index);
|
|
||||||
|
|
||||||
controller.update();
|
|
||||||
|
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import 'package:circle_app/router/app_routers.dart';
|
|||||||
import 'package:circle_app/util/util.dart';
|
import 'package:circle_app/util/util.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:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
|
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
|
||||||
|
|
||||||
@ -107,6 +108,7 @@ class _MyAppState extends State<MyApp> {
|
|||||||
initialBinding: SplashBinding(),
|
initialBinding: SplashBinding(),
|
||||||
getPages: AppPages.routes,
|
getPages: AppPages.routes,
|
||||||
home: SplashPage(),
|
home: SplashPage(),
|
||||||
|
builder: FlutterSmartDialog.init(),
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -56,4 +56,34 @@ class Api {
|
|||||||
|
|
||||||
//他人信息
|
//他人信息
|
||||||
static const getUserInfoTA = 'user-service/user/';
|
static const getUserInfoTA = 'user-service/user/';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//我的相册
|
||||||
|
static const getMyAlbum = 'up-service/my/albums';
|
||||||
|
|
||||||
|
|
||||||
|
//他的相册
|
||||||
|
static const getTaAlbum = 'up-service/user/';
|
||||||
|
|
||||||
|
|
||||||
|
//上传相册照片
|
||||||
|
static const updataAlbum = 'up-service/album';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//删除相册照片
|
||||||
|
static const deleteAlbum = 'up-service/album/';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//催更Ta的相册
|
||||||
|
static const urgeAlbum = 'up-service/user/';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//获取催更状态
|
||||||
|
static const getUrgeStatus = 'up-service/user/';
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -107,6 +107,30 @@ class DioManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Future delete<T>({
|
||||||
|
required String url,
|
||||||
|
Map<String, dynamic>? params,
|
||||||
|
bool isAddTokenInHeader = true,
|
||||||
|
bool isShowErrorToast = true,
|
||||||
|
FormData? formData,
|
||||||
|
CancelToken? cancelToken,
|
||||||
|
ProgressCallback? onSendProgress,
|
||||||
|
ProgressCallback? onReceiveProgress,
|
||||||
|
}) async {
|
||||||
|
return await requestHttp<T>(
|
||||||
|
url,
|
||||||
|
method: DioMethod.delete,
|
||||||
|
// 修改请求方法为 delete
|
||||||
|
isShowErrorToast: isShowErrorToast,
|
||||||
|
params: params,
|
||||||
|
formData: formData,
|
||||||
|
cancelToken: cancelToken,
|
||||||
|
onSendProgress: onSendProgress,
|
||||||
|
onReceiveProgress: onReceiveProgress,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Dio request 方法
|
/// Dio request 方法
|
||||||
Future requestHttp<T>(String url,
|
Future requestHttp<T>(String url,
|
||||||
|
|||||||
@ -59,7 +59,7 @@ class AppPages {
|
|||||||
),
|
),
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.Complete_materialPage,
|
name: AppRoutes.Complete_materialPage,
|
||||||
page: () => FlutterSmartDialog(child: Complete_materialPage(),),
|
page: () => Complete_materialPage(),
|
||||||
binding: Complete_materialBinding(),
|
binding: Complete_materialBinding(),
|
||||||
),
|
),
|
||||||
GetPage(
|
GetPage(
|
||||||
@ -104,12 +104,12 @@ class AppPages {
|
|||||||
),
|
),
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.UserInfoActivity,
|
name: AppRoutes.UserInfoActivity,
|
||||||
page: () => FlutterSmartDialog(child: UserinfoPage()),
|
page: () => UserinfoPage(),
|
||||||
binding: UserinfoBinding(),
|
binding: UserinfoBinding(),
|
||||||
),
|
),
|
||||||
GetPage(
|
GetPage(
|
||||||
name: AppRoutes.Call_out,
|
name: AppRoutes.Call_out,
|
||||||
page: () => FlutterSmartDialog(child:Call_outPage() ,) ,
|
page: () => Call_outPage() ,
|
||||||
binding: Call_outBinding(),
|
binding: Call_outBinding(),
|
||||||
),
|
),
|
||||||
GetPage(name: AppRoutes.Login, page: () => LoginPage()),
|
GetPage(name: AppRoutes.Login, page: () => LoginPage()),
|
||||||
|
|||||||
@ -67,7 +67,7 @@ dependencies:
|
|||||||
#权限申请
|
#权限申请
|
||||||
permission_handler: ^10.3.0
|
permission_handler: ^10.3.0
|
||||||
#loading
|
#loading
|
||||||
flutter_smart_dialog: 4.9.2
|
flutter_smart_dialog: ^4.9.2
|
||||||
#获取位置信息
|
#获取位置信息
|
||||||
geolocator: ^9.0.2
|
geolocator: ^9.0.2
|
||||||
#获取视频第一帧
|
#获取视频第一帧
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user