diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index a2ad459..4a34cf8 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + notificationStatus = PermissionStatus.denied.obs; + final RxBool checking = false.obs; + + // 初始化时检查权限 + @override + void onInit() { + super.onInit(); + // 延迟检查,确保服务已初始化 + checkPermission(); + } + + // 检查通知权限状态 + Future checkPermission() async { + checking.value = true; + try { + // 检查通知权限 + final status = await Permission.notification.status; + notificationStatus.value = status; + + print('通知权限状态: $status'); + return status; + } catch (e) { + print('检查通知权限失败: $e'); + return PermissionStatus.denied; + } finally { + checking.value = false; + } + } + + // 请求通知权限 + Future requestNotificationPermission() async { + try { + final status = await Permission.notification.request(); + notificationStatus.value = status; + + print('请求通知权限结果: $status'); + return status; + } catch (e) { + print('请求通知权限失败: $e'); + return PermissionStatus.denied; + } + } + + // 打开应用设置页面(让用户手动开启权限) + Future openSettings() async { + try { + AppSettings.openAppSettings( + type: AppSettingsType.notification, + ); + } catch (e) { + print('打开设置页面失败: $e'); + } + } + + // 检查是否有通知权限的便捷方法 + // Future hasNotificationPermission() async { + // final status = await checkNotificationPermission(); + // return status.isGranted || status.isLimited; + // } + + // 获取权限状态描述 + String getPermissionStatusText() { + switch (notificationStatus.value) { + case PermissionStatus.granted: + return '已开启'; + case PermissionStatus.denied: + return '已拒绝'; + case PermissionStatus.restricted: + return '受限制'; + case PermissionStatus.limited: + return '部分授权'; + case PermissionStatus.permanentlyDenied: + return '永久拒绝'; + case PermissionStatus.provisional: + return '临时授权'; + } + } + + // 获取权限状态颜色 + String getPermissionStatusColor() { + switch (notificationStatus.value) { + case PermissionStatus.granted: + return '绿色'; + case PermissionStatus.denied: + return '橙色'; + case PermissionStatus.restricted: + return '红色'; + case PermissionStatus.limited: + return '蓝色'; + case PermissionStatus.permanentlyDenied: + return '红色'; + case PermissionStatus.provisional: + return '黄色'; + } + } +} \ No newline at end of file diff --git a/lib/controller/setting/setting_controller.dart b/lib/controller/setting/setting_controller.dart new file mode 100644 index 0000000..d6d5567 --- /dev/null +++ b/lib/controller/setting/setting_controller.dart @@ -0,0 +1,213 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:tdesign_flutter/tdesign_flutter.dart'; +import '../../generated/assets.dart'; +import 'package:package_info_plus/package_info_plus.dart'; + +class SettingController extends GetxController { + + final appName = ''.obs; + final packageName = ''.obs; + final version = ''.obs; + final buildNumber = ''.obs; + + @override + Future onInit() async { + super.onInit(); + // 从全局依赖中获取UserApi + await getAppInfo(); + } + // 获取验证码 + Future getAppInfo() async { + try { + PackageInfo packageInfo = await PackageInfo.fromPlatform(); + appName.value = packageInfo.appName; + packageName.value = packageInfo.packageName; + version.value = packageInfo.version; + buildNumber.value = packageInfo.buildNumber; + } catch (e) { + print('获取应用信息失败: $e'); + } + } + + // 弹出版本升级的dialog + void _showUpdateDialog(){ + Navigator.of(Get.context!).push(TDSlidePopupRoute( + modalBarrierColor: TDTheme.of(Get.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, + ), + ) + ], + ), + ), + ); + })); + } + +} + diff --git a/lib/pages/home/report_page.dart b/lib/pages/home/report_page.dart index 6a19b8a..9403d74 100644 --- a/lib/pages/home/report_page.dart +++ b/lib/pages/home/report_page.dart @@ -23,7 +23,7 @@ class _ReportPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: PageAppbar(title: "举报中心",), + appBar: PageAppbar(title: "举报中心"), body: SingleChildScrollView( child: Container( padding: EdgeInsets.only( diff --git a/lib/pages/mine/auth_center_page.dart b/lib/pages/mine/auth_center_page.dart index 188a73b..7b59cb0 100644 --- a/lib/pages/mine/auth_center_page.dart +++ b/lib/pages/mine/auth_center_page.dart @@ -4,6 +4,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import '../../components/page_appbar.dart'; import '../../controller/mine/auth_controller.dart'; import '../../extension/router_service.dart'; import '../../generated/assets.dart'; @@ -18,10 +19,7 @@ class AuthCenterPage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( backgroundColor: Color(0xffF5F5F5), - appBar: AppBar( - title: Text('认证中心', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), - centerTitle: true, - ), + appBar: PageAppbar(title: "认证中心"), body: Obx(() { if (controller.isLoading.value) { return const Center(child: CupertinoActivityIndicator(radius: 12,)); diff --git a/lib/pages/mine/phone_page.dart b/lib/pages/mine/phone_page.dart index e602a6c..7464d83 100644 --- a/lib/pages/mine/phone_page.dart +++ b/lib/pages/mine/phone_page.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import '../../components/page_appbar.dart'; import '../../controller/mine/phone_controller.dart'; class PhonePage extends StatelessWidget { @@ -13,10 +14,7 @@ class PhonePage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( backgroundColor: Color(0xffFFFFFF), - appBar: AppBar( - title: Text('手机认证', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), - centerTitle: true, - ), + appBar: PageAppbar(title: "手机认证"), body: Obx(() { return IndexedStack( index: controller.tabIndex.value, diff --git a/lib/pages/mine/real_name_page.dart b/lib/pages/mine/real_name_page.dart index a45e396..9aa3bd2 100644 --- a/lib/pages/mine/real_name_page.dart +++ b/lib/pages/mine/real_name_page.dart @@ -4,6 +4,7 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import '../../components/page_appbar.dart'; import '../../controller/mine/auth_controller.dart'; class RealNamePage extends StatelessWidget { @@ -14,10 +15,7 @@ class RealNamePage extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( backgroundColor: Color(0xffFFFFFF), - appBar: AppBar( - title: Text('实名认证', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), - centerTitle: true, - ), + appBar: PageAppbar(title: "实名认证"), body: Column( children: [ Container( diff --git a/lib/pages/mine/setting_page.dart b/lib/pages/mine/setting_page.dart index fb22e17..af0b86f 100644 --- a/lib/pages/mine/setting_page.dart +++ b/lib/pages/mine/setting_page.dart @@ -1,410 +1,238 @@ -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 createState() => _SettingPageState(); -} - -class _SettingPageState extends State { - - - 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 children; - const BlockItem({super.key, required this.children}); - - @override - State createState() => _BlockItemState(); -} - -class _BlockItemState extends State { - @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 createState() => _ItemState(); -} - -class _ItemState extends State { - @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), - ); - } -} +// 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 createState() => _SettingPageState(); +// } +// +// class _SettingPageState extends State { +// +// +// 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((){ +// +// }), +// ], +// ), +// ], +// ), +// ), +// ), +// ); +// } +// } +// +// class BlockItem extends StatefulWidget { +// final List children; +// const BlockItem({super.key, required this.children}); +// +// @override +// State createState() => _BlockItemState(); +// } +// +// class _BlockItemState extends State { +// @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 createState() => _ItemState(); +// } +// +// class _ItemState extends State { +// @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), +// ); +// } +// } diff --git a/lib/pages/mine/blacklist_page.dart b/lib/pages/setting/blacklist_page.dart similarity index 100% rename from lib/pages/mine/blacklist_page.dart rename to lib/pages/setting/blacklist_page.dart diff --git a/lib/pages/setting/notice_page.dart b/lib/pages/setting/notice_page.dart index 3378021..0e68bb6 100644 --- a/lib/pages/setting/notice_page.dart +++ b/lib/pages/setting/notice_page.dart @@ -1,79 +1,77 @@ 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 NoticePage extends StatefulWidget { - const NoticePage({super.key}); +import '../../components/page_appbar.dart'; +import '../../controller/setting/notification_controller.dart'; - @override - State createState() => _NoticePageState(); -} +class NoticePage extends StatelessWidget { + NoticePage({super.key}); -class _NoticePageState extends State with AutomaticKeepAliveClientMixin{ + final NotificationController controller = Get.put(NotificationController()); @override Widget build(BuildContext context) { - super.build(context); return Scaffold( backgroundColor: Color(0xffF5F5F5), - appBar: AppBar( - title: Text('消息通知', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), - centerTitle: true, - backgroundColor: Colors.white, - ), + appBar: PageAppbar(title: "消息通知"), body: Expanded( child: SingleChildScrollView( padding: EdgeInsetsGeometry.symmetric(vertical: 16.w), - child: Column( - children: [ - TDCellGroup( - theme: TDCellGroupTheme.cardTheme, - cells: [ - TDCell( - arrow: true, - title: '接受推送通知', - description: '已开启', - ), - TDCell( - arrow: false, - title: '接受推送通知', - description: '一段很长很长的内容文字', - rightIconWidget: TDSwitch( - isOn: false, - trackOnColor: const Color.fromRGBO(117, 98, 249, 1), - onChanged: (bool e){ - return false; - }, - ) - ), - ], - ), - const SizedBox(height: 12), - TDCellGroup( - theme: TDCellGroupTheme.cardTheme, - cells: [ - TDCell( - arrow: false, - title: '后台播放', - description: '一段很长很长的内容文字', - rightIconWidget: TDSwitch( - isOn: true, - trackOnColor: const Color.fromRGBO(117, 98, 249, 1), - onChanged: (bool e){ - return false; - }, - ) - ), - ], - ), - ], - ), + child: Obx(() { + return Column( + children: [ + TDCellGroup( + theme: TDCellGroupTheme.cardTheme, + cells: [ + TDCell( + arrow: true, + title: '接受推送通知', + description: controller.getPermissionStatusText(), + onClick: (cell){ + controller.openSettings(); + }, + ), + TDCell( + arrow: false, + title: '接受推送通知', + description: '一段很长很长的内容文字', + rightIconWidget: TDSwitch( + isOn: false, + trackOnColor: const Color.fromRGBO(117, 98, 249, 1), + onChanged: (bool e){ + return false; + }, + ) + ), + ], + ), + const SizedBox(height: 12), + TDCellGroup( + theme: TDCellGroupTheme.cardTheme, + cells: [ + TDCell( + arrow: false, + title: '后台播放', + description: '一段很长很长的内容文字', + rightIconWidget: TDSwitch( + isOn: true, + trackOnColor: const Color.fromRGBO(117, 98, 249, 1), + onChanged: (bool e){ + return false; + }, + ) + ), + ], + ), + ], + ); + }), ), ), ); } - @override - bool get wantKeepAlive => true; } diff --git a/lib/pages/setting/setting_page.dart b/lib/pages/setting/setting_page.dart index ea67fd2..d72219f 100644 --- a/lib/pages/setting/setting_page.dart +++ b/lib/pages/setting/setting_page.dart @@ -1,155 +1,149 @@ -import 'package:dating_touchme_app/components/home_appbar.dart'; -import 'package:dating_touchme_app/generated/assets.dart'; -import 'package:dating_touchme_app/pages/discover/live_room_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'; +import '../../components/page_appbar.dart'; +import '../../controller/setting/setting_controller.dart'; +import 'blacklist_page.dart'; import 'notice_page.dart'; -class SettingPage extends StatefulWidget { - const SettingPage({super.key}); +class SettingPage extends StatelessWidget { - @override - State createState() => _SettingPageState(); -} - -class _SettingPageState extends State with AutomaticKeepAliveClientMixin{ + SettingPage({super.key}); + final SettingController controller = Get.put(SettingController()); @override Widget build(BuildContext context) { - super.build(context); return Scaffold( backgroundColor: Color(0xffF5F5F5), - appBar: AppBar( - title: Text('设置', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), - centerTitle: true, - backgroundColor: Colors.white, - ), + appBar: PageAppbar(title: "设置"), body: Expanded( child: SingleChildScrollView( padding: EdgeInsetsGeometry.symmetric(vertical: 16.w), - child: Column( - children: [ - TDCellGroup( - theme: TDCellGroupTheme.cardTheme, - cells: [ - TDCell( - arrow: false, - title: '允许中间邀请弹窗', - rightIconWidget: TDSwitch( - isOn: false, - trackOnColor: const Color.fromRGBO(117, 98, 249, 1), - onChanged: (bool e){ - return false; + child: Obx(() { + return Column( + children: [ + TDCellGroup( + theme: TDCellGroupTheme.cardTheme, + cells: [ + TDCell( + arrow: false, + title: '允许中间邀请弹窗', + rightIconWidget: TDSwitch(isOn: false,trackOnColor: const Color.fromRGBO(117, 98, 249, 1),onChanged: (bool e) { + return false; + }) + ), + TDCell( + arrow: false, + title: '后台播放', + rightIconWidget: TDSwitch( + isOn: true, + trackOnColor: const Color.fromRGBO(117, 98, 249, 1), + onChanged: (bool e) { + return false; + }, + ) + ), + TDCell( + arrow: false, + title: '语音/视频通话提示音', + rightIconWidget: TDSwitch(isOn: false,trackOnColor: const Color.fromRGBO(117, 98, 249, 1),onChanged: (bool e) { + + return false; + }) + ), + ], + ), + const SizedBox(height: 12), + TDCellGroup( + theme: TDCellGroupTheme.cardTheme, + cells: [ + TDCell(arrow: true, title: '安全中心', onClick: (cell) { + print('安全中心'); + }), + TDCell(arrow: true, title: '黑名单', onClick: (cell) { + Get.to(() => BlacklistPage()); + }), + ], + ), + const SizedBox(height: 12), + TDCellGroup( + theme: TDCellGroupTheme.cardTheme, + cells: [ + TDCell(arrow: true, title: '系统权限管理'), + TDCell(arrow: true, title: '消息通知', onClick: (cell) { + Get.to(() => NoticePage()); + }), + TDCell(arrow: true, title: '检查更新', onClick: (cell) { + // _showUpdateDialog(); }, + noteWidget: Text('当前版本:${controller.version.value}',style: TextStyle(fontSize: 13.w,color: const Color.fromRGBO(117, 98, 249, 1))), ) - ), - TDCell( - arrow: false, - title: '后台播放', - rightIconWidget: TDSwitch( - isOn: true, - trackOnColor: const Color.fromRGBO(117, 98, 249, 1), - onChanged: (bool e){ - return false; - }, - ) - ), - TDCell(arrow: false, title: '单行标题'), - ], - ), - const SizedBox(height: 12), - TDCellGroup( - theme: TDCellGroupTheme.cardTheme, - cells: [ - TDCell(arrow: true, title: '黑名单',onClick: (cell) { - print('单行标题'); - } - ), - ], - ), - const SizedBox(height: 12), - TDCellGroup( - theme: TDCellGroupTheme.cardTheme, - cells: [ - TDCell(arrow: true, title: '单行标题'), - TDCell(arrow: true, title: '单行标题'), - TDCell(arrow: true, title: '消息通知',onClick: (cell) { - Get.to(()=> NoticePage()); - } - ), - ], - ), - const SizedBox(height: 36), - TDButton( - text: '退出登录', - width: MediaQuery.of(context).size.width - 40, - size: TDButtonSize.large, - type: TDButtonType.fill, - shape: TDButtonShape.round, - theme: TDButtonTheme.danger, - onTap: (){ - // showGeneralDialog( - // context: context, - // pageBuilder: (BuildContext buildContext, Animation animation, - // Animation secondaryAnimation) { - // return TDConfirmDialog( - // title: '是否退出当前账号?', - // - // ); - // }, - // ); - showGeneralDialog( - context: context, - pageBuilder: (BuildContext buildContext, Animation animation, - Animation 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, - onTap: (){ - Navigator.of(context).pop(); - }, + ], + ), + const SizedBox(height: 64), + TDButton( + text: '退出登录', + width: MediaQuery.of(context).size.width - 40, + size: TDButtonSize.large, + type: TDButtonType.fill, + shape: TDButtonShape.round, + theme: TDButtonTheme.danger, + onTap: () { + showGeneralDialog( + context: context, + pageBuilder: (BuildContext buildContext, Animation< + double> animation, + Animation 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, + onTap: () { + Navigator.of(context).pop(); + }, + ), + ], ), - ], - ), - ) - ); - }, - ); - }, - ), - ], - ), + ) + ); + }, + ); + }, + ), + const SizedBox(height: 24), + ], + ); + }), ), ), ); } - @override - bool get wantKeepAlive => true; } diff --git a/pubspec.yaml b/pubspec.yaml index 1a5d398..c20394b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -58,6 +58,8 @@ dependencies: wechat_assets_picker: ^9.8.0 wechat_camera_picker: ^4.4.0 tdesign_flutter: ^0.2.5 + app_settings: ^6.1.1 + package_info_plus: ^9.0.0 record: ^6.1.2 video_player: ^2.9.2 chewie: ^1.8.5 # 视频播放器UI