import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'dart:io'; import '../../../routes/app_routes.dart'; import '../controllers/meeting_mine_controller.dart'; import 'bottomSheet/statistics_bottom_sheet.dart'; class MeetingMineView extends GetView { const MeetingMineView({super.key}); @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.grey[100], body: Container( decoration: const BoxDecoration( image: DecorationImage( alignment: Alignment.topCenter, image: AssetImage('assets/images/mine-background.png'), fit: BoxFit.fitWidth, ), ), child: SafeArea( child: ListView( padding: EdgeInsets.symmetric(horizontal: 12.w), children: [ _head(), _statistics(), _member(), _box([ _item( Icons.article_outlined, '转写记录', onTap: () {}, ), ]), _box([ _item( Icons.settings_outlined, '设置', onTap: () {}, ), _item( Icons.layers_outlined, '模版社区', onTap: () {}, ), _item( Icons.sync_alt_outlined, '集成', onTap: () {}, ), ]), _box([ _item( Icons.cloud_upload_outlined, 'DEAPSOUND PRIVATE CLOUD', description: '开启', onTap: () {}, ), ]), _box([ _item( Icons.language_outlined, 'WEB', description: 'web.deapsound.com', onTap: () {}, ), _item( Icons.settings_remote_outlined, '我的DEAPSOUND设备', onTap: () {}, ), ]), _box([ _item( Icons.help_outline_rounded, '帮助与反馈', onTap: () {}, ), _item( Icons.info_outline_rounded, '关于DEAPSOUND', description: 'v1.0.0', onTap: () {}, ), ]), ], ), ), ), ); } Widget _head() { return Padding( padding: EdgeInsets.symmetric(vertical: 20.w), child: GestureDetector( onTap: () => Get.toNamed(Routes.profileMeeting), // 跳转到个人信息页面 child: Row( children: [ // 统一头像显示逻辑:本地头像 > 网络头像 > 默认图标 Obx(() => Container( width: 50.w, height: 50.w, margin: EdgeInsets.only(right: 10.w), decoration: BoxDecoration( borderRadius: BorderRadius.circular(50.w), ), child: CircleAvatar( radius: 25.w, backgroundImage: controller .profileCtrl.localAvatar.value.isNotEmpty ? FileImage( File(controller.profileCtrl.localAvatar.value)) : (controller .profileCtrl.userInfo.value.avatar.isNotEmpty ? NetworkImage( controller.profileCtrl.userInfo.value.avatar) : null) as ImageProvider?, backgroundColor: Colors.grey[200], child: (controller.profileCtrl.localAvatar.value.isEmpty && controller .profileCtrl.userInfo.value.avatar.isEmpty) ? Icon( Icons.person, size: 25.r, color: Colors.grey[600], ) : null, ), )), Expanded( child: Obx( () => Text( controller.profileCtrl.userInfo.value.name, style: TextStyle( color: Colors.black87, fontSize: 20.sp, fontWeight: FontWeight.bold, ), ), ), ), Icon( Icons.arrow_forward_ios, size: 16.w, color: Colors.grey[700], ), ], ), ), ); } Widget _statistics() { return GestureDetector( onTap: () { Get.bottomSheet( const StatisticsBottomSheet(), isScrollControlled: true, ); }, child: Container( padding: EdgeInsets.all(8.w), margin: EdgeInsets.only(bottom: 15.w), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16.w), ), child: Obx( () => Column( children: [ Row( children: [ _statisticsItem( '${controller.days.value}', '天', Colors.lime, ), _statisticsItem( '${controller.numberFiles.value}', '文件', Colors.lightGreen, ), _statisticsItem( '${controller.hourage.value}', '小时', Colors.blueGrey, ), ], ), Container( height: 80.w, padding: EdgeInsets.symmetric(horizontal: 2.w), margin: EdgeInsets.only(top: 8.w, bottom: 2.w), child: GridView.builder( scrollDirection: Axis.horizontal, gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 7, mainAxisSpacing: 2.w, crossAxisSpacing: 2.w, ), itemCount: 364, itemBuilder: (BuildContext context, int index) { int type = 0; if (controller.statistics.containsKey(index + 1)) { if (controller.statistics[index + 1]['count'] <= controller.averageNumberFiles) { type = 1; } else { type = 2; } } return Container( decoration: BoxDecoration( color: type == 0 ? Colors.grey[200] : type == 1 ? Colors.red[100] : Colors.red, borderRadius: BorderRadius.circular(2.w), ), ); }, ), ), ], ), ), ), ); } Widget _statisticsItem(String amount, String unit, Color color) { return Expanded( child: Container( height: 30.w, margin: EdgeInsets.symmetric(horizontal: 2.w), alignment: Alignment.center, decoration: BoxDecoration( color: color.withOpacity(0.2), borderRadius: BorderRadius.circular(8.w), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( amount, style: TextStyle( height: 0.1, color: Colors.black87, fontSize: 16.sp, fontWeight: FontWeight.bold, ), ), 2.horizontalSpace, Text( unit, style: TextStyle( height: 0.1, color: Colors.grey, fontSize: 10.sp, ), ), ], ), ), ); } Widget _member() { return Container( margin: EdgeInsets.only(bottom: 15.w), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16.w), ), child: Column( children: [ Padding( padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 10.w), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'DEAPSOUND AI会员', style: TextStyle( color: Colors.black87, fontSize: 16.sp, ), ), Icon( Icons.arrow_forward_ios, size: 16.w, color: Colors.grey, ), ], ), ), Container( padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 15.w), decoration: BoxDecoration( color: Colors.black87, borderRadius: BorderRadius.circular(16.w), ), child: Column( children: [ Row( children: [ Icon( Icons.auto_awesome, color: Colors.amberAccent, size: 25.sp, ), 5.horizontalSpace, Text( '解锁 Starter 会员', style: TextStyle( color: Colors.white, fontSize: 18.sp, fontWeight: FontWeight.bold, ), ), ], ), Padding( padding: EdgeInsets.only(top: 15.w), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '绑定 DEAPSOUND 设备可激活 Starter 会员', style: TextStyle( color: Colors.white, fontSize: 12.sp, ), ), GestureDetector( onTap: () {}, child: Container( padding: EdgeInsets.symmetric( horizontal: 10.w, vertical: 6.w, ), decoration: BoxDecoration( borderRadius: BorderRadius.circular(50.w), gradient: const LinearGradient( colors: [Colors.blue, Colors.pink], begin: Alignment.centerLeft, end: Alignment.centerRight, ), ), child: Text( '立即解锁', style: TextStyle( color: Colors.white, fontSize: 14.sp, fontWeight: FontWeight.bold, ), ), ), ), ], ), ), ], ), ), ], ), ); } Widget _box(List children) { return Container( padding: EdgeInsets.symmetric(vertical: 5.w), margin: EdgeInsets.only(bottom: 15.w), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16.w), ), child: Column( children: children, ), ); } Widget _item( IconData icon, String title, { String? description, Function()? onTap, }) { return GestureDetector( onTap: onTap, child: Padding( padding: EdgeInsets.symmetric(horizontal: 8.w, vertical: 12.w), child: Row( children: [ Icon( icon, size: 24.w, color: Colors.grey, ), 8.horizontalSpace, Expanded( child: Text( title, style: TextStyle( color: Colors.black87, fontSize: 16.sp, ), ), ), if (description != null) Padding( padding: EdgeInsets.only(right: 5.w), child: Text( description, style: TextStyle( color: Colors.grey, fontSize: 16.sp, ), ), ), Icon( Icons.arrow_forward_ios, size: 16.w, color: Colors.grey, ), ], ), ), ); } }