版本更新和一些ui问题

This commit is contained in:
YangYuhao 2023-07-03 12:26:48 +08:00
parent 7bd1baad87
commit 79be1cb9cc
18 changed files with 343 additions and 104 deletions

View File

@ -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 '../../util/device.dart';
import '../../network/dio_manager.dart';
import '../../util/util.dart';
import 'state.dart';
import 'package:package_info_plus/package_info_plus.dart';
class AboutappLogic extends GetxController {
final AboutappState state = AboutappState();
String version = "";
@override
@override
void onInit() {
// TODO: implement onInit
super.onInit();
getVersion();
// getAppVersion();
// getAppVersion();
}
getVersion() async {
final info = await PackageInfo.fromPlatform();
version = info.version;
@ -22,6 +27,24 @@ class AboutappLogic extends GetxController {
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 {
final info = await PackageInfo.fromPlatform();
@ -29,6 +52,5 @@ class AboutappLogic extends GetxController {
print(info.packageName);
print(info.version);
print(info.buildNumber);
}
}

View File

@ -141,40 +141,46 @@ class AboutappPage extends StatelessWidget {
),)
,
SizedBox(height: 20.sp),
Row(
children: [
Text(
'版本更新',
style: TextStyle(
color: Color(0xFFF7FAFA),
fontSize: 16.sp,
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: (){
logic.updataApk();
},
child: Row(
children: [
Text(
'版本更新',
style: TextStyle(
color: Color(0xFFF7FAFA),
fontSize: 16.sp,
),
),
),
Spacer(),
Container(
width: 6.sp,
height: 5.sp,
margin: EdgeInsets.only(top: 1.sp, right: 8.sp),
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.circular(3.sp),
Spacer(),
Container(
width: 6.sp,
height: 5.sp,
margin: EdgeInsets.only(top: 1.sp, right: 8.sp),
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.circular(3.sp),
),
),
),
Text(
logic.version,
style: TextStyle(
color: Color(0xFFB7BECC),
fontSize: 12.sp,
Text(
logic.version,
style: TextStyle(
color: Color(0xFFB7BECC),
fontSize: 12.sp,
),
),
),
SizedBox(width: 8),
Image(
image: AssetImage(getHomeImage("icon_in")),
width: 24.sp,
height: 24.sp,
fit: BoxFit.fill,
),
],
SizedBox(width: 8),
Image(
image: AssetImage(getHomeImage("icon_in")),
width: 24.sp,
height: 24.sp,
fit: BoxFit.fill,
),
],
),
),
],
),)

View File

@ -20,8 +20,11 @@ class CircleLogic extends GetxController {
.get(url: Api.getCircleInterests, params: {"page": page});
var bean = BaseResponse<InterestsBean>.fromJson(
data, (data) => InterestsBean.fromJson(data));
circle = bean.data!;
update();
if(bean.data is InterestsBean&&bean.isSuccess()){
circle = bean.data!;
update();
}
}
loadMore() async {

View File

@ -6,6 +6,7 @@ import 'package:circle_app/router/app_routers.dart';
import 'package:circle_app/util/util.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
class ListLogic extends GetxController {
int callOutPage = 1;
@ -53,8 +54,15 @@ class ListLogic extends GetxController {
loadCallOutListData(_circleId);
}
void pushMsgPage(Lists bean,String cicleId) {
Get.toNamed(AppRoutes.UserInfoActivity, arguments: bean.user!.id!.toString());
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());
}
// if (bean.isQueen) {
// showJoinCiclePiker(cicleId);
// } else {

View File

@ -1,9 +1,14 @@
import 'dart:io';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:image_picker/image_picker.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';
class FeedbackLogic extends GetxController {
@ -11,20 +16,35 @@ class FeedbackLogic extends GetxController {
final ImagePicker _picker = ImagePicker();
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 {
try {
final XFile? pickedFile = await _picker.pickImage(
source: ImageSource.gallery,
);
// setState(() {
// _setImageFileListFromFile(pickedFile);
// });
if(null==pickedFile){
return;
}
SmartDialog.showLoading();
upDataImage(quToken,pickedFile!,CONFIG.USER_INFO_AVATAR,(result){
SmartDialog.dismiss(force: true);
state.imaglist.add(result);
update();
});
} catch (e) {
// setState(() {
// _pickImageError = e;
// });
}
}

View File

@ -3,4 +3,5 @@ class FeedbackState {
///Initialize variables
}
String maxMsg = "0/200";
List<String> imaglist = [];
}

View File

@ -4,6 +4,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import '../../components/my_app_bar.dart';
import '../../router/app_routers.dart';
import '../../util/util.dart';
import 'logic.dart';
@ -85,9 +86,10 @@ class FeedbackPage extends StatelessWidget {
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
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) {
if (index == 0) {
if (index == 0&&controller.state.imaglist.length<3) {
//
return GestureDetector(
onTap: () {
@ -108,8 +110,9 @@ class FeedbackPage extends StatelessWidget {
return Container(
margin: EdgeInsets.all(5.sp),
child: Center(
// child: _buildImageItem(
// 'https://book.flutterchina.club/assets/img/logo.png'),
child: _buildImageItem(controller.state.imaglist.length<3 ?
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),
Container(
margin: EdgeInsets.symmetric(horizontal: 72),
height: 42,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(21),
color: Color(0xFF21BEAB),
),
GestureDetector(
onTap: () {
// showToast("完善资料");
Get.toNamed(AppRoutes.Complete_materialPage, arguments: "user");
// controller.onInit();
},
child: Center(
child: Text(
'提交',
style: TextStyle(color: Colors.white, fontSize: 16),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(21),
gradient: LinearGradient(
colors: [
Color(0xFF06F9FA),
Color(0xFFDC5BFD),
],
begin: Alignment.centerLeft,
end: Alignment.centerRight,
),
),
padding: EdgeInsets.only(
top: 14.sp, bottom: 14.sp, left: 95.sp, right: 95.sp),
child: Text(
"提交",
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,
),
))
],
);
}
}

View File

@ -208,6 +208,7 @@ class Complete_materialLogic extends GetxController {
showToast('请上传头像');
return;
}
//TODO
LatLng location = await getLocation();
List<String> interestsList = [];
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'],
);
}
}

View File

@ -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/util/util.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_pickers/pickers.dart';
import 'package:flutter_pickers/style/default_style.dart';
import 'package:flutter_pickers/time_picker/model/date_mode.dart';
@ -199,6 +200,7 @@ class Complete_materialPage extends StatelessWidget {
fontSize: 14.sp),
border: InputBorder.none,
contentPadding: EdgeInsets.all(20.sp)),
inputFormatters: [LengthLimitingTextInputFormatter(40)],
)
],
),

