代码提交

This commit is contained in:
CYH 2025-01-17 23:22:48 +08:00
parent 20ff09c9d5
commit 0687ee37f6
19 changed files with 294 additions and 254 deletions

View File

@ -71,8 +71,8 @@ android {
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion 21
targetSdkVersion flutter.targetSdkVersion
versionCode 81
versionName "2.3.7"
versionCode 85
versionName "2.4.0"
manifestPlaceholders = [
vivo_APPID: "105669716",
vivo_APPKEY:"84f750207787376b310ca5b0d5969122",

View File

@ -36,6 +36,7 @@ import '../../commons/config.dart';
class Call_outLogic extends GetxController {
final Call_outState state = Call_outState();
TextEditingController textEditingController = TextEditingController();
ScrollController scrollController = ScrollController();
bool isCheck = false;
late ConfigBean configBean;
String circleName = "";
@ -69,7 +70,7 @@ class Call_outLogic extends GetxController {
loadPushInterestData();
var data =
await DioManager.instance.get(url: Api.getCircleList, params: {});
await DioManager.instance.get(url: Api.getConfig, params: {});
var bean = BaseResponse<ConfigBean>.fromJson(
data, (data) => ConfigBean.fromJson(data));
if (bean.isSuccess()) {

View File

@ -1,4 +1,5 @@
import 'package:circle_app/utils/util.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
@ -26,6 +27,25 @@ class _Call_outPageState extends State<Call_outPage> {
bool isShowKeyboard = false;
@override
void initState() {
// TODO: implement initState
super.initState();
logic.scrollController.addListener(() {
if (logic.scrollController.position.pixels ==
logic.scrollController.position.maxScrollExtent) {
logic.startSelectCircleActivity();
}
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
logic.scrollController.dispose();
}
@override
Widget build(BuildContext context) {
return GetBuilder<Call_outLogic>(builder: (controller) {
@ -73,16 +93,19 @@ class _Call_outPageState extends State<Call_outPage> {
child: Row(
children: [
Text(
'选择圈子:',
'🌍选择圈子:',
style: TextStyle(
color: Colors.white, fontSize: 16.sp),
),
Expanded(child: Container()),
logic.circleName == ''
? Container(
child: Text('选择合适的圈子更容易吸引圈友',style: TextStyle(color: Colors.grey),),
)
child: Text(
'选择合适的圈子更容易吸引圈友',
style:
TextStyle(color: Colors.grey),
),
)
: Container(
padding: EdgeInsets.only(
left: 7.sp, right: 7.sp),
@ -143,7 +166,8 @@ class _Call_outPageState extends State<Call_outPage> {
setState(() {});
},
style: TextStyle(
color: Colors.white, fontSize: 17.0.sp),
color: Colors.white,
fontSize: 17.0.sp),
maxLines: 32,
maxLength: 200,
decoration: InputDecoration(
@ -151,7 +175,7 @@ class _Call_outPageState extends State<Call_outPage> {
color: const Color.fromRGBO(
255, 255, 255, 0.6),
fontSize: 14.sp),
hintText: '请输入...(左下角上传图片或视频)',
hintText: '请输入...(左下角上传图片或视频)',
border: InputBorder.none,
contentPadding: EdgeInsets.only(
left: 17.sp, right: 17.sp),
@ -164,9 +188,12 @@ class _Call_outPageState extends State<Call_outPage> {
Text(
'${controller.textEditingController.text.length}/200',
style: TextStyle(
color: Colors.white, fontSize: 12.sp),
color: Colors.white,
fontSize: 12.sp),
),
SizedBox(width: 15.sp,)
SizedBox(
width: 15.sp,
)
],
)
],
@ -187,87 +214,89 @@ class _Call_outPageState extends State<Call_outPage> {
),
)),
if (!isShowKeyboard)
Container(
height: 90.sp,
padding: EdgeInsets.only(
left: 17.sp, right: 17.sp, bottom: 5.sp),
child: Column(
children: [
optionAtWidget(),
Row(
children: [
GestureDetector(
onTap: () {
logic.showImg();
},
child: Image.asset(
getCircleImage('photo'),
width: 30.sp,
),
),
const SizedBox(
width: 16,
),
GestureDetector(
onTap: () {
logic.showVideo();
},
child: Image.asset(
getCircleImage('video'),
width: 30.sp,
),
),
Expanded(
child: GestureDetector(
Container(
height: 90.sp,
padding: EdgeInsets.only(
left: 17.sp, right: 17.sp, bottom: 5.sp),
child: Column(
children: [
optionAtWidget(),
Row(
children: [
GestureDetector(
onTap: () {
if (controller.vip == 2) {
controller.isCheck =
!controller.isCheck;
controller.update();
} else {
showOKToast("至尊喊话为年会员特权,开通年会员即可享受哦~");
controller.showRechargeDialog();
}
logic.showImg();
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Image.asset(
getCircleImage(controller.isCheck
? 'check'
: 'uncheck'),
width: 17.5.sp,
),
SizedBox(
width: 4.sp,
),
Text(
'使用至尊喊话',
style: TextStyle(
color: Colors.white,
fontSize: 16.sp),
)
],
child: Image.asset(
getCircleImage('photo'),
width: 30.sp,
),
),
),
GestureDetector(
onTap: () {
navigateToContentGuidelines();
},
child: Text(
'内容规范',
style: TextStyle(
color: Colors.white,
fontSize: 14.sp),
const SizedBox(
width: 16,
),
)
],
),
],
),
)
GestureDetector(
onTap: () {
logic.showVideo();
},
child: Image.asset(
getCircleImage('video'),
width: 30.sp,
),
),
Expanded(
child: GestureDetector(
onTap: () {
if (controller.vip == 2) {
controller.isCheck =
!controller.isCheck;
controller.update();
} else {
showOKToast(
"至尊喊话为年会员特权,开通年会员即可享受哦~");
controller.showRechargeDialog();
}
},
child: Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Image.asset(
getCircleImage(
controller.isCheck
? 'check'
: 'uncheck'),
width: 17.5.sp,
),
SizedBox(
width: 4.sp,
),
Text(
'使用至尊喊话',
style: TextStyle(
color: Colors.white,
fontSize: 16.sp),
)
],
),
),
),
GestureDetector(
onTap: () {
navigateToContentGuidelines();
},
child: Text(
'内容规范',
style: TextStyle(
color: Colors.white,
fontSize: 14.sp),
),
)
],
),
],
),
)
],
),
if (isShowKeyboard)
@ -312,7 +341,8 @@ class _Call_outPageState extends State<Call_outPage> {
!controller.isCheck;
controller.update();
} else {
showOKToast("至尊喊话为年会员特权,开通年会员即可享受哦~");
showOKToast(
"至尊喊话为年会员特权,开通年会员即可享受哦~");
controller.showRechargeDialog();
}
},
@ -321,9 +351,10 @@ class _Call_outPageState extends State<Call_outPage> {
MainAxisAlignment.center,
children: [
Image.asset(
getCircleImage(controller.isCheck
? 'check'
: 'uncheck'),
getCircleImage(
controller.isCheck
? 'check'
: 'uncheck'),
width: 17.5.sp,
),
SizedBox(
@ -364,80 +395,82 @@ class _Call_outPageState extends State<Call_outPage> {
optionAtWidget() {
return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
Get.toNamed(Routes.FriendDialog)!
.then((value) {
if (value != null) {
logic.configList.clear();
logic.configList.addAll(logic.selectedList);
logic.update();
}
});
},
child: Container(
height: 20.sp,
width: Get.width,
// color: Colors.red,
margin: EdgeInsets.only(
// left: 15.sp,
bottom: 10.sp,
),
child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'@ 提醒谁看',
style: TextStyle(
color: const Color(0xFFB7BECC),
fontSize: 15.sp,
behavior: HitTestBehavior.opaque,
onTap: () {
Get.toNamed(Routes.FriendDialog)!.then((value) {
if (value != null) {
logic.configList.clear();
logic.configList.addAll(logic.selectedList);
logic.update();
}
});
},
child: Container(
height: 30.sp,
width: Get.width,
padding: EdgeInsets.only(left: 4.sp,right: 4.sp),
margin: EdgeInsets.only(
// left: 15.sp,
bottom: 10.sp,
),
decoration: BoxDecoration(
color: CupertinoColors.systemGrey.withOpacity(0.2),
borderRadius: BorderRadius.circular(15.sp)
),
child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'@ 提醒谁看',
style: TextStyle(
color: const Color(0xFFB7BECC),
fontSize: 15.sp,
),
),
),
SizedBox(
width: 10.sp,
),
// Spacer(),
Expanded(
child: ListView.builder(
itemBuilder: (context, index) {
var info = logic.configList[index];
return Container(
margin: EdgeInsets.only(right: 3.sp),
child: ClipOval(
child: Image.network(
info.avatar.isNotEmpty
? info.avatar
: Api.defaultAvatar,
fit: BoxFit.cover,
width: 20.0.sp,
height: 20.0.sp,
),
SizedBox(
width: 10.sp,
),
// Spacer(),
Expanded(
child: ListView.builder(
itemBuilder: (context, index) {
var info = logic.configList[index];
return Container(
margin: EdgeInsets.only(right: 3.sp),
child: ClipOval(
child: Image.network(
info.avatar.isNotEmpty ? info.avatar : Api.defaultAvatar,
fit: BoxFit.cover,
width: 20.0.sp,
height: 20.0.sp,
),
);
},
scrollDirection: Axis.horizontal,
// reverse: true,
itemCount: logic.configList.length,
)),
Image(
image: AssetImage(getHomeImage("icon_in")),
// width: 44.sp,
height: 18.sp,
),
// GestureDetector(
// onTap: () {
// showRelationShipPiker(context, logic);
// },
// child: Row(
// children: [
//
//
// ],
// ),
// ),
],
),
);
},
scrollDirection: Axis.horizontal,
// reverse: true,
itemCount: logic.configList.length,
)),
Image(
image: AssetImage(getHomeImage("icon_in")),
// width: 44.sp,
height: 18.sp,
),
// GestureDetector(
// onTap: () {
// showRelationShipPiker(context, logic);
// },
// child: Row(
// children: [
//
//
// ],
// ),
// ),
],
),
),
),
);
}
@ -448,12 +481,14 @@ class _Call_outPageState extends State<Call_outPage> {
child: ListView.builder(
itemCount: interests.length,
scrollDirection: Axis.horizontal,
controller: logic.scrollController,
// padding: EdgeInsets.symmetric(vertical: 15.sp, horizontal: 15.sp),
itemBuilder: (context, index) {
final interest = interests[index];
return GestureDetector(
onTap: () {
MyConfigData data = MyConfigData(interests[index]!.id!.toString(),interests[index].title!,true);
MyConfigData data = MyConfigData(interests[index]!.id!.toString(),
interests[index].title!, true);
logic.numbers = [data];
logic.circleName = interest.title;
logic.update();
@ -470,49 +505,44 @@ class _Call_outPageState extends State<Call_outPage> {
),
color: const Color(0xFF392D53),
),
child: Container(
margin: EdgeInsets.all(0.2.sp),
padding: EdgeInsets.only(left: 5.sp, right: 5.sp, top: 5.sp),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.0),
color: const Color(0xFF392D53),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
// color: Colors.red,
child: Row(
children: [
Text(
child: Stack(
children: [
Container(
margin: EdgeInsets.all(0.2.sp),
padding: EdgeInsets.only(left: 5.sp, right: 5.sp, top: 5.sp),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.0),
color: const Color(0xFF392D53),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
margin: EdgeInsets.only(right: 15.sp),
child: Text(
interest.title,
style: TextStyle(
fontSize: 13.sp,
color: Colors.white,
),
),
// Container(
// margin: EdgeInsets.only(
// bottom: 2.sp,
// ),
// child: Icon(
// Icons.keyboard_arrow_right,
// color: Colors.white,
// size: 18.sp,
// ),
// )
],
),
),
Text(
interest.pushTitle,
style: TextStyle(
fontSize: 13.sp,
color: AppColor.mainColor,
),
),
],
)),
),
SizedBox(height: 4.sp,),
Text(
interest.pushTitle,
style: TextStyle(
fontSize: 13.sp,
color: AppColor.mainColor,
),
),
],
)),
Positioned(top: 2.sp,right:4.sp,child: Image.asset(
getHomeImage('icon_in'),
width: 24.sp,
),)
],
),
),
);
},
@ -786,7 +816,6 @@ class _Call_outPageState extends State<Call_outPage> {
);
}
void _showDelVideoDialog(BuildContext context, Call_outLogic controller) {
showDialog(
context: context,

View File

@ -269,7 +269,7 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
'微信、QQ、加Q、+V、地球号、绿泡泡、公众号、网站、app、视频、手机号、id、企鹅、门槛、收费、加群'.split('');
if (textEditingController.text.isNotEmpty &&
(userInfoBean?.wx_num?.isEmpty ?? true)) {
(userInfoBean?.contact?.isEmpty ?? true)) {
bool isContain = false;
String sendText = textEditingController.text.toUpperCase();
for (String text in pressionStr) {
@ -279,8 +279,8 @@ class _InputTextFieldState extends TIMUIKitState<TIMInputTextField> {
}
if (isContain) {
await showAddWxPicker(
userInfoBean!.wx_num!.isNotEmpty ?? false,
isHidden: userInfoBean!.wx_num!.isNotEmpty ?? false,
userInfoBean!.contact!.isNotEmpty ?? false,
isHidden: userInfoBean!.contact!.isNotEmpty ?? false,
isWxHidden: userInfoBean!.hide_wx_num == 1,
);
imStatusOK = false;

View File

@ -146,11 +146,11 @@ final ScrollController nearScrollController = ScrollController();
}
@override
void onInit() {
void onInit() async {
super.onInit();
loadCircleListData();
loadCirclePeopleData();
initGerder();
await initGerder();
getCityList();
getBanner();
// getNearByList();
@ -232,9 +232,9 @@ final ScrollController nearScrollController = ScrollController();
}
}
void initGerder() async {
initGerder() async {
var data1 =
await DioManager.instance.get(url: Api.getCircleList, params: {});
await DioManager.instance.get(url: Api.getConfig, params: {});
var bean1 = BaseResponse<ConfigBean>.fromJson(
data1, (data1) => ConfigBean.fromJson(data1));
@ -248,7 +248,9 @@ final ScrollController nearScrollController = ScrollController();
new_genderList.add(MyConfigData(key, value, true));
}
});
configBean.roleMap.forEach((key, value) {
allRoleList.add(value);
});
genderList.add(MyConfigData('-1', '非二元', true));
dis_genderList.add(MyConfigData('-1', '非二元', true));
new_genderList.add(MyConfigData('-1', '非二元', true));

View File

@ -85,7 +85,7 @@ class LikeLogic extends GetxController {
}
});
initGerder();
await initGerder();
loadInviteData();
loadCircleListData();
loadMyCircleData();
@ -100,9 +100,9 @@ class LikeLogic extends GetxController {
// cityNewName = logic.model!.city ?? '';
}
void initGerder() async {
initGerder() async {
var data1 =
await DioManager.instance.get(url: Api.getCircleList, params: {});
await DioManager.instance.get(url: Api.getConfig, params: {});
var bean1 = BaseResponse<ConfigBean>.fromJson(
data1, (data1) => ConfigBean.fromJson(data1));
@ -116,10 +116,11 @@ class LikeLogic extends GetxController {
}
});
// roleList.clear();
genderList.add(MyConfigData('-1', '非二元', true));
newgenderList.add(MyConfigData('-1', '非二元', true));
update();
}
}

