封装上传图片 个人资料细节修改

This commit is contained in:
YangYuhao 2023-06-30 14:55:55 +08:00
parent 194745786e
commit 82921e0d04
16 changed files with 509 additions and 366 deletions

View File

@ -15,6 +15,7 @@ import 'package:shared_preferences/shared_preferences.dart';
import 'package:video_player/video_player.dart';
import 'package:video_thumbnail/video_thumbnail.dart';
import '../../common/Widgets/open_vip_tip/view.dart';
import '../../common/errorcode.dart';
import '../../network/api.dart';
import '../../network/dio_manager.dart';
@ -35,7 +36,7 @@ class Call_outLogic extends GetxController {
var quToken = '';
VideoPlayerController? videoPlayerController;
List<MyConfigData> numbers = [];
List<MyConfigData> myConfigData= Get.arguments['numbers'];
List<MyConfigData> myConfigData = Get.arguments['numbers'];
int vip = 0;
@override
@ -47,20 +48,20 @@ class Call_outLogic extends GetxController {
@override
void onInit() async {
super.onInit();
if(myConfigData!=null){
if (myConfigData != null) {
// print(myConfigData.name);
numbers.addAll(myConfigData);
circleName = numbers[0].name;
SharedPreferences prefs = await SharedPreferences.getInstance();
vip = prefs.getInt("vip")??0;
if(vip == 2){
vip = prefs.getInt("vip") ?? 0;
if (vip == 2) {
isCheck = true;
}
update();
}
var data = await DioManager.instance.get(url: Api.getCircleList, params: {});
var data =
await DioManager.instance.get(url: Api.getCircleList, params: {});
var bean = BaseResponse<ConfigBean>.fromJson(
data, (data) => ConfigBean.fromJson(data));
if (bean.isSuccess()) {
@ -74,7 +75,15 @@ class Call_outLogic extends GetxController {
var qiniuBean = BaseResponse<QnTokenData>.fromJson(
quniuData, (quniuData) => QnTokenData.fromJson(quniuData));
quToken = qiniuBean.data!.token.toString();
}
showRechargeDialog(){
Get.bottomSheet(
Scaffold(
backgroundColor: Colors.transparent,
body: Open_vip_tipPage(),
),
isScrollControlled: true,
enableDrag: false);
}
@ -124,15 +133,18 @@ class Call_outLogic extends GetxController {
'useQueen': isCheck,
});
var beandata = BaseResponse<dynamic>.fromJson(data, (jsonData) => jsonData,);
var beandata = BaseResponse<dynamic>.fromJson(
data,
(jsonData) => jsonData,
);
if (beandata.isSuccess()) {
showToast(beandata.msg);
// Navigator.pop(Get.context!, numbers);
Get.back();
}else if(beandata.code == 30503){
if(beandata.data ==null){
return ;
} else if (beandata.code == 30503) {
if (beandata.data == null) {
return;
}
showToast(beandata.msg);
var callOutBean = BaseResponse<List<String>>.fromJson(
@ -140,19 +152,26 @@ class Call_outLogic extends GetxController {
(jsonData) => List<String>.from(jsonData),
);
textEditingController.text = filterSensitiveWords(textEditingController.text , callOutBean.data!);
print(filterSensitiveWords(textEditingController.text , callOutBean.data!));
textEditingController.text =
filterSensitiveWords(textEditingController.text, callOutBean.data!);
print(
filterSensitiveWords(textEditingController.text, callOutBean.data!));
update();
} else if(beandata.code == 30505){
var callOutBean = BaseResponse<CirclePaymentBean>.fromJson(data, (jsonData) => CirclePaymentBean.fromJson(jsonData),);
} else if (beandata.code == 30505) {
var callOutBean = BaseResponse<CirclePaymentBean>.fromJson(
data,
(jsonData) => CirclePaymentBean.fromJson(jsonData),
);
showDialog();
// tipWdiget()
}else{
} else {
showToast(beandata.msg);
}
}
void showDialog(){
Get.bottomSheet(Scaffold(
void showDialog() {
Get.bottomSheet(
Scaffold(
backgroundColor: Colors.transparent,
body: Container(
width: Get.width,
@ -184,14 +203,16 @@ class Call_outLogic extends GetxController {
top: 24.sp,
child: Text(
'解锁圈子才能发布喊话',
style: TextStyle(color: Colors.white, fontSize: 16.sp),
style:
TextStyle(color: Colors.white, fontSize: 16.sp),
)),
Positioned(
left: 17.sp,
top: 64.sp,
child: Text(
'为什么要解锁圈子?',
style: TextStyle(color: Colors.white, fontSize: 16.sp),
style:
TextStyle(color: Colors.white, fontSize: 16.sp),
)),
Positioned(
top: 98.sp,
@ -215,10 +236,14 @@ class Call_outLogic extends GetxController {
gradient: const LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [Color(0xff0AFCFF), Color(0xffD739EA)])),
colors: [
Color(0xff0AFCFF),
Color(0xffD739EA)
])),
child: Text(
'立即解锁',
style: TextStyle(color: Colors.white, fontSize: 16.sp),
style:
TextStyle(color: Colors.white, fontSize: 16.sp),
),
)),
Positioned(
@ -256,15 +281,15 @@ class Call_outLogic extends GetxController {
),
),
isScrollControlled: true,
enableDrag: false
);
enableDrag: false);
}
startSelectCircleActivity() async {
var data = await Get.toNamed(AppRoutes.SelectCircleActivity,
arguments: {"interestMap": configBean.interestMap,
'selectCircle':numbers,
"isRodio": true});
var data = await Get.toNamed(AppRoutes.SelectCircleActivity, arguments: {
"interestMap": configBean.interestMap,
'selectCircle': numbers,
"isRodio": true
});
if (null != data) {
numbers = data;
circleName = numbers[0].name;
@ -276,7 +301,7 @@ class Call_outLogic extends GetxController {
showImg() async {
try {
if (state.videolist.length!=0) {
if (state.videolist.length != 0) {
showToast("已添加视频,无法添加图片。");
return;
}
@ -287,24 +312,16 @@ class Call_outLogic extends GetxController {
final XFile? pickedFile = await _picker.pickImage(
source: ImageSource.gallery,
);
if(null==pickedFile){
return;
}
SmartDialog.showLoading();
var path = await getApplicationSupportDirectoryPath();
CompressObject compressObject = CompressObject(
imageFile:File(pickedFile!.path), //image
path:path, //compress to path
quality: 80,//first compress quality, default 80
step: 9,//compress quality step, The bigger the fast, Smaller is more accurate, default 6
mode: CompressMode.LARGE2SMALL,//default AUTO
);
Luban.compressImage(compressObject).then((_path) {
updataQiniu(pickedFile!,CONFIG.CALL_OUT_IMAGE,quToken,(result){
upDataImage(quToken,pickedFile!,CONFIG.CALL_OUT_IMAGE,(result){
SmartDialog.dismiss();
state.imaglist.add(result);
update();
});
});
} catch (e) {
print(e);
}
@ -333,14 +350,12 @@ class Call_outLogic extends GetxController {
return completer.future;
}
showVideo() async {
if (state.imaglist.length != 0) {
showToast("已添加图片,无法添加视频。");
return;
}
if (state.videolist.length!=0) {
if (state.videolist.length != 0) {
showToast("最多上传1个视频哦~");
return;
}
@ -348,9 +363,12 @@ class Call_outLogic extends GetxController {
final XFile? pickedFile = await _picker.pickVideo(
source: ImageSource.gallery,
);
if(null==pickedFile){
return;
}
SmartDialog.showLoading();
var path = await getApplicationSupportDirectoryPath();
compressVideo(pickedFile!.path,path,(result) async{
compressVideo(pickedFile!.path, path, (result) async {
print(result);
videoPlayerController = VideoPlayerController.file(
File(result),
@ -368,20 +386,20 @@ class Call_outLogic extends GetxController {
}
});
upVideoQiniu(result,pickedFile.name,CONFIG.CALL_OUT_VIDEO,quToken,(result){
updataQiniu(result, pickedFile.name, CONFIG.CALL_OUT_VIDEO, quToken,
(result) {
SmartDialog.dismiss();
state.videolist.add(result);
update();
});
} else {
SmartDialog.dismiss();
showToast("请上传5-30秒的视频");
}
});
} catch (e) {}
}
Future<ClosedCaptionFile> _loadCaptions(BuildContext context) async {
final String fileContents = await DefaultAssetBundle.of(context)
.loadString('assets/bumble_bee_captions.vtt');
@ -424,7 +442,6 @@ class ThumbnailResult {
required this.width});
}
class CirclePaymentBean {
final int id;
final String title;
@ -447,4 +464,3 @@ class CirclePaymentBean {
);
}
}

View File

@ -6,6 +6,7 @@ import 'package:get/get.dart';
import 'package:video_player/video_player.dart';
import '../../router/app_routers.dart';
import '../circle/widgets/video_item.dart';
import 'logic.dart';
class Call_outPage extends StatelessWidget {
@ -29,6 +30,7 @@ class Call_outPage extends StatelessWidget {
fit: BoxFit.fill,
image: AssetImage(getBaseImage('home_back')))),
child: Scaffold(
resizeToAvoidBottomInset: false,
backgroundColor: Colors.transparent,
appBar: MyAppBar(
centerTitle: '世界喊话',
@ -179,8 +181,13 @@ class Call_outPage extends StatelessWidget {
Expanded(
child: GestureDetector(
onTap: () {
if(controller.vip ==2){
controller.isCheck = !controller.isCheck;
controller.update();
}else{
controller.showRechargeDialog();
}
},
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
@ -229,6 +236,47 @@ class Call_outPage extends StatelessWidget {
if (controller.videoPlayerController == null) {
return Container();
} else {
return _mixVideo(controller);
}
}
Widget _maxVideo(Call_outLogic controller){
return Container(
width:controller.videoPlayerController!.value.size.width < controller.videoPlayerController!.value.size.height ? 9*15.sp : 16*15.sp,
height:controller.videoPlayerController!.value.size.width < controller.videoPlayerController!.value.size.height ? 16*15.sp :9*15.sp,
child: Stack(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(6.sp),
child: VideoItemWidget(controller.state.videolist[0])),
// Center(child:controller.videoPlayerController!.value.isPlaying ? Container() : Image(image: AssetImage(getMineImage("icon_play")),width: 30.sp,height: 30.sp,),),
Positioned(
top: 0,
right: 0,
child: GestureDetector(
onTap: () {
// showToast("删除");
_showDelVideoDialog(Get.context!, controller);
},
child: Image(
image: AssetImage(getMineImage("icon_img_del")),
width: 20.sp,
height: 20.sp,
),
))
// ClosedCaption(text: controller.videoPlayerController!.value.caption.text),
// _ControlsOverlay(controller: controller.videoPlayerController),
// VideoProgressIndicator(controller.videoPlayerController!, allowScrubbing: true),
],
),
);
}
Widget _mixVideo(Call_outLogic controller){
return Container(
width:controller.videoPlayerController!.value.size.width < controller.videoPlayerController!.value.size.height ? 135.sp : 240.sp,
height:controller.videoPlayerController!.value.size.width < controller.videoPlayerController!.value.size.height ? 240.sp :135.sp,
@ -271,7 +319,6 @@ class Call_outPage extends StatelessWidget {
),
);
}
}
Widget _imageAdapter(Call_outLogic controller) {
return GridView.builder(
@ -571,7 +618,7 @@ class Call_outPage extends StatelessWidget {
GestureDetector(
onTap: () {
Navigator.pop(context);
controller.videoPlayerController?.dispose();
controller.videoPlayerController=null;
controller.state.videolist = [];
controller.update();

View File

@ -467,7 +467,7 @@ class InfoListView extends StatelessWidget {
fit: BoxFit.fill,
),
),
))
)
],
)),
Expanded(
@ -632,10 +632,7 @@ class InfoListView extends StatelessWidget {
)
],
),
)
],
),
);
)]));
}
///

View File

@ -97,21 +97,15 @@ class Complete_materialLogic extends GetxController {
final XFile? pickedFile = await _picker.pickImage(
source: ImageSource.gallery,
);
var path = await getApplicationSupportDirectoryPath();
CompressObject compressObject = CompressObject(
imageFile:File(pickedFile!.path), //image
path:path, //compress to path
quality: 80,//first compress quality, default 80
step: 9,//compress quality step, The bigger the fast, Smaller is more accurate, default 6
mode: CompressMode.LARGE2SMALL,//default AUTO
);
Luban.compressImage(compressObject).then((_path) {
updataQiniu(pickedFile!,CONFIG.USER_INFO_AVATAR,quToken,(result){
if(null==pickedFile){
return;
}
SmartDialog.showLoading();
upDataImage(quToken,pickedFile!,CONFIG.USER_INFO_AVATAR,(result){
SmartDialog.dismiss();
headUrl = result;
update();
});
});

View File

@ -1,3 +1,4 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:circle_app/components/my_app_bar.dart';
import 'package:circle_app/router/app_routers.dart';
import 'package:circle_app/util/util.dart';
@ -61,9 +62,9 @@ class Complete_materialPage extends StatelessWidget {
height: 86.sp,
)
: ClipOval(
child: Image.network(
child: CachedNetworkImage(
fit: BoxFit.fill,
controller.headUrl,
imageUrl: controller.headUrl,
width: 86.sp,
height: 86.sp,
),
@ -300,52 +301,51 @@ class Complete_materialPage extends StatelessWidget {
width: 240.sp,
child: ListView.builder(
itemCount: controller.numbers.length,
// item
scrollDirection: Axis.horizontal,
//
padding: EdgeInsets.symmetric(vertical: 18.sp),
//
itemBuilder: (context, index) {
return Container(
margin: EdgeInsets.only(right: 11.sp), // item
child: Container(
height: 34.sp,
padding: EdgeInsets.only(left: 15.sp, right: 15.sp),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17.0.sp), //
border: Border.all(color: Colors.white, width: 1.sp),
borderRadius: BorderRadius.circular(17.0), //
gradient: LinearGradient(
colors: [
Color(0xFF06F9FA),
Color(0xFFDC5BFD),
],
),
color: Color(0xFF392D53),
),
child: Container(
margin: EdgeInsets.all(0.5.sp),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17.0),
// shape: BoxShape.circle,
color: Color(0xFF392D53),
),
child: Padding(
padding: EdgeInsets.only(
top: 2.sp, bottom: 2.sp, left: 15.sp, right: 15.sp),
child: Center(
child: Text(
controller.numbers[index].name,
style: TextStyle(
fontSize: 12.0.sp,
fontSize: 11.0,
color: Colors.white,
),
),
),
),
),
), //
);
},
),
);
// return Container(
// height: 21.sp,
// padding: EdgeInsets.only(left: 12.sp, right: 12.sp),
// margin: EdgeInsets.only(left: 10.sp),
// alignment: Alignment.center,
// decoration: BoxDecoration(
// border: Border.all(width: 1, color: Colors.white),
// borderRadius: BorderRadius.circular(21.sp),
// ),
// child: Text(
// interest,
// style: TextStyle(
// color: Colors.white, fontSize: 11.sp, fontWeight: FontWeight.w500),
// ),
// );
}
showSexPiker(context, Complete_materialLogic controller) {
Pickers.showSinglePicker(context,
pickerStyle: DefaultPickerStyle.dark(),

View File

@ -1,3 +1,4 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:circle_app/router/app_routers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -399,8 +400,8 @@ class MinefragmentPage extends StatelessWidget {
child:logic.userInfoBean==null ? Container(
width: 65.sp,
height: 65.sp,
): Image.network(
logic.userInfoBean!=null ? logic.userInfoBean!.avatar!: "",
): CachedNetworkImage(
imageUrl: logic.userInfoBean!=null ? logic.userInfoBean!.avatar!: "",
width: 65.sp,
height: 65.sp,
),

View File

@ -1,3 +1,4 @@
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart';
@ -5,6 +6,7 @@ import 'state.dart';
class ReportLogic extends GetxController {
final ReportState state = ReportState();
TextEditingController textEditingController = TextEditingController();
List<MyObject> arrList = <MyObject>[
MyObject("涉嫌欺诈", false),
MyObject("色情低俗", false),

View File

@ -80,6 +80,7 @@ class ReportPage extends StatelessWidget {
Container(
margin: EdgeInsets.only(left: 16, right: 16),
height: 200,
width: double.infinity,
decoration: BoxDecoration(
color: Color(0xFF4C3E5F),
borderRadius: BorderRadius.circular(10),
@ -87,23 +88,62 @@ class ReportPage extends StatelessWidget {
padding: EdgeInsets.all(16.sp),
child: Stack(
children: [
TextField(
decoration: InputDecoration.collapsed(
hintText: '违规补充说明,帮助审核处理,选填',
hintStyle: TextStyle(
color: Color(0xFFB7BECC),
fontSize: 12,
),
),
maxLines: null,
maxLength: 200,
Container(
height: 200.sp,
child: TextField(
controller: controller.textEditingController,
onChanged: (value) {
controller.update();
},
style: TextStyle(
color: Color(0xFF000000),
fontSize: 12,
color: Colors.white, fontSize: 14.0.sp),
maxLines: 32,
maxLength: 200,
decoration: InputDecoration(
hintStyle: TextStyle(
color: Color.fromRGBO(
255, 255, 255, 0.6),
fontSize: 14.sp),
hintText: '违规补充说明,帮助审核处理,选填',
border: InputBorder.none,
counter: Text('')),
),
),
Positioned(
right: 15.sp,
top: 160.sp,
child: Text(
'${controller.textEditingController.text.length}/200',
style: TextStyle(
color: Colors.white, fontSize: 12.sp),
)),
],
),
)
// Stack(
// children: [
// TextField(
// decoration: InputDecoration.collapsed(
// hintText: '违规补充说明,帮助审核处理,选填',
// border: InputBorder.none,
// hintStyle: TextStyle(
// color: Color(0xFFB7BECC),
// fontSize: 12,
// ),
// ),
// maxLength: 200,
// style: TextStyle(
// color: Color(0xFFFFFFFF),
// fontSize: 12,
// ),
// ),
// ],
// ),
),
],
),

View File

@ -317,7 +317,7 @@ class _MyTabbedScreenState extends State<TextPage>
children: [
GestureDetector(
onTap: () {
showToast("鼓掌");
// showToast("鼓掌");
_showBottomSheet(context);
},
child: Image(

View File

@ -1,9 +1,16 @@
import 'dart:io';
import 'package:flutter_luban/flutter_luban.dart';
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 {
@ -15,22 +22,24 @@ class UserinfoLogic extends GetxController {
var isVip = 0;
var onLineCity = "";
var isLikeFoMsg = '';
var quToken = '';
bool isMe = false;
@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.toString()+"位圈友感兴趣,其中"+bean.data.likeMeCount.toString()+"位已催您更新";
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.toString();
onLineCity = "$onLineCity·${userInfoBean!.city}";
}
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, userInfoBean!.role, userInfoBean!.orientation);
}else{
@ -39,16 +48,17 @@ class UserinfoLogic extends GetxController {
} else {
var data = await DioManager.instance.get(url: Api.getUserInfoTA);
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.toString()+"位圈友感兴趣,其中"+bean.data.likeMeCount.toString()+"位已催您更新";
userInfoBean = bean.data!;
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.toString();
onLineCity = "$onLineCity·${userInfoBean!.city}";
}
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, userInfoBean!.role, userInfoBean!.orientation);
@ -58,6 +68,18 @@ class UserinfoLogic extends GetxController {
}
update();
var data =
await DioManager.instance.get(url: Api.getqiniuToken, params: {});
var bean = BaseResponse<QnTokenData>.fromJson(
data, (data) => QnTokenData.fromJson(data));
quToken = bean.data!.token.toString();
}
updataImage(){
showToast(""+state.updataimaglist.toString());
}
Future getImageFile() async {
@ -65,13 +87,18 @@ class UserinfoLogic extends GetxController {
final XFile? pickedFile = await _picker.pickImage(
source: ImageSource.gallery,
);
// setState(() {
// _setImageFileListFromFile(pickedFile);
// });
if(null==pickedFile){
return;
}
SmartDialog.showLoading();
upDataImage(quToken,pickedFile!,CONFIG.USER_ALBUM_IMAGE,(result){
SmartDialog.dismiss();
state.imaglist.add(result);
state.updataimaglist.add(result);
update();
});
} catch (e) {
// setState(() {
// _pickImageError = e;
// });
}
}
}

View File

@ -4,4 +4,5 @@ class UserinfoState {
///Initialize variables
}
List<String> imaglist = [];
List<String> updataimaglist = [];
}

View File

@ -1,3 +1,4 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
@ -121,7 +122,7 @@ class _MyTabbedScreenState extends State<UserinfoPage>
children: [
GestureDetector(
onTap: () {
showToast("鼓掌");
// showToast("鼓掌");
_showBottomSheet(context);
},
child: Image(
@ -288,13 +289,13 @@ class _MyTabbedScreenState extends State<UserinfoPage>
},
),
),
titleTab(),
titleTab(controller),
Container(
margin: EdgeInsets.only(top: 18.sp, bottom: 14.sp),
child: Text(
child: controller.isMe? Text(
controller.isLikeFoMsg,
style: TextStyle(color: Colors.white30),
)),
) :Container()) ,
Expanded(
child: Container(
// color: Colors.blue,
@ -310,7 +311,7 @@ class _MyTabbedScreenState extends State<UserinfoPage>
),
);
}
Widget titleTab(){
Widget titleTab(UserinfoLogic controller){
return Container(
alignment: Alignment.centerLeft,
height: 27.sp,
@ -332,13 +333,16 @@ class _MyTabbedScreenState extends State<UserinfoPage>
Tab(text: "喊话")
],
),
Container(
GestureDetector(onTap: (){
controller.updataImage();
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17),
gradient: LinearGradient(
colors: [
Color(0xFF06F9FA),
Color(0xFFDC5BFD),
controller.state.updataimaglist.length==0 && controller.isMe? Color(0xFF4A3E5D):Color(0xFF06F9FA),
controller.state.updataimaglist.length==0 && controller.isMe? Color(0xFF344143):Color(0xFFDC5BFD),
],
begin: Alignment.centerLeft,
end: Alignment.centerRight,
@ -347,13 +351,13 @@ class _MyTabbedScreenState extends State<UserinfoPage>
padding: EdgeInsets.only(
top: 2.sp, bottom: 2.sp, left: 12.sp, right: 12.sp),
child: Text(
"完成",
controller.isMe? "完成" : "催更",
style: TextStyle(
color: Colors.white,
fontSize: 12,
),
),
),
),),
],
));
}
@ -363,8 +367,9 @@ class _MyTabbedScreenState extends State<UserinfoPage>
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3, //
),
itemCount: controller.state.imaglist.length+1, //
itemCount:controller.isMe? controller.state.imaglist.length+1: controller.state.imaglist.length, //
itemBuilder: (BuildContext context, int index) {
if(controller.isMe){
if (index == 0) {
//
return GestureDetector(
@ -380,9 +385,6 @@ class _MyTabbedScreenState extends State<UserinfoPage>
),
);
} else {
//
// data
// var itemData = data[index - 1]; //
return Container(
margin: EdgeInsets.all(5.sp),
child: Center(
@ -391,6 +393,18 @@ class _MyTabbedScreenState extends State<UserinfoPage>
controller,index-1)),
);
}
}else{
return Container(
margin: EdgeInsets.all(5.sp),
child: Center(
child: _buildImageItem(
controller.state.imaglist[index],
controller,index)),
);
}
},
);
}
@ -497,8 +511,8 @@ class _MyTabbedScreenState extends State<UserinfoPage>
'index': 0
});
},
child: Image.network(
controller.userInfoBean != null
child: CachedNetworkImage(
imageUrl: controller.userInfoBean != null
? controller.userInfoBean!.avatar
: "",
width: 66.sp,
@ -512,22 +526,25 @@ class _MyTabbedScreenState extends State<UserinfoPage>
Widget _buildImageItem(String url, UserinfoLogic controller,int index) {
return Stack(
children: [
ClipRRect(
Container(
width: double.infinity, //
height: double.infinity,
child: ClipRRect(
borderRadius: BorderRadius.circular(0.0),
child: GestureDetector(
onTap: () {
// Get.toNamed(AppRoutes.Swiper,arguments:controller.state.imaglist);
Get.toNamed(AppRoutes.Swiper, arguments: {
'imaglist':controller.state.imaglist,
'index':index
});
},
child: Image.network(
fit: BoxFit.cover,
url,
),
),
),
),
if (controller.userId == "")
Positioned(
top: 0,
@ -727,7 +744,9 @@ class _MyTabbedScreenState extends State<UserinfoPage>
GestureDetector(
onTap: () {
Navigator.pop(context);
controller.state.updataimaglist.remove(controller.state.updataimaglist[index]);
controller.state.imaglist.removeAt(index);
controller.update();
},

View File

@ -7,4 +7,6 @@ class CONFIG{
static const CALL_OUT_IMAGE = 'call_out_image/';
static const USER_INFO_AVATAR = 'user_info_avatar/';
static const USER_ALBUM_IMAGE = 'user_album_image/';
}

View File

@ -55,5 +55,5 @@ class Api {
//
static const getUserInfoTA = 'user-service/user/1/home';
static const getUserInfoTA = 'user-service/user/';
}

View File

@ -104,7 +104,7 @@ class AppPages {
),
GetPage(
name: AppRoutes.UserInfoActivity,
page: () => UserinfoPage(),
page: () => FlutterSmartDialog(child: UserinfoPage()),
binding: UserinfoBinding(),
),
GetPage(

View File

@ -2,6 +2,8 @@ import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:circle_app/util/util.dart';
import 'package:flutter_luban/flutter_luban.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:image_picker/image_picker.dart';
import 'package:qiniu_flutter_sdk/qiniu_flutter_sdk.dart';
@ -11,35 +13,9 @@ import '../common/config.dart';
typedef void MyCallback(String result);
void updataQiniu(XFile pickedFile,String path ,String quToken,MyCallback myCallback) {
SmartDialog.showLoading();
var storage = Storage();
DateTime now = DateTime.now();
String yearMonth = DateFormat('yyyyMM').format(now);
String imgPath = path +yearMonth+"/"+generateRandomString(16)+ pickedFile.name;
PutController putController = PutController();
putController.addStatusListener((StorageStatus status) {
if (status == StorageStatus.Success) {
var headUrl = CONFIG.IMAGE_HEAD + imgPath;
myCallback(headUrl);
SmartDialog.dismiss();
}
print('状态变化: 当前任务状态:$status');
});
putController.addProgressListener((double status) {
print('上传进度: $status');
});
storage.putFile(File(pickedFile.path), quToken,
options: PutOptions(controller: putController, key: imgPath));
}
void upVideoQiniu(String filePath,String name,String path ,String quToken,MyCallback myCallback) {
SmartDialog.showLoading();
//
void updataQiniu(String filePath,String name,String path ,String quToken,MyCallback myCallback) {
var storage = Storage();
DateTime now = DateTime.now();
String yearMonth = DateFormat('yyyyMM').format(now);
@ -49,7 +25,7 @@ void upVideoQiniu(String filePath,String name,String path ,String quToken,MyCall
if (status == StorageStatus.Success) {
var headUrl = CONFIG.IMAGE_HEAD + imgPath;
myCallback(headUrl);
SmartDialog.dismiss();
}
print('状态变化: 当前任务状态:$status');
});
@ -64,6 +40,27 @@ void upVideoQiniu(String filePath,String name,String path ,String quToken,MyCall
}
//
void upDataImage(String quToken ,XFile pickedFile,String updataRoute,MyCallback myCallback) async{
var path = await getApplicationSupportDirectoryPath();
CompressObject compressObject = CompressObject(
imageFile:File(pickedFile.path), //image
path:path, //compress to path
quality: 80,//first compress quality, default 80
step: 9,//compress quality step, The bigger the fast, Smaller is more accurate, default 6
mode: CompressMode.LARGE2SMALL,//default AUTO
);
Luban.compressImage(compressObject).then((_path) {
updataQiniu(_path.toString(),pickedFile.name,updataRoute,quToken,(result){
myCallback(result);
});
});
}
String generateRandomString(int length) {
var random = Random.secure();
var values = List<int>.generate(length, (index) => random.nextInt(256));