View File

@ -30,6 +30,7 @@ class MinefragmentLogic extends GetxController {
isVip = userInfoBean!.vip;
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setInt('vip', isVip);
prefs.setInt('userId', userInfoBean!.id);
ageMsg = getAgeCOntent(userInfoBean!.gender, userInfoBean!.age, userInfoBean!.role, userInfoBean!.orientation);
}

View File

@ -1,7 +1,12 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart';
import '../../common/config.dart';
import '../../network/api.dart';
import '../../network/dio_manager.dart';
import '../../util/qiniu.dart';
import 'state.dart';
class ReportLogic extends GetxController {
@ -22,18 +27,36 @@ class ReportLogic extends GetxController {
return arrList;
}
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 {
try {
final XFile? pickedFile = await _picker.pickImage(
source: ImageSource.gallery,
);
// setState(() {
// _setImageFileListFromFile(pickedFile);
// });
if(null==pickedFile){
return;
}
SmartDialog.showLoading();
upDataImage(quToken,pickedFile!,CONFIG.USER_INFO_AVATAR,(result){
SmartDialog.dismiss(force: true);
state.imaglist.add(result);
update();
});
} catch (e) {
// setState(() {
// _pickImageError = e;
// });
}
}
}

View File

@ -1,7 +1,7 @@
import 'logic.dart';
class ReportState {
List<String> imaglist = [];
ReportState() {
///Initialize variables

View File

@ -3,6 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import '../../components/my_app_bar.dart';
import '../../router/app_routers.dart';
import '../../util/util.dart';
import 'logic.dart';
@ -78,7 +79,7 @@ class ReportPage extends StatelessWidget {
),
SizedBox(height: 30),
Container(
margin: EdgeInsets.only(left: 16, right: 16),
// margin: EdgeInsets.only(left: 10, right: 10),
height: 200,
width: double.infinity,
decoration: BoxDecoration(
@ -183,9 +184,9 @@ class ReportPage extends StatelessWidget {
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
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) {
if (index == 0) {
if (index == 0&&controller.state.imaglist.length<3) {
//
return GestureDetector(
onTap: () {
@ -205,8 +206,9 @@ class ReportPage extends StatelessWidget {
return Container(
margin: EdgeInsets.all(5.sp),
child: Center(
// child: _buildImageItem(
// 'https://book.flutterchina.club/assets/img/logo.png'),
child: _buildImageItem(controller.state.imaglist.length<3 ?
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,
),
))
],
);
}
}

View File

@ -26,6 +26,10 @@ class UserinfoLogic extends GetxController {
bool isMe = false;
bool isEdit = false;
bool isUrgeStatus = false;
bool isOnline = false;
bool isShowAlbum = true;
@override
void onInit() async {
@ -42,6 +46,7 @@ class UserinfoLogic extends GetxController {
isVip = userInfoBean!.vip;
onLineCity = userInfoBean!.isOnline == true ? "在线" : "离线";
isOnline = userInfoBean!.isOnline;
if (userInfoBean!.city != null) {
onLineCity = "$onLineCity·${userInfoBean!.city}";
}
@ -91,7 +96,7 @@ class UserinfoLogic extends GetxController {
myAlbumData, (myAlbumData) => AlbumResponseBean.fromJson(myAlbumData));
if(myAlbumBean.isSuccess()){
myAlbumBean.data.lists.forEach((element) {
state.imaglist.add(element.url);
state.imaglist.add(AlbumListItem(id: element.id,type: element.type,url:element.url));
});
}

View File

@ -1,3 +1,5 @@
import 'dart:math';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -24,9 +26,21 @@ class _MyTabbedScreenState extends State<UserinfoPage>
@override
void 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
void dispose() {
_tabController.dispose();
@ -106,7 +120,7 @@ class _MyTabbedScreenState extends State<UserinfoPage>
padding: EdgeInsets.only(
top: 10.sp, bottom: 10.sp, left: 55.sp, right: 55.sp),
child: Text(
"完善个人形象",
"完善个人形象",
style: TextStyle(
color: Colors.white,
fontSize: 12,
@ -229,12 +243,12 @@ class _MyTabbedScreenState extends State<UserinfoPage>
height: 5.sp,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Color(0xFF00FFF4),
color: logic.isOnline? Color(0xFF00FFF4): Color(0xFF787575),
),
),
Text(
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),
Container(
Visibility(
visible: logic.isShowAlbum,
child: Container(
margin: EdgeInsets.only(top: 18.sp, bottom: 14.sp),
child: controller.isMe? Text(
controller.isLikeFoMsg,
style: TextStyle(color: Colors.white30),
) :Container()) ,
) :Container())) ,
Expanded(
child: Container(
// color: Colors.blue,
@ -327,24 +343,27 @@ class _MyTabbedScreenState extends State<UserinfoPage>
labelColor: Color(0xFF00FFF4),
unselectedLabelColor: Color(0xB3FFFFFF),
indicatorSize: TabBarIndicatorSize.label,
tabs: [
tabs: const [
Tab(
text: "形象照",
),
Tab(text: "喊话")
],
),
GestureDetector(onTap: (){
controller.isMe? controller.isEdit = !controller.isEdit : controller.urgeChange();
controller.update();
// controller.updataImage();
},
child: Container(
child: Visibility(
visible: logic.isShowAlbum,
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(17),
gradient: LinearGradient(
gradient: const LinearGradient(
colors: [
Color(0xFF06F9FA),
Color(0xFF06F9FA),
Color(0xFFDC5BFD),
],
begin: Alignment.centerLeft,
@ -355,19 +374,20 @@ class _MyTabbedScreenState extends State<UserinfoPage>
top: 2.sp, bottom: 2.sp, left: 12.sp, right: 12.sp),
child: Text(
controller.isMe? controller.isEdit?"完成": "管理" : controller.isUrgeStatus? "已催更":"催更",
style: TextStyle(
style: const TextStyle(
color: Colors.white,
fontSize: 12,
),
),
),),
),),),
],
));
}
Widget _imageAdapter(UserinfoLogic controller) {
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3, //
),
itemCount:controller.isMe?
@ -538,8 +558,12 @@ class _MyTabbedScreenState extends State<UserinfoPage>
borderRadius: BorderRadius.circular(0.0),
child: GestureDetector(
onTap: () {
List<String> imaglist = [];
controller.state.imaglist.forEach((element) {
imaglist.add(element.url);
});
Get.toNamed(AppRoutes.Swiper, arguments: {
'imaglist':controller.state.imaglist,
'imaglist':imaglist,
'index':index
});
},

View File

@ -38,13 +38,18 @@ class DioManager {
//
baseUrl: baseUrl,
//
connectTimeout: Duration(seconds: 30),
connectTimeout: Duration(seconds: 30000000000),
//
receiveTimeout: Duration(seconds: 30),
receiveTimeout: Duration(seconds: 30000000000),
));
_dio!.interceptors.add(LogInterceptor(responseBody: true));
}
Future download(String urlPath,String savePath,ProgressCallback progressCallback)async{
return await _dio!.download(urlPath, savePath, onReceiveProgress : progressCallback);
}
/// get请求
/// [isShowErrorToast] true
/// [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'],
);
}
}

View File

@ -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{
// print(quToken);
if(quToken.isEmpty){
showToast("图片上传失败");
SmartDialog.dismiss(force: true);
return;
}
var path = await getApplicationSupportDirectoryPath();
CompressObject compressObject = CompressObject(

View File

@ -84,6 +84,8 @@ dependencies:
video_compress: ^3.1.2
#图片缓存
cached_network_image: ^3.2.3
#安装apk
flutter_install_app: 1.3.0