版本更新和一些ui问题
This commit is contained in:
parent
7bd1baad87
commit
79be1cb9cc
@ -1,20 +1,25 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:flutter_install_app/flutter_install_app.dart';
|
||||||
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
import '../../util/device.dart';
|
import '../../network/dio_manager.dart';
|
||||||
|
import '../../util/util.dart';
|
||||||
import 'state.dart';
|
import 'state.dart';
|
||||||
import 'package:package_info_plus/package_info_plus.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
|
|
||||||
class AboutappLogic extends GetxController {
|
class AboutappLogic extends GetxController {
|
||||||
final AboutappState state = AboutappState();
|
final AboutappState state = AboutappState();
|
||||||
String version = "";
|
String version = "";
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
// TODO: implement onInit
|
// TODO: implement onInit
|
||||||
super.onInit();
|
super.onInit();
|
||||||
getVersion();
|
getVersion();
|
||||||
// getAppVersion();
|
// getAppVersion();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getVersion() async {
|
getVersion() async {
|
||||||
final info = await PackageInfo.fromPlatform();
|
final info = await PackageInfo.fromPlatform();
|
||||||
version = info.version;
|
version = info.version;
|
||||||
@ -22,6 +27,24 @@ class AboutappLogic extends GetxController {
|
|||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updataApk() async {
|
||||||
|
SmartDialog.showLoading();
|
||||||
|
var filePath = await getApplicationSupportDirectoryPath();
|
||||||
|
filePath = filePath+"kuayou.apk";
|
||||||
|
// var data = await DioManager.instance
|
||||||
|
// .download("https://xidi-official-website.oss-cn-shenzhen.aliyuncs.com/%E8%B7%A8%E5%8F%8B_2.3.4.apk", filePath, (received, total) {
|
||||||
|
// double progress = received / total * 100;
|
||||||
|
// print('Download progress: $progress%');
|
||||||
|
// })
|
||||||
|
// .then((value) =>
|
||||||
|
// print(value))
|
||||||
|
// .catchError((error) {
|
||||||
|
// SmartDialog.dismiss();
|
||||||
|
// print(error);
|
||||||
|
// });
|
||||||
|
await AppInstaller.installApk(filePath, actionRequired: false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> getAppVersion() async {
|
Future<void> getAppVersion() async {
|
||||||
final info = await PackageInfo.fromPlatform();
|
final info = await PackageInfo.fromPlatform();
|
||||||
@ -29,6 +52,5 @@ class AboutappLogic extends GetxController {
|
|||||||
print(info.packageName);
|
print(info.packageName);
|
||||||
print(info.version);
|
print(info.version);
|
||||||
print(info.buildNumber);
|
print(info.buildNumber);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -141,7 +141,12 @@ class AboutappPage extends StatelessWidget {
|
|||||||
),)
|
),)
|
||||||
,
|
,
|
||||||
SizedBox(height: 20.sp),
|
SizedBox(height: 20.sp),
|
||||||
Row(
|
GestureDetector(
|
||||||
|
behavior: HitTestBehavior.opaque,
|
||||||
|
onTap: (){
|
||||||
|
logic.updataApk();
|
||||||
|
},
|
||||||
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'版本更新',
|
'版本更新',
|
||||||
@ -176,6 +181,7 @@ class AboutappPage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),)
|
),)
|
||||||
),),
|
),),
|
||||||
|
|||||||
@ -20,10 +20,13 @@ class CircleLogic extends GetxController {
|
|||||||
.get(url: Api.getCircleInterests, params: {"page": page});
|
.get(url: Api.getCircleInterests, params: {"page": page});
|
||||||
var bean = BaseResponse<InterestsBean>.fromJson(
|
var bean = BaseResponse<InterestsBean>.fromJson(
|
||||||
data, (data) => InterestsBean.fromJson(data));
|
data, (data) => InterestsBean.fromJson(data));
|
||||||
|
if(bean.data is InterestsBean&&bean.isSuccess()){
|
||||||
circle = bean.data!;
|
circle = bean.data!;
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
loadMore() async {
|
loadMore() async {
|
||||||
page = page++;
|
page = page++;
|
||||||
var data = await DioManager.instance
|
var data = await DioManager.instance
|
||||||
|
|||||||
@ -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:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
class ListLogic extends GetxController {
|
class ListLogic extends GetxController {
|
||||||
int callOutPage = 1;
|
int callOutPage = 1;
|
||||||
@ -53,8 +54,15 @@ class ListLogic extends GetxController {
|
|||||||
loadCallOutListData(_circleId);
|
loadCallOutListData(_circleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pushMsgPage(Lists bean,String cicleId) {
|
void pushMsgPage(Lists bean,String cicleId) async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
int userId = prefs.getInt("userId")??0;
|
||||||
|
if(bean.user!.id==userId){
|
||||||
|
Get.toNamed(AppRoutes.UserInfoActivity);
|
||||||
|
}else{
|
||||||
Get.toNamed(AppRoutes.UserInfoActivity, arguments: bean.user!.id!.toString());
|
Get.toNamed(AppRoutes.UserInfoActivity, arguments: bean.user!.id!.toString());
|
||||||
|
}
|
||||||
|
|
||||||
// if (bean.isQueen) {
|
// if (bean.isQueen) {
|
||||||
// showJoinCiclePiker(cicleId);
|
// showJoinCiclePiker(cicleId);
|
||||||
// } else {
|
// } else {
|
||||||
|
|||||||
@ -1,9 +1,14 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
|
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 'package:qiniu_flutter_sdk/qiniu_flutter_sdk.dart';
|
||||||
|
|
||||||
|
import '../../common/config.dart';
|
||||||
|
import '../../network/api.dart';
|
||||||
|
import '../../network/dio_manager.dart';
|
||||||
|
import '../../util/qiniu.dart';
|
||||||
import 'state.dart';
|
import 'state.dart';
|
||||||
|
|
||||||
class FeedbackLogic extends GetxController {
|
class FeedbackLogic extends GetxController {
|
||||||
@ -11,20 +16,35 @@ class FeedbackLogic extends GetxController {
|
|||||||
|
|
||||||
final ImagePicker _picker = ImagePicker();
|
final ImagePicker _picker = ImagePicker();
|
||||||
var storage = Storage();
|
var storage = Storage();
|
||||||
|
var quToken = '';
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onInit() async{
|
||||||
|
super.onInit();
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future getImageFile() async {
|
Future getImageFile() async {
|
||||||
try {
|
try {
|
||||||
final XFile? pickedFile = await _picker.pickImage(
|
final XFile? pickedFile = await _picker.pickImage(
|
||||||
source: ImageSource.gallery,
|
source: ImageSource.gallery,
|
||||||
);
|
);
|
||||||
|
if(null==pickedFile){
|
||||||
// setState(() {
|
return;
|
||||||
// _setImageFileListFromFile(pickedFile);
|
}
|
||||||
// });
|
SmartDialog.showLoading();
|
||||||
|
upDataImage(quToken,pickedFile!,CONFIG.USER_INFO_AVATAR,(result){
|
||||||
|
SmartDialog.dismiss(force: true);
|
||||||
|
state.imaglist.add(result);
|
||||||
|
update();
|
||||||
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// setState(() {
|
|
||||||
// _pickImageError = e;
|
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,4 +3,5 @@ class FeedbackState {
|
|||||||
///Initialize variables
|
///Initialize variables
|
||||||
}
|
}
|
||||||
String maxMsg = "0/200";
|
String maxMsg = "0/200";
|
||||||
|
List<String> imaglist = [];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
import '../../components/my_app_bar.dart';
|
import '../../components/my_app_bar.dart';
|
||||||
|
import '../../router/app_routers.dart';
|
||||||
import '../../util/util.dart';
|
import '../../util/util.dart';
|
||||||
import 'logic.dart';
|
import 'logic.dart';
|
||||||
|
|
||||||
@ -85,9 +86,10 @@ class FeedbackPage extends StatelessWidget {
|
|||||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||||
crossAxisCount: 3, // 每行显示的项目数量
|
crossAxisCount: 3, // 每行显示的项目数量
|
||||||
),
|
),
|
||||||
itemCount: 4, // Replace with your item count
|
itemCount:controller.state.imaglist.length<3 ? controller.state.imaglist.length+1: controller.state.imaglist.length, // Replace with your item count
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
if (index == 0) {
|
|
||||||
|
if (index == 0&&controller.state.imaglist.length<3) {
|
||||||
// 第一个项目,显示固定的图片
|
// 第一个项目,显示固定的图片
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
@ -108,8 +110,9 @@ class FeedbackPage extends StatelessWidget {
|
|||||||
return Container(
|
return Container(
|
||||||
margin: EdgeInsets.all(5.sp),
|
margin: EdgeInsets.all(5.sp),
|
||||||
child: Center(
|
child: Center(
|
||||||
// child: _buildImageItem(
|
child: _buildImageItem(controller.state.imaglist.length<3 ?
|
||||||
// 'https://book.flutterchina.club/assets/img/logo.png'),
|
controller.state.imaglist[index-1]: controller.state.imaglist[index], // Replace with your item count
|
||||||
|
controller,controller.state.imaglist.length<3 ? index-1:index ),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -125,17 +128,34 @@ class FeedbackPage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(height: 50),
|
SizedBox(height: 50),
|
||||||
Container(
|
GestureDetector(
|
||||||
margin: EdgeInsets.symmetric(horizontal: 72),
|
onTap: () {
|
||||||
height: 42,
|
// showToast("完善资料");
|
||||||
|
Get.toNamed(AppRoutes.Complete_materialPage, arguments: "user");
|
||||||
|
// controller.onInit();
|
||||||
|
},
|
||||||
|
child: Center(
|
||||||
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(21),
|
borderRadius: BorderRadius.circular(21),
|
||||||
color: Color(0xFF21BEAB),
|
gradient: LinearGradient(
|
||||||
|
colors: [
|
||||||
|
Color(0xFF06F9FA),
|
||||||
|
Color(0xFFDC5BFD),
|
||||||
|
],
|
||||||
|
begin: Alignment.centerLeft,
|
||||||
|
end: Alignment.centerRight,
|
||||||
),
|
),
|
||||||
child: Center(
|
),
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
top: 14.sp, bottom: 14.sp, left: 95.sp, right: 95.sp),
|
||||||
child: Text(
|
child: Text(
|
||||||
'提交',
|
"提交",
|
||||||
style: TextStyle(color: Colors.white, fontSize: 16),
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 12,
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -146,4 +166,49 @@ class FeedbackPage extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildImageItem(String url, FeedbackLogic controller, int index) {
|
||||||
|
return Stack(
|
||||||
|
children: [
|
||||||
|
ClipRRect(
|
||||||
|
borderRadius: BorderRadius.circular(0.0),
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity, // 设置容器宽度为屏幕宽度
|
||||||
|
height: double.infinity, // 设置容器高度为屏幕高度
|
||||||
|
child: ClipRRect(
|
||||||
|
borderRadius: BorderRadius.circular(0.0),
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
Get.toNamed(AppRoutes.Swiper, arguments: {
|
||||||
|
'imaglist': controller.state.imaglist,
|
||||||
|
'index': index
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Image.network(
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
url,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 0,
|
||||||
|
right: 0,
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
controller.state.imaglist.removeAt(index);
|
||||||
|
controller.update();
|
||||||
|
},
|
||||||
|
child: Image(
|
||||||
|
image: AssetImage(getMineImage("icon_img_del")),
|
||||||
|
width: 20.sp,
|
||||||
|
height: 20.sp,
|
||||||
|
),
|
||||||
|
))
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -208,6 +208,7 @@ class Complete_materialLogic extends GetxController {
|
|||||||
showToast('请上传头像');
|
showToast('请上传头像');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//TODO 强制获取经纬度
|
||||||
LatLng location = await getLocation();
|
LatLng location = await getLocation();
|
||||||
List<String> interestsList = [];
|
List<String> interestsList = [];
|
||||||
numbers.forEach((element) {
|
numbers.forEach((element) {
|
||||||
@ -261,16 +262,3 @@ class Complete_materialLogic extends GetxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class QnTokenData {
|
|
||||||
final String token;
|
|
||||||
final String cdnPrefix;
|
|
||||||
|
|
||||||
QnTokenData({required this.token, required this.cdnPrefix});
|
|
||||||
|
|
||||||
factory QnTokenData.fromJson(Map<String, dynamic> json) {
|
|
||||||
return QnTokenData(
|
|
||||||
token: json['token'],
|
|
||||||
cdnPrefix: json['cdn_prefix'],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import 'package:circle_app/components/my_app_bar.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/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_pickers/pickers.dart';
|
import 'package:flutter_pickers/pickers.dart';
|
||||||
import 'package:flutter_pickers/style/default_style.dart';
|
import 'package:flutter_pickers/style/default_style.dart';
|
||||||
import 'package:flutter_pickers/time_picker/model/date_mode.dart';
|
import 'package:flutter_pickers/time_picker/model/date_mode.dart';
|
||||||
@ -199,6 +200,7 @@ class Complete_materialPage extends StatelessWidget {
|
|||||||
fontSize: 14.sp),
|
fontSize: 14.sp),
|
||||||
border: InputBorder.none,
|
border: InputBorder.none,
|
||||||
contentPadding: EdgeInsets.all(20.sp)),
|
contentPadding: EdgeInsets.all(20.sp)),
|
||||||
|
inputFormatters: [LengthLimitingTextInputFormatter(40)],
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@ -30,6 +30,7 @@ class MinefragmentLogic extends GetxController {
|
|||||||
isVip = userInfoBean!.vip;
|
isVip = userInfoBean!.vip;
|
||||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
prefs.setInt('vip', isVip);
|
prefs.setInt('vip', isVip);
|
||||||
|
prefs.setInt('userId', userInfoBean!.id);
|
||||||
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, userInfoBean!.role, userInfoBean!.orientation);
|
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, userInfoBean!.role, userInfoBean!.orientation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,12 @@
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.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 '../../common/config.dart';
|
||||||
|
import '../../network/api.dart';
|
||||||
|
import '../../network/dio_manager.dart';
|
||||||
|
import '../../util/qiniu.dart';
|
||||||
import 'state.dart';
|
import 'state.dart';
|
||||||
|
|
||||||
class ReportLogic extends GetxController {
|
class ReportLogic extends GetxController {
|
||||||
@ -22,18 +27,36 @@ class ReportLogic extends GetxController {
|
|||||||
return arrList;
|
return arrList;
|
||||||
}
|
}
|
||||||
final ImagePicker _picker = ImagePicker();
|
final ImagePicker _picker = ImagePicker();
|
||||||
|
|
||||||
|
var quToken = '';
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onInit() async{
|
||||||
|
super.onInit();
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future getImageFile() async {
|
Future getImageFile() async {
|
||||||
try {
|
try {
|
||||||
final XFile? pickedFile = await _picker.pickImage(
|
final XFile? pickedFile = await _picker.pickImage(
|
||||||
source: ImageSource.gallery,
|
source: ImageSource.gallery,
|
||||||
);
|
);
|
||||||
// setState(() {
|
if(null==pickedFile){
|
||||||
// _setImageFileListFromFile(pickedFile);
|
return;
|
||||||
// });
|
}
|
||||||
|
SmartDialog.showLoading();
|
||||||
|
upDataImage(quToken,pickedFile!,CONFIG.USER_INFO_AVATAR,(result){
|
||||||
|
SmartDialog.dismiss(force: true);
|
||||||
|
state.imaglist.add(result);
|
||||||
|
update();
|
||||||
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// setState(() {
|
|
||||||
// _pickImageError = e;
|
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import 'logic.dart';
|
import 'logic.dart';
|
||||||
|
|
||||||
class ReportState {
|
class ReportState {
|
||||||
|
List<String> imaglist = [];
|
||||||
ReportState() {
|
ReportState() {
|
||||||
|
|
||||||
///Initialize variables
|
///Initialize variables
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
import '../../components/my_app_bar.dart';
|
import '../../components/my_app_bar.dart';
|
||||||
|
import '../../router/app_routers.dart';
|
||||||
import '../../util/util.dart';
|
import '../../util/util.dart';
|
||||||
import 'logic.dart';
|
import 'logic.dart';
|
||||||
|
|
||||||
@ -78,7 +79,7 @@ class ReportPage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
SizedBox(height: 30),
|
SizedBox(height: 30),
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.only(left: 16, right: 16),
|
// margin: EdgeInsets.only(left: 10, right: 10),
|
||||||
height: 200,
|
height: 200,
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@ -183,9 +184,9 @@ class ReportPage extends StatelessWidget {
|
|||||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||||
crossAxisCount: 3, // 每行显示的项目数量
|
crossAxisCount: 3, // 每行显示的项目数量
|
||||||
),
|
),
|
||||||
itemCount: 20, // 项目的总数量,包括固定图片和接口获取的项目
|
itemCount: controller.state.imaglist.length<3 ? controller.state.imaglist.length+1: controller.state.imaglist.length, // Replace with your item count// 项目的总数量,包括固定图片和接口获取的项目
|
||||||
itemBuilder: (BuildContext context, int index) {
|
itemBuilder: (BuildContext context, int index) {
|
||||||
if (index == 0) {
|
if (index == 0&&controller.state.imaglist.length<3) {
|
||||||
// 第一个项目,显示固定的图片
|
// 第一个项目,显示固定的图片
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
@ -205,8 +206,9 @@ class ReportPage extends StatelessWidget {
|
|||||||
return Container(
|
return Container(
|
||||||
margin: EdgeInsets.all(5.sp),
|
margin: EdgeInsets.all(5.sp),
|
||||||
child: Center(
|
child: Center(
|
||||||
// child: _buildImageItem(
|
child: _buildImageItem(controller.state.imaglist.length<3 ?
|
||||||
// 'https://book.flutterchina.club/assets/img/logo.png'),
|
controller.state.imaglist[index-1]: controller.state.imaglist[index], // Replace with your item count
|
||||||
|
controller,controller.state.imaglist.length<3 ? index-1:index ),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -271,4 +273,47 @@ class ReportPage extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildImageItem(String url, ReportLogic controller, int index) {
|
||||||
|
return Stack(
|
||||||
|
children: [
|
||||||
|
ClipRRect(
|
||||||
|
borderRadius: BorderRadius.circular(0.0),
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity, // 设置容器宽度为屏幕宽度
|
||||||
|
height: double.infinity, // 设置容器高度为屏幕高度
|
||||||
|
child: ClipRRect(
|
||||||
|
borderRadius: BorderRadius.circular(0.0),
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
Get.toNamed(AppRoutes.Swiper, arguments: {
|
||||||
|
'imaglist': controller.state.imaglist,
|
||||||
|
'index': index
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Image.network(
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
url,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
top: 0,
|
||||||
|
right: 0,
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
controller.state.imaglist.removeAt(index);
|
||||||
|
controller.update();
|
||||||
|
},
|
||||||
|
child: Image(
|
||||||
|
image: AssetImage(getMineImage("icon_img_del")),
|
||||||
|
width: 20.sp,
|
||||||
|
height: 20.sp,
|
||||||
|
),
|
||||||
|
))
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,6 +26,10 @@ class UserinfoLogic extends GetxController {
|
|||||||
bool isMe = false;
|
bool isMe = false;
|
||||||
bool isEdit = false;
|
bool isEdit = false;
|
||||||
bool isUrgeStatus = false;
|
bool isUrgeStatus = false;
|
||||||
|
bool isOnline = false;
|
||||||
|
|
||||||
|
|
||||||
|
bool isShowAlbum = true;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() async {
|
void onInit() async {
|
||||||
@ -42,6 +46,7 @@ class UserinfoLogic extends GetxController {
|
|||||||
isVip = userInfoBean!.vip;
|
isVip = userInfoBean!.vip;
|
||||||
|
|
||||||
onLineCity = userInfoBean!.isOnline == true ? "在线" : "离线";
|
onLineCity = userInfoBean!.isOnline == true ? "在线" : "离线";
|
||||||
|
isOnline = userInfoBean!.isOnline;
|
||||||
if (userInfoBean!.city != null) {
|
if (userInfoBean!.city != null) {
|
||||||
onLineCity = "$onLineCity·${userInfoBean!.city}";
|
onLineCity = "$onLineCity·${userInfoBean!.city}";
|
||||||
}
|
}
|
||||||
@ -91,7 +96,7 @@ class UserinfoLogic extends GetxController {
|
|||||||
myAlbumData, (myAlbumData) => AlbumResponseBean.fromJson(myAlbumData));
|
myAlbumData, (myAlbumData) => AlbumResponseBean.fromJson(myAlbumData));
|
||||||
if(myAlbumBean.isSuccess()){
|
if(myAlbumBean.isSuccess()){
|
||||||
myAlbumBean.data.lists.forEach((element) {
|
myAlbumBean.data.lists.forEach((element) {
|
||||||
state.imaglist.add(element.url);
|
state.imaglist.add(AlbumListItem(id: element.id,type: element.type,url:element.url));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.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';
|
||||||
@ -24,9 +26,21 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_tabController = TabController(length: 2, vsync: this);
|
_tabController = TabController(length: 2, vsync: this,animationDuration: Duration(seconds: 0));
|
||||||
|
_tabController.addListener(_handleTabChange);
|
||||||
|
// _tabController
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _handleTabChange() {
|
||||||
|
// 在这里可以执行滑动监听后的逻辑操作
|
||||||
|
// 比如根据当前选中的标签执行其他操作
|
||||||
|
// int currentIndex = .toString());
|
||||||
|
logic.isShowAlbum = _tabController.index == 0;
|
||||||
|
logic.update();
|
||||||
|
print('Current tab index: ${_tabController.previousIndex}');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_tabController.dispose();
|
_tabController.dispose();
|
||||||
@ -106,7 +120,7 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
top: 10.sp, bottom: 10.sp, left: 55.sp, right: 55.sp),
|
top: 10.sp, bottom: 10.sp, left: 55.sp, right: 55.sp),
|
||||||
child: Text(
|
child: Text(
|
||||||
"完善个人形象照",
|
"完善个人形象",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
@ -229,12 +243,12 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
height: 5.sp,
|
height: 5.sp,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
shape: BoxShape.circle,
|
shape: BoxShape.circle,
|
||||||
color: Color(0xFF00FFF4),
|
color: logic.isOnline? Color(0xFF00FFF4): Color(0xFF787575),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
controller.onLineCity,
|
controller.onLineCity,
|
||||||
style: TextStyle(color: Color(0xFF00FFF4)),
|
style: TextStyle(color: logic.isOnline? Color(0xFF00FFF4): Color(0xFF787575)),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@ -291,12 +305,14 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
titleTab(controller),
|
titleTab(controller),
|
||||||
Container(
|
Visibility(
|
||||||
|
visible: logic.isShowAlbum,
|
||||||
|
child: Container(
|
||||||
margin: EdgeInsets.only(top: 18.sp, bottom: 14.sp),
|
margin: EdgeInsets.only(top: 18.sp, bottom: 14.sp),
|
||||||
child: controller.isMe? Text(
|
child: controller.isMe? Text(
|
||||||
controller.isLikeFoMsg,
|
controller.isLikeFoMsg,
|
||||||
style: TextStyle(color: Colors.white30),
|
style: TextStyle(color: Colors.white30),
|
||||||
) :Container()) ,
|
) :Container())) ,
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Container(
|
child: Container(
|
||||||
// color: Colors.blue,
|
// color: Colors.blue,
|
||||||
@ -327,22 +343,25 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
labelColor: Color(0xFF00FFF4),
|
labelColor: Color(0xFF00FFF4),
|
||||||
unselectedLabelColor: Color(0xB3FFFFFF),
|
unselectedLabelColor: Color(0xB3FFFFFF),
|
||||||
indicatorSize: TabBarIndicatorSize.label,
|
indicatorSize: TabBarIndicatorSize.label,
|
||||||
tabs: [
|
tabs: const [
|
||||||
Tab(
|
Tab(
|
||||||
text: "形象照",
|
text: "形象照",
|
||||||
),
|
),
|
||||||
Tab(text: "喊话")
|
Tab(text: "喊话")
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
||||||
GestureDetector(onTap: (){
|
GestureDetector(onTap: (){
|
||||||
controller.isMe? controller.isEdit = !controller.isEdit : controller.urgeChange();
|
controller.isMe? controller.isEdit = !controller.isEdit : controller.urgeChange();
|
||||||
controller.update();
|
controller.update();
|
||||||
// controller.updataImage();
|
// controller.updataImage();
|
||||||
},
|
},
|
||||||
|
child: Visibility(
|
||||||
|
visible: logic.isShowAlbum,
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(17),
|
borderRadius: BorderRadius.circular(17),
|
||||||
gradient: LinearGradient(
|
gradient: const LinearGradient(
|
||||||
colors: [
|
colors: [
|
||||||
Color(0xFF06F9FA),
|
Color(0xFF06F9FA),
|
||||||
Color(0xFFDC5BFD),
|
Color(0xFFDC5BFD),
|
||||||
@ -355,19 +374,20 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
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.isEdit?"完成": "管理" : controller.isUrgeStatus? "已催更":"催更",
|
controller.isMe? controller.isEdit?"完成": "管理" : controller.isUrgeStatus? "已催更":"催更",
|
||||||
style: TextStyle(
|
style: const TextStyle(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
),
|
),
|
||||||
|
|
||||||
),
|
),
|
||||||
),),
|
),),),
|
||||||
],
|
],
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _imageAdapter(UserinfoLogic controller) {
|
Widget _imageAdapter(UserinfoLogic controller) {
|
||||||
return GridView.builder(
|
return GridView.builder(
|
||||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
||||||
crossAxisCount: 3, // 每行显示的项目数量
|
crossAxisCount: 3, // 每行显示的项目数量
|
||||||
),
|
),
|
||||||
itemCount:controller.isMe?
|
itemCount:controller.isMe?
|
||||||
@ -538,8 +558,12 @@ class _MyTabbedScreenState extends State<UserinfoPage>
|
|||||||
borderRadius: BorderRadius.circular(0.0),
|
borderRadius: BorderRadius.circular(0.0),
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
|
List<String> imaglist = [];
|
||||||
|
controller.state.imaglist.forEach((element) {
|
||||||
|
imaglist.add(element.url);
|
||||||
|
});
|
||||||
Get.toNamed(AppRoutes.Swiper, arguments: {
|
Get.toNamed(AppRoutes.Swiper, arguments: {
|
||||||
'imaglist':controller.state.imaglist,
|
'imaglist':imaglist,
|
||||||
'index':index
|
'index':index
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|||||||
@ -38,13 +38,18 @@ class DioManager {
|
|||||||
// 请求基地址
|
// 请求基地址
|
||||||
baseUrl: baseUrl,
|
baseUrl: baseUrl,
|
||||||
// 连接服务器超时时间,单位是毫秒
|
// 连接服务器超时时间,单位是毫秒
|
||||||
connectTimeout: Duration(seconds: 30),
|
connectTimeout: Duration(seconds: 30000000000),
|
||||||
// 接收数据的最长时限
|
// 接收数据的最长时限
|
||||||
receiveTimeout: Duration(seconds: 30),
|
receiveTimeout: Duration(seconds: 30000000000),
|
||||||
));
|
));
|
||||||
_dio!.interceptors.add(LogInterceptor(responseBody: true));
|
_dio!.interceptors.add(LogInterceptor(responseBody: true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future download(String urlPath,String savePath,ProgressCallback progressCallback)async{
|
||||||
|
|
||||||
|
return await _dio!.download(urlPath, savePath, onReceiveProgress : progressCallback);
|
||||||
|
}
|
||||||
|
|
||||||
/// get请求
|
/// get请求
|
||||||
/// [isShowErrorToast] 出现错误的情况是否自动弹窗提示错误,默认true
|
/// [isShowErrorToast] 出现错误的情况是否自动弹窗提示错误,默认true
|
||||||
/// [isAddTokenInHeader] 请求头是否添加token
|
/// [isAddTokenInHeader] 请求头是否添加token
|
||||||
@ -267,3 +272,17 @@ class BaseResponse<T> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class QnTokenData {
|
||||||
|
final String token;
|
||||||
|
final String cdnPrefix;
|
||||||
|
|
||||||
|
QnTokenData({required this.token, required this.cdnPrefix});
|
||||||
|
|
||||||
|
factory QnTokenData.fromJson(Map<String, dynamic> json) {
|
||||||
|
return QnTokenData(
|
||||||
|
token: json['token'],
|
||||||
|
cdnPrefix: json['cdn_prefix'],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -42,7 +42,12 @@ void updataQiniu(String filePath,String name,String path ,String quToken,MyCallb
|
|||||||
|
|
||||||
//封装上传图片
|
//封装上传图片
|
||||||
void upDataImage(String quToken ,XFile pickedFile,String updataRoute,MyCallback myCallback) async{
|
void upDataImage(String quToken ,XFile pickedFile,String updataRoute,MyCallback myCallback) async{
|
||||||
|
// print(quToken);
|
||||||
|
if(quToken.isEmpty){
|
||||||
|
showToast("图片上传失败");
|
||||||
|
SmartDialog.dismiss(force: true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
var path = await getApplicationSupportDirectoryPath();
|
var path = await getApplicationSupportDirectoryPath();
|
||||||
|
|
||||||
CompressObject compressObject = CompressObject(
|
CompressObject compressObject = CompressObject(
|
||||||
|
|||||||
@ -84,6 +84,8 @@ dependencies:
|
|||||||
video_compress: ^3.1.2
|
video_compress: ^3.1.2
|
||||||
#图片缓存
|
#图片缓存
|
||||||
cached_network_image: ^3.2.3
|
cached_network_image: ^3.2.3
|
||||||
|
#安装apk
|
||||||
|
flutter_install_app: 1.3.0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user