9 changed files with 482 additions and 258 deletions
Split 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/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/pages/mine/login_page.dart'; |
|||
import 'package:flutter/material.dart'; |
|||
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
|||
import 'package:get/get.dart'; |
|||
import 'package:tdesign_flutter/tdesign_flutter.dart'; |
|||
|
|||
class DeactivatePage extends StatelessWidget { |
|||
const DeactivatePage({super.key}); |
|||
|
|||
@override |
|||
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: [ |
|||
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