View File

@ -2,7 +2,7 @@ import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
// import 'package:flutter_install_app/flutter_install_app.dart';
import 'package:flutter_install_app/flutter_install_app.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:url_launcher/url_launcher.dart';
@ -301,7 +301,7 @@ class _CustomDialogState extends State<UpdateDialog> {
installApk() async {
//flutter_install_app
// await AppInstaller.installApk(filePath, actionRequired: false);
await AppInstaller.installApk(filePath, actionRequired: false);
}
}

View File

@ -235,7 +235,7 @@ class Gift_shopPage extends StatelessWidget {
Container(
width: 250.sp,
child: Text(
'送了${logic.toUser['giftNum']['num']}个礼物,价值${logic.toUser['giftNum']['amount']}跨豆',
'送了${logic.toUser['giftNum']['num']}个礼物,价值${logic.toUser['giftNum']['amount']}小票',
style:
TextStyle(fontSize: 13.sp, color: Colors.white),
),

View File

@ -90,13 +90,13 @@ class _HomePageState extends State<HomePage>
showGiftAnimationOverlay(context,event.url);
});
// permissionNotifySub = EventBusManager.on<PermissionInfo>().listen((event) {
// showPerssionOverlay(event);
// });
permissionNotifySub = EventBusManager.on<PermissionInfo>().listen((event) {
showPerssionOverlay(event);
});
permissionCloseNotifySub = EventBusManager.on<PermissionClose>().listen((event) {
permissionOverlayEntry.remove();
});
}
@override

