You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

410 lines
17 KiB

import 'package:dating_touchme_app/components/page_appbar.dart';
import 'package:dating_touchme_app/extension/ex_widget.dart';
import 'package:dating_touchme_app/generated/assets.dart';
import 'package:dating_touchme_app/pages/mine/blacklist_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
class SettingPage extends StatefulWidget {
const SettingPage({super.key});
@override
State<SettingPage> createState() => _SettingPageState();
}
class _SettingPageState extends State<SettingPage> {
bool blockUser = false;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color.fromRGBO(250, 250, 250, 1),
appBar: PageAppbar(title: "设置"),
body: SingleChildScrollView(
child: Container(
padding: EdgeInsets.symmetric(
vertical: 15.w,
horizontal: 10.w
),
child: Column(
children: [
BlockItem(
children: [
Item(
label: "后台播放",
child: TDSwitch(
isOn: blockUser,
trackOnColor: const Color.fromRGBO(117, 98, 249, 1),
onChanged: (bool e){
print(e);
blockUser = e;
setState(() {
});
return e;
},
),
),
LineItem(),
Item(
label: "语音/视频通话提示音",
child: TDSwitch(
isOn: blockUser,
trackOnColor: const Color.fromRGBO(117, 98, 249, 1),
onChanged: (bool e){
print(e);
blockUser = e;
setState(() {
});
return e;
},
),
),
],
),
BlockItem(
children: [
Item(
label: "安全中心",
child: Icon(
Icons.keyboard_arrow_right,
size: 10.w,
color: const Color.fromRGBO(191, 191, 191, 1),
),
),
LineItem(),
Item(
label: "黑名单",
child: Icon(
Icons.keyboard_arrow_right,
size: 10.w,
color: const Color.fromRGBO(191, 191, 191, 1),
),
).onTap((){
Get.to(() => BlacklistPage());
}),
],
),
BlockItem(
children: [
Item(
label: "隐私设置",
child: Icon(
Icons.keyboard_arrow_right,
size: 10.w,
color: const Color.fromRGBO(191, 191, 191, 1),
),
),
LineItem(),
Item(
label: "青少年模式",
child: Icon(
Icons.keyboard_arrow_right,
size: 10.w,
color: const Color.fromRGBO(191, 191, 191, 1),
),
),
],
),
BlockItem(
children: [
Item(
label: "系统权限管理",
child: Icon(
Icons.keyboard_arrow_right,
size: 10.w,
color: const Color.fromRGBO(191, 191, 191, 1),
),
),
LineItem(),
Item(
label: "消息通知",
child: Icon(
Icons.keyboard_arrow_right,
size: 10.w,
color: const Color.fromRGBO(191, 191, 191, 1),
),
),
LineItem(),
Item(
label: "检查更新",
child: Row(
children: [
Text(
"版本号 1.0.000",
style: TextStyle(
fontSize: 13.w,
color: const Color.fromRGBO(117, 98, 249, 1)
),
),
SizedBox(width: 10.w,),
Icon(
Icons.keyboard_arrow_right,
size: 10.w,
color: const Color.fromRGBO(191, 191, 191, 1),
)
],
),
).onTap((){
Navigator.of(context).push(TDSlidePopupRoute(
modalBarrierColor: TDTheme.of(context).fontGyColor2,
slideTransitionFrom: SlideTransitionFrom.center,
builder: (context) {
return Material(
color: Colors.transparent,
child: Container(
color: Colors.transparent,
width: 299.w,
padding: EdgeInsets.only(
top: 56.w
),
child: Stack(
clipBehavior: Clip.none,
children: [
Container(
width: 299.w,
padding: EdgeInsets.only(
top: 147.w,
left: 30.w,
right: 30.w,
bottom: 25.w
),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(18.w)),
color: Colors.white
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
"体验全新升级v1.2.0",
style: TextStyle(
fontSize: 16.w,
fontWeight: FontWeight.w500
),
),
SizedBox(height: 14.w,),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: 2.w,
height: 5.w,
margin: EdgeInsets.only(
right: 10.w,
top: 6.w
),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(2.w)),
color: const Color.fromRGBO(51, 51, 51, 1)
),
),
SizedBox(
width: 204.w,
child: Text(
"首页风格改版,更全面的内容,恍然一新的视觉用户体验。",
style: TextStyle(
fontSize: 12.w,
),
),
)
],
),
SizedBox(height: 8.w,),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: 2.w,
height: 5.w,
margin: EdgeInsets.only(
right: 10.w,
top: 6.w
),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(2.w)),
color: const Color.fromRGBO(51, 51, 51, 1)
),
),
SizedBox(
width: 204.w,
child: Text(
"优化了动画细节,让产品更流畅。",
style: TextStyle(
fontSize: 12.w,
),
),
)
],
),
SizedBox(height: 32.w,),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
width: 113.w,
height: 40.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(9.w)),
color: const Color.fromRGBO(245, 245, 245, 1)
),
child: Center(
child: Text(
"暂不更新",
style: TextStyle(
fontSize: 15.w,
color: const Color.fromRGBO(144, 144, 144, 1)
),
),
),
),
Container(
width: 113.w,
height: 40.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(9.w)),
color: const Color.fromRGBO(245, 245, 245, 1),
gradient: const LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight, // 对应 CSS 90deg
colors: [
Color.fromRGBO(131, 89, 255, 1), // rgba(131, 89, 255, 1)
Color.fromRGBO(61, 138, 224, 1), // rgba(61, 138, 224, 1)
],
),
),
child: Center(
child: Text(
"立即升级",
style: TextStyle(
fontSize: 15.w,
fontWeight: FontWeight.w500,
color: Colors.white
),
),
),
),
],
)
],
),
),
Positioned(
left: 0,
top: -56.w,
child: Image.asset(
Assets.imagesUpdataBg,
width: 299.w,
),
),
Positioned(
left: 11.w,
top: -14.w,
child: Image.asset(
Assets.imagesUpdataIcon,
width: 36.w,
),
),
Positioned(
left: 43.w,
top: 29.w,
child: Image.asset(
Assets.imagesUpdataFont,
width: 76.w,
),
)
],
),
),
);
}));
}),
],
),
],
),
),
),
);
}
}
class BlockItem extends StatefulWidget {
final List<Widget> children;
const BlockItem({super.key, required this.children});
@override
State<BlockItem> createState() => _BlockItemState();
}
class _BlockItemState extends State<BlockItem> {
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.symmetric(
horizontal: 14.w
),
margin: EdgeInsets.only(
bottom: 10.w
),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(9.w)),
color: Colors.white
),
child: Column(
children: widget.children,
),
);
}
}
class Item extends StatefulWidget {
final String label;
final Widget child;
const Item({super.key, required this.label, required this.child});
@override
State<Item> createState() => _ItemState();
}
class _ItemState extends State<Item> {
@override
Widget build(BuildContext context) {
return SizedBox(
height: 54.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
widget.label,
style: TextStyle(
fontSize: 13.w,
fontWeight: FontWeight.w500
),
),
widget.child
],
),
);
}
}
class LineItem extends StatelessWidget {
const LineItem({super.key});
@override
Widget build(BuildContext context) {
return Container(
width: 320.w,
height: 2.w,
color: const Color.fromRGBO(245, 245, 245, 1),
);
}
}