9 changed files with 482 additions and 258 deletions
Unified View
Diff Options
-
2lib/controller/global.dart
-
27lib/controller/mine/deactivate_controller.dart
-
12lib/controller/mine/teenager_mode_controller.dart
-
55lib/controller/mine/teenager_mode_open_controller.dart
-
2lib/main.dart
-
261lib/pages/setting/deactivate_page.dart
-
10lib/pages/setting/setting_page.dart
-
139lib/pages/setting/teenager_mode_open_page.dart
-
232lib/pages/setting/teenager_mode_page.dart
@ -0,0 +1,27 @@ |
|||||
|
import 'package:dating_touchme_app/controller/global.dart'; |
||||
|
import 'package:dating_touchme_app/controller/message/conversation_controller.dart'; |
||||
|
import 'package:dating_touchme_app/im/im_manager.dart'; |
||||
|
import 'package:get/get.dart'; |
||||
|
import 'package:get_storage/get_storage.dart'; |
||||
|
|
||||
|
class DeactivateController extends GetxController { |
||||
|
|
||||
|
|
||||
|
final storage = GetStorage(); |
||||
|
|
||||
|
final s = "".obs; |
||||
|
|
||||
|
void logout() async { |
||||
|
// 先退出 IM 登录 |
||||
|
await IMManager.instance.logout(); |
||||
|
// 清除会话列表和用户信息缓存 |
||||
|
if (Get.isRegistered<ConversationController>()) { |
||||
|
final conversationController = Get.find<ConversationController>(); |
||||
|
conversationController.clearConversations(); |
||||
|
} |
||||
|
// 清除本地存储 |
||||
|
storage.erase(); |
||||
|
// 清除全局数据 |
||||
|
GlobalData().logout(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,12 @@ |
|||||
|
import 'package:dating_touchme_app/controller/global.dart'; |
||||
|
import 'package:get/get.dart'; |
||||
|
|
||||
|
class TeenagerModeController extends GetxController { |
||||
|
final teenageMode = false.obs; |
||||
|
|
||||
|
@override |
||||
|
void onInit() { |
||||
|
super.onInit(); |
||||
|
teenageMode.value = GlobalData().teenagerMode; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,55 @@ |
|||||
|
import 'package:dating_touchme_app/controller/global.dart'; |
||||
|
import 'package:flutter/material.dart'; |
||||
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; |
||||
|
import 'package:get/get.dart'; |
||||
|
import 'package:get_storage/get_storage.dart'; |
||||
|
|
||||
|
class TeenagerModeOpenController extends GetxController { |
||||
|
final password = "".obs; |
||||
|
final confirmPassword = "".obs; |
||||
|
final nowPassword = "".obs; |
||||
|
final passwordController = TextEditingController().obs; |
||||
|
final teenageMode = false.obs; |
||||
|
|
||||
|
final storage = GetStorage(); |
||||
|
|
||||
|
@override |
||||
|
void onInit() { |
||||
|
super.onInit(); |
||||
|
nowPassword.value = storage.read<String>('teenagerPassword') ?? ""; |
||||
|
teenageMode.value = GlobalData().teenagerMode; |
||||
|
} |
||||
|
|
||||
|
openTeenagerMode() async { |
||||
|
if(password.value != confirmPassword.value){ |
||||
|
SmartDialog.showToast('密码不一致,请重新输入'); |
||||
|
password.value = ""; |
||||
|
confirmPassword.value = ""; |
||||
|
passwordController.value.value = TextEditingValue( |
||||
|
text: "", |
||||
|
selection: TextSelection.fromPosition(TextPosition(offset: 0)), |
||||
|
); |
||||
|
} else { |
||||
|
GlobalData().teenagerMode = true; |
||||
|
await storage.write('teenagerMode', true); |
||||
|
await storage.write('teenagerPassword', confirmPassword.value); |
||||
|
Get.back(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
closeTeenagerMode() async { |
||||
|
if(password.value != nowPassword.value){ |
||||
|
SmartDialog.showToast('密码错误,请重新输入'); |
||||
|
password.value = ""; |
||||
|
passwordController.value.value = TextEditingValue( |
||||
|
text: "", |
||||
|
selection: TextSelection.fromPosition(TextPosition(offset: 0)), |
||||
|
); |
||||
|
} else { |
||||
|
GlobalData().teenagerMode = false; |
||||
|
await storage.write('teenagerMode', false); |
||||
|
await storage.write('teenagerPassword', ""); |
||||
|
Get.back(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,119 +1,184 @@ |
|||||
import 'package:dating_touchme_app/components/page_appbar.dart'; |
import 'package:dating_touchme_app/components/page_appbar.dart'; |
||||
|
import 'package:dating_touchme_app/controller/mine/deactivate_controller.dart'; |
||||
|
import 'package:dating_touchme_app/extension/ex_widget.dart'; |
||||
import 'package:dating_touchme_app/generated/assets.dart'; |
import 'package:dating_touchme_app/generated/assets.dart'; |
||||
|
import 'package:dating_touchme_app/pages/mine/login_page.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'; |
||||
|
import 'package:get/get.dart'; |
||||
|
import 'package:tdesign_flutter/tdesign_flutter.dart'; |
||||
|
|
||||
class DeactivatePage extends StatelessWidget { |
class DeactivatePage extends StatelessWidget { |
||||
const DeactivatePage({super.key}); |
const DeactivatePage({super.key}); |
||||
|
|
||||
@override |
@override |
||||
Widget build(BuildContext context) { |
Widget build(BuildContext context) { |
||||
return Scaffold( |
|
||||
appBar: PageAppbar(title: ""), |
|
||||
body: Container( |
|
||||
padding: EdgeInsets.symmetric( |
|
||||
vertical: 52.w, |
|
||||
horizontal: 15.w |
|
||||
), |
|
||||
child: Column( |
|
||||
children: [ |
|
||||
Text( |
|
||||
"账号注销安全提示", |
|
||||
style: TextStyle( |
|
||||
fontSize: 16.w, |
|
||||
fontWeight: FontWeight.w700 |
|
||||
), |
|
||||
|
return GetX<DeactivateController>( |
||||
|
init: DeactivateController(), |
||||
|
builder: (controller){ |
||||
|
return Scaffold( |
||||
|
appBar: PageAppbar(title: "${controller.s.value}"), |
||||
|
body: Container( |
||||
|
padding: EdgeInsets.symmetric( |
||||
|
vertical: 52.w, |
||||
|
horizontal: 15.w |
||||
), |
), |
||||
SizedBox(height: 35.w,), |
|
||||
Text( |
|
||||
"申请注销趣恋恋账号前,趣恋恋将进行以下验证,以保证你的账号安全、财产安全。", |
|
||||
style: TextStyle( |
|
||||
fontSize: 13.w, |
|
||||
fontWeight: FontWeight.w500, |
|
||||
color: const Color.fromRGBO(144, 144, 144, 1) |
|
||||
), |
|
||||
), |
|
||||
SizedBox(height: 15.w,), |
|
||||
Container( |
|
||||
height: 104.w, |
|
||||
padding: EdgeInsets.symmetric( |
|
||||
vertical: 20.w, |
|
||||
horizontal: 17.w |
|
||||
), |
|
||||
decoration: BoxDecoration( |
|
||||
color: const Color.fromRGBO(245, 245, 245, 1), |
|
||||
borderRadius: BorderRadius.all(Radius.circular(8.w)) |
|
||||
), |
|
||||
child: Column( |
|
||||
crossAxisAlignment: CrossAxisAlignment.start, |
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween, |
|
||||
children: [ |
|
||||
Row( |
|
||||
children: [ |
|
||||
Image.asset( |
|
||||
Assets.imagesSuccessIcon, |
|
||||
width: 15.w, |
|
||||
), |
|
||||
SizedBox(width: 9.w,), |
|
||||
Text( |
|
||||
"账号处于安全状态", |
|
||||
style: TextStyle( |
|
||||
fontSize: 13.w, |
|
||||
color: const Color.fromRGBO(41, 186, 63, 1) |
|
||||
), |
|
||||
) |
|
||||
], |
|
||||
|
child: Column( |
||||
|
children: [ |
||||
|
Text( |
||||
|
"账号注销安全提示", |
||||
|
style: TextStyle( |
||||
|
fontSize: 16.w, |
||||
|
fontWeight: FontWeight.w700 |
||||
|
), |
||||
|
), |
||||
|
SizedBox(height: 35.w,), |
||||
|
Text( |
||||
|
"申请注销趣恋恋账号前,趣恋恋将进行以下验证,以保证你的账号安全、财产安全。", |
||||
|
style: TextStyle( |
||||
|
fontSize: 13.w, |
||||
|
fontWeight: FontWeight.w500, |
||||
|
color: const Color.fromRGBO(144, 144, 144, 1) |
||||
|
), |
||||
|
), |
||||
|
SizedBox(height: 15.w,), |
||||
|
Container( |
||||
|
height: 104.w, |
||||
|
padding: EdgeInsets.symmetric( |
||||
|
vertical: 20.w, |
||||
|
horizontal: 17.w |
||||
|
), |
||||
|
decoration: BoxDecoration( |
||||
|
color: const Color.fromRGBO(245, 245, 245, 1), |
||||
|
borderRadius: BorderRadius.all(Radius.circular(8.w)) |
||||
), |
), |
||||
Row( |
|
||||
|
child: Column( |
||||
|
crossAxisAlignment: CrossAxisAlignment.start, |
||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween, |
||||
children: [ |
children: [ |
||||
Image.asset( |
|
||||
Assets.imagesErrorIcon, |
|
||||
width: 15.w, |
|
||||
|
Row( |
||||
|
children: [ |
||||
|
Image.asset( |
||||
|
Assets.imagesSuccessIcon, |
||||
|
width: 15.w, |
||||
|
), |
||||
|
SizedBox(width: 9.w,), |
||||
|
Text( |
||||
|
"账号处于安全状态", |
||||
|
style: TextStyle( |
||||
|
fontSize: 13.w, |
||||
|
color: const Color.fromRGBO(41, 186, 63, 1) |
||||
|
), |
||||
|
) |
||||
|
], |
||||
|
), |
||||
|
Row( |
||||
|
children: [ |
||||
|
Image.asset( |
||||
|
Assets.imagesErrorIcon, |
||||
|
width: 15.w, |
||||
|
), |
||||
|
SizedBox(width: 9.w,), |
||||
|
Text( |
||||
|
"钱包余额未结清", |
||||
|
style: TextStyle( |
||||
|
fontSize: 13.w, |
||||
|
fontWeight: FontWeight.w500 |
||||
|
), |
||||
|
) |
||||
|
], |
||||
), |
), |
||||
SizedBox(width: 9.w,), |
|
||||
Text( |
|
||||
"钱包余额未结清", |
|
||||
style: TextStyle( |
|
||||
fontSize: 13.w, |
|
||||
fontWeight: FontWeight.w500 |
|
||||
), |
|
||||
) |
|
||||
], |
], |
||||
), |
), |
||||
], |
|
||||
), |
|
||||
), |
|
||||
Spacer(), |
|
||||
Container( |
|
||||
width: 350.w, |
|
||||
height: 45.w, |
|
||||
decoration: BoxDecoration( |
|
||||
borderRadius: BorderRadius.all(Radius.circular(45.w)), |
|
||||
gradient: LinearGradient( |
|
||||
begin: Alignment.centerLeft, // 90deg: 从左到右 |
|
||||
end: Alignment.centerRight, |
|
||||
colors: [ |
|
||||
Color.fromRGBO(131, 89, 255, 1), // 起点颜色 |
|
||||
Color.fromRGBO(77, 127, 231, 1), // 中间颜色 |
|
||||
Color.fromRGBO(61, 138, 224, 1), // 终点颜色 |
|
||||
], |
|
||||
stops: [0.0, 0.7753, 1.0], // 对应 0%、77.53%、100% |
|
||||
), |
), |
||||
), |
|
||||
child: Center( |
|
||||
child: Text( |
|
||||
"提交注销申请", |
|
||||
style: TextStyle( |
|
||||
fontSize: 18.w, |
|
||||
color: Colors.white, |
|
||||
fontWeight: FontWeight.w500 |
|
||||
|
Spacer(), |
||||
|
Container( |
||||
|
width: 350.w, |
||||
|
height: 45.w, |
||||
|
decoration: BoxDecoration( |
||||
|
borderRadius: BorderRadius.all(Radius.circular(45.w)), |
||||
|
gradient: LinearGradient( |
||||
|
begin: Alignment.centerLeft, // 90deg: 从左到右 |
||||
|
end: Alignment.centerRight, |
||||
|
colors: [ |
||||
|
Color.fromRGBO(131, 89, 255, 1), // 起点颜色 |
||||
|
Color.fromRGBO(77, 127, 231, 1), // 中间颜色 |
||||
|
Color.fromRGBO(61, 138, 224, 1), // 终点颜色 |
||||
|
], |
||||
|
stops: [0.0, 0.7753, 1.0], // 对应 0%、77.53%、100% |
||||
|
), |
||||
), |
), |
||||
), |
|
||||
), |
|
||||
) |
|
||||
], |
|
||||
), |
|
||||
), |
|
||||
|
child: Center( |
||||
|
child: Text( |
||||
|
"提交注销申请", |
||||
|
style: TextStyle( |
||||
|
fontSize: 18.w, |
||||
|
color: Colors.white, |
||||
|
fontWeight: FontWeight.w500 |
||||
|
), |
||||
|
), |
||||
|
), |
||||
|
).onTap((){ |
||||
|
showGeneralDialog( |
||||
|
context: context, |
||||
|
pageBuilder: (BuildContext buildContext, Animation< |
||||
|
double> animation, |
||||
|
Animation<double> secondaryAnimation) { |
||||
|
return TDAlertDialog( |
||||
|
title: '是否退出当前账号?', |
||||
|
buttonWidget: Container( |
||||
|
padding: EdgeInsetsGeometry.only(top: 16.w, |
||||
|
right: 30.w, |
||||
|
left: 30.w, |
||||
|
bottom: 32.w), |
||||
|
child: Row( |
||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween, |
||||
|
children: [ |
||||
|
TDButton( |
||||
|
text: '取 消', |
||||
|
width: 120, |
||||
|
size: TDButtonSize.large, |
||||
|
type: TDButtonType.fill, |
||||
|
shape: TDButtonShape.round, |
||||
|
theme: TDButtonTheme.defaultTheme, |
||||
|
onTap: () { |
||||
|
Navigator.of(context).pop(); |
||||
|
}, |
||||
|
), |
||||
|
TDButton( |
||||
|
text: '确 定', |
||||
|
width: 120, |
||||
|
size: TDButtonSize.large, |
||||
|
type: TDButtonType.fill, |
||||
|
shape: TDButtonShape.round, |
||||
|
theme: TDButtonTheme.danger, |
||||
|
gradient: LinearGradient( |
||||
|
begin: Alignment.centerLeft, // 90deg: 从左到右 |
||||
|
end: Alignment.centerRight, |
||||
|
colors: [ |
||||
|
Color.fromRGBO(131, 89, 255, 1), // 起点颜色 |
||||
|
Color.fromRGBO(77, 127, 231, 1), // 中间颜色 |
||||
|
Color.fromRGBO(61, 138, 224, 1), // 终点颜色 |
||||
|
], |
||||
|
stops: [0.0, 0.7753, 1.0], // 对应 0%、77.53%、100% |
||||
|
), |
||||
|
onTap: () { |
||||
|
controller.logout(); |
||||
|
Get.offAll(() => LoginPage()); |
||||
|
}, |
||||
|
), |
||||
|
], |
||||
|
), |
||||
|
) |
||||
|
); |
||||
|
}, |
||||
|
); |
||||
|
}) |
||||
|
], |
||||
|
), |
||||
|
), |
||||
|
); |
||||
|
}, |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
Write
Preview
Loading…
Cancel
Save