View File

@ -148,7 +148,7 @@ class Complete_materialLogic extends GetxController {
var data1 =
await DioManager.instance.get(url: Api.getCircleList, params: {});
await DioManager.instance.get(url: Api.getConfig, params: {});
var bean1 = BaseResponse<ConfigBean>.fromJson(
data1, (data1) => ConfigBean.fromJson(data1));
configBean = bean1.data!;

View File

@ -707,12 +707,18 @@ class _Complete_materialPageState extends State<Complete_materialPage> {
List<String> typeLit = typeStr.split('');
List<String> optionLit = [];
controller.roleList.forEach((element) {
optionLit.add(element + '(${typeLit[controller.roleList.indexOf(element)]})');
if (element.toString().length == 1) {
optionLit.add(element + '(${typeLit[controller.roleList.indexOf(element)]})');
} else {
optionLit.add(element);
}
});
int index = 2;
if (controller.state.role.isNotEmpty) {
index = controller.roleList.indexOf(controller.state.role);
if (controller.roleList.contains(controller.state.role)) {
index = controller.roleList.indexOf(controller.state.role);
}
}
Pickers.showSinglePicker(context,

View File

@ -56,10 +56,6 @@ class _MsgPageState extends State<MsgPage> with AutomaticKeepAliveClientMixin {
}
}
showRechargeDialog() {
Get.bottomSheet(
Scaffold(

View File

@ -88,7 +88,7 @@ class QuickLogic extends GetxController {
void initGerder() async {
var data1 =
await DioManager.instance.get(url: Api.getCircleList, params: {});
await DioManager.instance.get(url: Api.getConfig, params: {});
var bean1 = BaseResponse<ConfigBean>.fromJson(
data1, (data1) => ConfigBean.fromJson(data1));

View File

@ -34,7 +34,7 @@ class _QuickPageState extends State<QuickPage>
with AutomaticKeepAliveClientMixin, SingleTickerProviderStateMixin {
@override
bool get wantKeepAlive => true;
final logic = Get.find<MsgLogic>();
late MsgLogic logic;
final ctr = Get.find<QuickLogic>();
@ -53,6 +53,14 @@ class _QuickPageState extends State<QuickPage>
void initState() {
// TODO: implement initState
super.initState();
if (Get.isRegistered<MsgLogic>()) {
logic = Get.find<MsgLogic>();
} else {
Get.lazyPut(()=>MsgLogic());
logic = Get.find<MsgLogic>();
}
// = Get.find<MsgLogic>()
_tabController = TabController(length: 2, vsync: this, initialIndex: 0);
_tabController.addListener(() {
ctr.currentIndex = _tabController.index;

View File

@ -149,16 +149,13 @@ class Relationship_buildingPage extends StatelessWidget {
isScrollControlled: true);
},
child: Container(
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.75),
borderRadius: BorderRadius.circular(25.sp)),
margin: EdgeInsets.only(right: 4.sp),
width: 40.sp,
height: 40.sp,
child: Icon(
Icons.add,
size: 30.sp,
),
child: ClipOval(
child: Image.asset(getMineImage("icon_img_add"),width: 40.sp,
height: 40.sp,),
)
),
),
Text(
@ -180,16 +177,14 @@ class Relationship_buildingPage extends StatelessWidget {
userInfo['relationTypeName']);
},
child: Container(
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.75),
borderRadius: BorderRadius.circular(25.sp)),
margin: EdgeInsets.only(right: 4.sp),
width: 40.sp,
height: 40.sp,
child: Icon(
Icons.add,
size: 30.sp,
),
margin: EdgeInsets.only(right: 4.sp),
width: 40.sp,
height: 40.sp,
child: ClipOval(
child: Image.asset(getMineImage("icon_img_add"),width: 40.sp,
height: 40.sp,),
)
),
),
Text(
@ -257,7 +252,7 @@ class Relationship_buildingPage extends StatelessWidget {
},
child: Icon(
Icons.heart_broken_rounded,
color: CupertinoColors.inactiveGray,
color: Colors.white,
size: 30.sp,
)))
],

View File

@ -38,7 +38,7 @@ class Send_lucky_bagLogic extends GetxController {
var data =
await DioManager.instance.get(url: Api.welfareConfig, params: {});
var data1 =
await DioManager.instance.get(url: Api.getCircleList, params: {});
await DioManager.instance.get(url: Api.getConfig, params: {});
var bean1 = BaseResponse<ConfigBean>.fromJson(
data1, (data1) => ConfigBean.fromJson(data1));

View File

@ -92,7 +92,7 @@ class World_call_outLogic extends GetxController {
void initGerder() async {
var data1 =
await DioManager.instance.get(url: Api.getCircleList, params: {});
await DioManager.instance.get(url: Api.getConfig, params: {});
var bean1 = BaseResponse<ConfigBean>.fromJson(
data1, (data1) => ConfigBean.fromJson(data1));

View File

@ -30,7 +30,7 @@ class Api {
static const UpdataUserInfo = 'user-service/register/user/info';
//
static const getCircleList = 'user-service/app/config';
static const getConfig = 'user-service/app/config';
//vip价格
static const getVipPrice = 'mall-service/vips';

View File

@ -322,7 +322,7 @@ List<String> genderList = [];
List<String> orientationList = [];
List<String> roleList = [];
List<String> allRoleList = [];
String getGenderImg(int number) {
if (number == null) return '';
@ -392,8 +392,8 @@ String getOrientationContent(int number) {
}
String getRoleContent(int number) {
if (roleList.length != 0) {
return roleList[number - 1];
if (allRoleList.length != 0) {
return allRoleList[number - 1];
} else {
switch (number) {
case 1:
@ -2414,4 +2414,6 @@ bool isWithinLastHour(DateTime inputTime) {
showTimeRecordDialog(UserBean userInfoBean) {
Get.bottomSheet(TimeRecordDialog(userInfoBean:userInfoBean),isScrollControlled:true);
}
}