import 'package:ef/ef.dart'; import 'package:flutter/material.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/home_page/SleepDataModuleWidget.dart'; import 'package:vbvs_app/component/home_page/SleepDateWidget.dart'; import 'package:vbvs_app/component/tool/ClickableContainer.dart'; import 'package:vbvs_app/component/tool/CustomCard.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'; class HomePage extends StatefulWidget { const HomePage({super.key}); @override State createState() => _HomePageState(); } class _HomePageState extends State { GlobalController globalController = Get.find(); UserInfoController userInfoController = Get.find(); ThemeController themeController = Get.find(); @override Widget build(BuildContext context) { 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: Text("首页"), child: Container( height: bodySize.maxHeight, child: Padding( padding: EdgeInsetsDirectional.fromSTEB( AppConstants().main_left_right_padding, 47.rpx, AppConstants().main_left_right_padding, 0), child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ Padding( //用户信息 padding: EdgeInsetsDirectional.fromSTEB( AppConstants().content_left_right_padding, 0, AppConstants().content_left_right_padding, 0), child: Container( width: double.infinity, child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Obx(() { return Visibility( visible: userInfoController.model.login == 0, child: CustomCard( borderRadius: 20.rpx, onTap: () async { Get.toNamed("/loginPage"); }, colors: [ themeController.currentColor.sc1, themeController.currentColor.sc2, ], child: Container( width: 100.rpx, height: 60.rpx, alignment: Alignment.center, padding: EdgeInsetsDirectional.fromSTEB( 16.rpx, 0, 16.rpx, 0), child: Text( '首页.登录'.tr, style: FlutterFlowTheme.of(context) .titleSmall .override( fontFamily: 'Inter Tight', color: themeController .currentColor.sc19, letterSpacing: 0.0, ), ), ), ), ); }), Obx(() { return Visibility( visible: userInfoController.model.login == 1, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "飞行的鱼", style: TextStyle(color: Colors.white), ), Text( "嘉兴 晴", style: TextStyle(color: Colors.white), ), ], ), ); }), SvgPicture.asset( 'assets/img/icon/add.svg', width: 39.rpx, height: 39.rpx, // 如果 SVG 中没有固定颜色,可以这样设置 //todo 颜色 color: themeController.currentColor.sc16, ), ], ), ), ), Padding( //绑定数量 padding: EdgeInsetsDirectional.fromSTEB( 19.rpx, 34.rpx, 0, 21.rpx), child: ClickableContainer( backgroundColor: Colors.transparent, // 容器背景色 highlightColor: Colors.orange, // 点击时的背景色 onTap: () { print('点击了容器'); }, padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 10.rpx, 0, 10.rpx), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( child: Row( mainAxisSize: MainAxisSize.min, children: [ Text( '首页.已关联体征监测设备'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', fontSize: AppConstants() .title_text_fontSize, letterSpacing: 0.0, //todo 颜色 color: themeController .currentColor.sc3, ), ), Text( '0', style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', fontSize: AppConstants() .title_text_fontSize, letterSpacing: 0.0, color: themeController .currentColor.sc8, ), ), ].divide(SizedBox( width: 6.rpx, )), )), Obx(() { return Visibility( visible: userInfoController .model.deviceBindNum! > 0, child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 0, 0.rpx, 8.rpx, 0.rpx), child: SvgPicture.asset( 'assets/img/icon/arrow_right.svg', width: 14.rpx, height: 14.rpx, // 如果 SVG 中没有固定颜色,可以这样设置 color: Colors.white, ), ), ); }), ], ), ), ), Container( //未绑定布局 width: MediaQuery.sizeOf(context).width, height: MediaQuery.sizeOf(context).height * 0.277, constraints: BoxConstraints( minWidth: 690.rpx, minHeight: 450.rpx, ), decoration: BoxDecoration( color: themeController.currentColor.sc5, borderRadius: BorderRadius.circular( AppConstants().normal_container_radius), // 圆角半径 ), child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.center, children: [ CustomCard( borderRadius: AppConstants() .button_container_radius, // 圆角半径 onTap: () { Get.toNamed("/personPage"); }, colors: [ // 渐变色 themeController.currentColor.sc1, themeController.currentColor.sc2, ], child: Container( width: MediaQuery.sizeOf(context).width * 0.66, height: MediaQuery.sizeOf(context).height * 0.055, constraints: BoxConstraints( minWidth: 500.rpx, minHeight: 90.rpx, ), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.center, children: [ SvgPicture.asset( 'assets/img/icon/scan.svg', width: 25.rpx, height: 25.rpx, // SVG 的固定大小 color: themeController .currentColor.sc16, // 颜色设置 ), Text( '首页.扫一扫绑定'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( color: themeController .currentColor.sc19, fontFamily: 'Inter', fontSize: AppConstants() .normal_text_fontSize, letterSpacing: 0.0, ), ), ].divide(SizedBox(width: 17.rpx)), ), ), ), CustomCard( borderRadius: AppConstants() .button_container_radius, // 圆角半径 onTap: () { print('Button pressed ...'); Get.toNamed("/deviceType"); }, colors: [ //todo 颜色 themeController.currentColor.sc1, themeController.currentColor.sc2, ], // 渐变色是同一个色,也可以根据需要调整 child: Container( width: MediaQuery.sizeOf(context).width * 0.66, height: MediaQuery.sizeOf(context).height * 0.055, constraints: BoxConstraints( minWidth: 500.rpx, minHeight: 90.rpx, ), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.center, children: [ SvgPicture.asset( 'assets/img/icon/bluetooth.svg', width: 25.rpx, height: 25.rpx, // 如果 SVG 中没有固定颜色,可以这样设置 //todo 颜色 color: themeController.currentColor.sc16, ), Text( '首页.蓝牙绑定'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( //todo 颜色 color: themeController .currentColor.sc19, fontFamily: 'Inter', fontSize: AppConstants() .normal_text_fontSize, letterSpacing: 0.0, ), ), ].divide(SizedBox( width: 17.rpx, )), ), ), ) ].divide(SizedBox( height: 60.rpx, )), ), ), Padding( //未绑定标语 padding: EdgeInsetsDirectional.fromSTEB(0, 26.rpx, 0, 0), child: Container( width: MediaQuery.sizeOf(context).width, decoration: BoxDecoration( color: themeController.currentColor.sc6, borderRadius: BorderRadius.circular(AppConstants() .normal_container_radius), // 圆角半径 ), child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 25.rpx, 25.rpx, 25.rpx, 25.rpx), child: Row( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 5.rpx, 0.rpx, 0.rpx), child: SvgPicture.asset( 'assets/img/icon/sound.svg', width: 30.rpx, height: 30.rpx, // 如果 SVG 中没有固定颜色,可以这样设置 //todo 颜色 color: stringToColor("#FF9F66"), ), ), Expanded( child: Column( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '首页.提示标题'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', fontSize: AppConstants() .normal_text_fontSize, letterSpacing: 0.0, fontWeight: FontWeight.w900, //todo 配置颜色 color: stringToColor("#916D46")), ), Text( '首页.提示内容1'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', fontSize: AppConstants() .normal_text_fontSize, letterSpacing: 0.0, //todo 配置颜色 color: stringToColor("#916D46")), ), Text( '首页.提示内容2'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', fontSize: AppConstants() .normal_text_fontSize, letterSpacing: 0.0, //todo 配置颜色 color: stringToColor("#916D46")), ), Text( '首页.提示内容3'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', fontSize: AppConstants() .normal_text_fontSize, letterSpacing: 0.0, //todo 配置颜色 color: stringToColor("#916D46")), ), ].divide(SizedBox( height: AppConstants() .text_padding_up_dowm_p)), ), ) ].divide(SizedBox(width: 20.rpx)), ), ), ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0, 26.rpx, 0, 0), child: Container( // color: Colors.red, width: bodySize.maxWidth, height: bodySize.maxHeight * 0.107, constraints: BoxConstraints( minHeight: 240.rpx, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ ClickableContainer( backgroundColor: themeController.currentColor.sc5, highlightColor: themeController.currentColor.sc3, borderRadius: AppConstants().normal_container_radius, padding: EdgeInsets.zero, // 原始Container没有padding onTap: () { // 点击逻辑放这里 }, child: Container( width: bodySize.maxWidth * 0.445, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox(height: 32.rpx), Container( width: 120.rpx, height: 120.rpx, child: Image.asset( "assets/img/netlove.png", fit: BoxFit.cover, ), ), Text( "首页.我的e护".tr, style: TextStyle( color: themeController .currentColor.sc3, ), ), SizedBox(height: 32.rpx), ], ), ), ), ClickableContainer( backgroundColor: themeController.currentColor.sc5, highlightColor: themeController.currentColor.sc3, borderRadius: AppConstants().normal_container_radius, padding: EdgeInsets .zero, // 原本的Container没有 padding,这里设置为 zero onTap: () { // TODO: 替换为你需要的点击事件逻辑 print("云关爱 被点击"); }, child: SizedBox( width: bodySize.maxWidth * 0.445, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( width: 120.rpx, height: 120.rpx, child: Image.asset( "assets/img/mye.png", fit: BoxFit.cover, ), ), Text( "首页.云关爱".tr, style: TextStyle( color: themeController .currentColor.sc3, ), ), ] .addToStart(SizedBox(height: 32.rpx)) .addToEnd(SizedBox(height: 32.rpx)), ), ), ), ], ), ), ), // Generated code for this Container Widget... Padding( padding: EdgeInsetsDirectional.fromSTEB( 0, 25.rpx, 0, 25.rpx), child: Container( width: double.infinity, decoration: BoxDecoration( color: themeController.currentColor.sc5, borderRadius: BorderRadius.circular( AppConstants().normal_container_radius), ), child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 30.rpx, 30.rpx, 30.rpx, 30.rpx), child: Column( mainAxisSize: MainAxisSize.max, children: [ Container( width: double.infinity, child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '次卧/1201/李小北', style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', fontSize: 30.rpx, letterSpacing: 0.0, color: themeController .currentColor.sc3, ), ), Row( mainAxisSize: MainAxisSize.max, children: [ Text( '首页.报告详情'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController .currentColor.sc3, ), ), 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: Colors.white, ), ), ].divide(SizedBox(width: 22.rpx)), ), ], ), ), Container( width: double.infinity, decoration: BoxDecoration(), child: SingleChildScrollView( scrollDirection: Axis.horizontal, child: Row( mainAxisSize: MainAxisSize.max, children: [ SleepDateWidget(), SleepDateWidget(), SleepDateWidget(), SleepDateWidget(), SleepDateWidget(), SleepDateWidget(), ].divide(SizedBox( width: 20.rpx, )), ), ), ), Container( width: double.infinity, decoration: BoxDecoration(), child: SingleChildScrollView( scrollDirection: Axis.horizontal, child: Row( mainAxisSize: MainAxisSize.max, children: [ SleepDataModuleWidget(), SleepDataModuleWidget(), SleepDataModuleWidget(), SleepDataModuleWidget(), SleepDataModuleWidget(), ].divide(SizedBox( width: 14.rpx)), // ✅ 这里加了 .rpx ), ), ), ], ), ), ), ) ], ), ), ), ), ), ), ), ), ); } }