import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_svg/svg.dart'; import 'package:flutterflow_ui/flutterflow_ui.dart'; import 'package:vbvs_app/common/color/appConstants.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/component/base/SleepCalendarWidget.dart'; import 'package:vbvs_app/component/tool/ClickableContainer.dart'; import 'package:vbvs_app/component/tool/CustomCard.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/main_bottom/global_controller.dart'; import 'package:vbvs_app/controller/theme_controller/ThemeController.dart'; import 'package:vbvs_app/controller/user_info_controller.dart'; import 'package:vbvs_app/enum/LoginStatus.dart'; class MinePage extends StatefulWidget { const MinePage({super.key}); @override State createState() => _MinePageState(); } class _MinePageState extends State { GlobalController globalController = Get.find(); UserInfoController userInfoController = Get.find(); ThemeController themeController = Get.find(); @override Widget build(BuildContext context) { SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( statusBarColor: Colors.transparent, // 这里设置你希望的颜色 statusBarIconBrightness: Brightness.light, // 状态栏图标的亮度 )); int login = userInfoController.model.login!; return LayoutBuilder( builder: (context, bodySize) => GestureDetector( onTap: () => FocusScope.of(context).unfocus(), child: Container( decoration: BoxDecoration( image: DecorationImage( image: AssetImage('assets/img/bgImage.png'), // 本地图片 fit: BoxFit.fill, // 填满整个 Container ), ), child: Scaffold( backgroundColor: Colors.transparent, body: SafeArea( top: true, child: Container( height: bodySize.maxHeight, child: Column( mainAxisSize: MainAxisSize.max, children: [ Container( width: double.infinity, decoration: BoxDecoration( color: Colors.transparent, borderRadius: BorderRadius.only( bottomLeft: Radius.circular( AppConstants().normal_container_radius), bottomRight: Radius.circular( AppConstants().normal_container_radius), topLeft: Radius.circular(0.rpx), topRight: Radius.circular(0.rpx), ), ), child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 64.rpx, 0, 37.rpx, 0), child: Column( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB( 0, 65.rpx, 0, 0), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.end, children: [ ClickableContainer( backgroundColor: Colors.transparent, // 容器背景色 highlightColor: themeController .currentColor.sc21, // 点击时的背景色 padding: EdgeInsets .zero, // 这里去掉外部的 padding,避免影响点击范围 onTap: () { if (userInfoController.model.login == LoginStatus.LOGIN.code) { TopSlideNotification.show( context, text: "待开发功能".tr, ); } else { TopSlideNotification.show( context, text: "必须登录提示".tr, textColor: themeController.currentColor.sc9, ); Get.toNamed("/loginPage"); } }, child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 0.rpx, 0.rpx, 0.rpx), child: SvgPicture.asset( 'assets/img/icon/earphone.svg', width: 29.rpx, height: 29.rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: themeController.currentColor.sc3, ), ), ), ClickableContainer( backgroundColor: Colors.transparent, // 容器背景色 highlightColor: themeController .currentColor.sc21, // 点击时的背景色 padding: EdgeInsets .zero, // 这里去掉外部的 padding,避免影响点击范围 onTap: () { if (userInfoController.model.login == LoginStatus.LOGIN.code) { Get.toNamed("/settingPage"); } else { TopSlideNotification.show( context, text: "必须登录提示".tr, textColor: themeController.currentColor.sc9, ); Get.toNamed("/loginPage"); } }, child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 0.rpx, 0.rpx, 0.rpx), child: SvgPicture.asset( 'assets/img/icon/setting.svg', width: 29.rpx, height: 29 .rpx, // 如果 SVG 中没有固定颜色,使用 color 设置 color: themeController.currentColor.sc3, ), ), ), ].divide(SizedBox(width: 60.rpx)), ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB( 0, 50.rpx, 0, 66.rpx), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Obx(() { var userInfo = userInfoController.model.user; return Row( mainAxisSize: MainAxisSize.max, children: [ Container( width: 120.rpx, height: 120.rpx, clipBehavior: Clip.antiAlias, decoration: BoxDecoration( shape: BoxShape.circle, ), child: login == 1 ? (userInfoController.model.user! .avatar == null || userInfoController.model .user!.avatar!.isEmpty ? Image.asset( "assets/img/avatar.png", fit: BoxFit.cover, ) : Image.network( userInfoController .model.user!.avatar!, fit: BoxFit.cover, )) : Image.asset( "assets/img/avatar.png", fit: BoxFit.cover, ), ), Column( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( login == 1 ? (userInfoController.model .user!.nick_name ?? '未命名'.tr) : "我的.未登录".tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', color: themeController .currentColor.sc3, fontSize: AppConstants() .title_text_fontSize, letterSpacing: 0.0, ), ), Text( login == 1 ? (userInfoController.model .user!.email != null ? userInfoController .model.user!.email! : MyUtils.hidePhoneNumber( userInfoController .model .user! .phone!)) : "我的.未登录".tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', color: themeController .currentColor.sc4, fontSize: AppConstants() .normal_text_fontSize, letterSpacing: 0.0, ), ), ].divide(SizedBox(height: 20.rpx)), ), ].divide(SizedBox(width: 35.rpx)), ); }), CustomCard( borderRadius: 0, onTap: () async { if (login == 1) { await Get.toNamed("/updateUserPage"); await userInfoController.getUserInfo(); userInfoController.updateAll(); } else { Get.toNamed("/loginPage"); } }, // colors: [themeController.currentColor.sc5], colors: [Colors.transparent], child: Row( mainAxisSize: MainAxisSize.max, children: [ Text( login == 1 ? '编辑'.tr : '我的.去登录'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', color: themeController .currentColor.sc3, fontSize: AppConstants() .normal_text_fontSize, letterSpacing: 0.0, ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB( 0, 6.rpx, 0, 0.rpx), child: SvgPicture.asset( 'assets/img/icon/arrow_right.svg', width: 14.rpx, height: 14.rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: themeController .currentColor.sc3, ), ), ].divide(SizedBox(width: 16.rpx)), ), ), ], ), ), ], ), ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB( 30.rpx, 25.rpx, 30.rpx, 0), child: Container( width: double.infinity, decoration: BoxDecoration( color: Color(0xFF242835), borderRadius: BorderRadius.circular( AppConstants().normal_container_radius), ), child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 0, 0.rpx, 0), child: Column( mainAxisSize: MainAxisSize.max, children: [ ClickableContainer( backgroundColor: Colors.transparent, // 容器背景色 highlightColor: themeController .currentColor.sc21, // 点击时的背景色 padding: EdgeInsetsDirectional.fromSTEB( 40.rpx, 0.rpx, 40.rpx, 0.rpx), onTap: () { UserInfoController userInfoController = Get.find(); if (userInfoController.model.login != LoginStatus.LOGIN.code) { TopSlideNotification.show( context, text: "必须登录提示".tr, textColor: themeController.currentColor.sc9, ); Get.toNamed("/loginPage"); } else { Get.toNamed("/deviceTypeList"); } }, child: Container( child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 30.rpx, 0.rpx, 30.rpx), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( mainAxisSize: MainAxisSize.max, children: [ SvgPicture.asset( 'assets/img/icon/my_device.svg', width: 25.rpx, height: 25 .rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: stringToColor("#00C1AA"), ), Text( '我的.我的设备'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', color: themeController .currentColor.sc3, fontSize: AppConstants() .title_text_fontSize, letterSpacing: 0.0, ), ), ].divide(SizedBox(width: 22.rpx)), ), SvgPicture.asset( 'assets/img/icon/arrow_right.svg', width: 8.rpx, height: 15.rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: themeController.currentColor.sc3, ), ], ), ), ), ), ClickableContainer( backgroundColor: Colors.transparent, // 容器背景色 highlightColor: themeController .currentColor.sc21, // 点击时的背景色 padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 0.rpx, 0.rpx, 0.rpx), onTap: () { UserInfoController userInfoController = Get.find(); if (userInfoController.model.login != LoginStatus.LOGIN.code) { TopSlideNotification.show( context, text: "必须登录提示".tr, textColor: themeController.currentColor.sc9, ); Get.toNamed("/loginPage"); } else { // TopSlideNotification.show( // context, // text: "待开发.提示".tr, // textColor: // themeController.currentColor.sc2, // ); Get.toNamed("/applyRepairPage"); } }, child: Container( child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 40.rpx, 30.rpx, 40.rpx, 30.rpx), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( mainAxisSize: MainAxisSize.max, children: [ SvgPicture.asset( 'assets/img/icon/device_repair.svg', width: 25.rpx, height: 25 .rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: stringToColor("#00C1AA"), ), Text( '我的.设备报修'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', color: themeController .currentColor.sc3, fontSize: AppConstants() .title_text_fontSize, letterSpacing: 0.0, ), ), ].divide(SizedBox(width: 22.rpx)), ), SvgPicture.asset( 'assets/img/icon/arrow_right.svg', width: 8.rpx, height: 15.rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: themeController.currentColor.sc3, ), ], ), ), ), ), ClickableContainer( backgroundColor: Colors.transparent, // 容器背景色 highlightColor: themeController .currentColor.sc21, // 点击时的背景色 padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 0.rpx, 0.rpx, 0.rpx), onTap: () { UserInfoController userInfoController = Get.find(); if (userInfoController.model.login != LoginStatus.LOGIN.code) { TopSlideNotification.show( context, text: "必须登录提示".tr, textColor: themeController.currentColor.sc9, ); Get.toNamed("/loginPage"); } else { // TopSlideNotification.show( // context, // text: "待开发.提示".tr, // textColor: // themeController.currentColor.sc2, // ); Get.toNamed("/helpPage"); } }, child: Container( child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 40.rpx, 30.rpx, 40.rpx, 30.rpx), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( mainAxisSize: MainAxisSize.max, children: [ SvgPicture.asset( 'assets/img/icon/op_ex.svg', width: 25.rpx, height: 25 .rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: stringToColor("#00C1AA"), ), Text( '我的.操作说明'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', color: themeController .currentColor.sc3, fontSize: AppConstants() .title_text_fontSize, letterSpacing: 0.0, ), ), ].divide(SizedBox(width: 22.rpx)), ), SvgPicture.asset( 'assets/img/icon/arrow_right.svg', width: 8.rpx, height: 14.rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: themeController.currentColor.sc3, ), ], ), ), ), ), ClickableContainer( backgroundColor: Colors.transparent, // 容器背景色 highlightColor: themeController .currentColor.sc21, // 点击时的背景色 padding: EdgeInsetsDirectional.fromSTEB( 40.rpx, 0.rpx, 40.rpx, 0.rpx), onTap: () { UserInfoController userInfoController = Get.find(); if (userInfoController.model.login != LoginStatus.LOGIN.code) { TopSlideNotification.show( context, text: "必须登录提示".tr, textColor: themeController.currentColor.sc9, ); Get.toNamed("/loginPage"); } else { // TopSlideNotification.show( // context, // text: "待开发.提示".tr, // textColor: // themeController.currentColor.sc2, // ); Get.toNamed("/followPage"); } }, child: Container( child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 30.rpx, 0.rpx, 30.rpx), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( mainAxisSize: MainAxisSize.max, children: [ SvgPicture.asset( 'assets/img/icon/like.svg', width: 25.rpx, height: 25 .rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: stringToColor("#00C1AA"), ), Text( '我的.关注我们'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', color: themeController .currentColor.sc3, fontSize: AppConstants() .title_text_fontSize, letterSpacing: 0.0, ), ), ].divide(SizedBox(width: 22.rpx)), ), SvgPicture.asset( 'assets/img/icon/arrow_right.svg', width: 8.rpx, height: 15.rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: themeController.currentColor.sc3, ), ], ), ), ), ), ClickableContainer( backgroundColor: Colors.transparent, // 容器背景色 highlightColor: themeController .currentColor.sc21, // 点击时的背景色 padding: EdgeInsetsDirectional.fromSTEB( 40.rpx, 0.rpx, 40.rpx, 0.rpx), onTap: () { UserInfoController userInfoController = Get.find(); if (userInfoController.model.login != LoginStatus.LOGIN.code) { TopSlideNotification.show( context, text: "必须登录提示".tr, textColor: themeController.currentColor.sc9, ); Get.toNamed("/loginPage"); } else { // TopSlideNotification.show( // context, // text: "待开发.提示".tr, // textColor: // themeController.currentColor.sc2, // ); showModalBottomSheet( context: context, isScrollControlled: false, // 不需要滚动全屏 backgroundColor: Colors.transparent, // 为了圆角和美观 builder: (context) { return Container( decoration: BoxDecoration( color: const Color( 0xFF242835), // 你组件的底色 borderRadius: BorderRadius.only( topLeft: Radius.circular(20.rpx), topRight: Radius.circular(20.rpx), ), ), child: SleepCalendarWidget(), // 显示日历组件 ); }, ); } }, child: Container( child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 30.rpx, 0.rpx, 30.rpx), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( mainAxisSize: MainAxisSize.max, children: [ SvgPicture.asset( 'assets/img/icon/version.svg', width: 25.rpx, height: 25 .rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: stringToColor("#00C1AA"), ), Text( '我的.当前版本'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', color: themeController .currentColor.sc3, fontSize: AppConstants() .title_text_fontSize, letterSpacing: 0.0, ), ), ].divide(SizedBox(width: 22.rpx)), ), Row( mainAxisSize: MainAxisSize.max, children: [ Text( 'V1.0.2504.12', style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', color: Color(0xFFD9E3EB), fontSize: 26.rpx, letterSpacing: 0.0, ), ), SvgPicture.asset( 'assets/img/icon/arrow_right.svg', width: 8.rpx, height: 15 .rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: themeController .currentColor.sc3, ), ].divide(SizedBox(width: 28.rpx)), ), ], ), ), ), ), ] .divide(SizedBox(height: 0.rpx)) .addToStart(SizedBox(height: 30.rpx)) .addToEnd(SizedBox(height: 30.rpx)), ), ), ), ), ], ), ), ), ), ), ), ); } }