diff --git a/ui/flutter_v2/.vscode/settings.json b/ui/flutter_v2/.vscode/settings.json new file mode 100644 index 00000000..9598eedb --- /dev/null +++ b/ui/flutter_v2/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "dart.mcpServer": true +} \ No newline at end of file diff --git a/ui/flutter_v2/assets/icons/pause.png b/ui/flutter_v2/assets/icons/pause.png new file mode 100644 index 00000000..caaa71b4 Binary files /dev/null and b/ui/flutter_v2/assets/icons/pause.png differ diff --git a/ui/flutter_v2/lib/modules/task/screens/gradient_button.dart b/ui/flutter_v2/lib/components/gp_gradient_button.dart similarity index 95% rename from ui/flutter_v2/lib/modules/task/screens/gradient_button.dart rename to ui/flutter_v2/lib/components/gp_gradient_button.dart index 9124b733..3bea8df8 100644 --- a/ui/flutter_v2/lib/modules/task/screens/gradient_button.dart +++ b/ui/flutter_v2/lib/components/gp_gradient_button.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; -class GradientButton extends StatelessWidget { +class GpGradientButton extends StatelessWidget { final String text; final VoidCallback onPressed; final IconData? icon; // 添加可选图标参数 - const GradientButton({ + const GpGradientButton({ super.key, required this.text, required this.onPressed, diff --git a/ui/flutter_v2/lib/components/gp_icon_button.dart b/ui/flutter_v2/lib/components/gp_icon_button.dart new file mode 100644 index 00000000..8dd46bf3 --- /dev/null +++ b/ui/flutter_v2/lib/components/gp_icon_button.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; + +/// GpIconButton - 简单的图标按钮组件 +/// +/// 用于TaskItem的操作按钮,支持鼠标悬浮效果 +class GpIconButton extends StatefulWidget { + /// 图标 + final IconData icon; + + /// 点击回调 + final VoidCallback? onTap; + + /// 图标颜色 + final Color? color; + + /// 图标大小 + final double? size; + + const GpIconButton({ + super.key, + required this.icon, + this.onTap, + this.color, + this.size, + }); + + @override + State createState() => _GpIconButtonState(); +} + +class _GpIconButtonState extends State { + bool _isHovered = false; + + @override + Widget build(BuildContext context) { + return MouseRegion( + cursor: + widget.onTap != null + ? SystemMouseCursors.click + : SystemMouseCursors.basic, + onEnter: (_) => setState(() => _isHovered = true), + onExit: (_) => setState(() => _isHovered = false), + child: GestureDetector( + onTap: widget.onTap, + child: AnimatedContainer( + duration: const Duration(milliseconds: 200), + width: widget.size ?? 20.0, + height: widget.size ?? 20.0, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(4.0), // 8px圆角 + color: + _isHovered + ? const Color(0xFF4883A2) + : Colors.transparent, // 悬浮背景色 + ), + child: Icon( + widget.icon, + color: widget.color ?? Colors.white, + size: widget.size ?? 20.0, + ), + ), + ), + ); + } +} diff --git a/ui/flutter_v2/lib/components/gp_outline_button.dart b/ui/flutter_v2/lib/components/gp_outline_button.dart new file mode 100644 index 00000000..ae294ea6 --- /dev/null +++ b/ui/flutter_v2/lib/components/gp_outline_button.dart @@ -0,0 +1,102 @@ +import 'package:flutter/material.dart'; + +/// GpOutlineButton - 线框按钮组件 +/// +/// 一个带有线框边框的小型按钮组件,支持自定义图标 +class GpOutlineButton extends StatelessWidget { + /// 按钮内的图标路径或图标数据 + final dynamic icon; + + /// 点击回调 + final VoidCallback? onTap; + + /// 按钮宽度,默认42px + final double width; + + /// 按钮高度,默认22px + final double height; + + /// 边框颜色,默认#39CDB9 + final Color borderColor; + + /// 边框圆角,默认4px + final double borderRadius; + + /// 边框宽度,默认1px + final double borderWidth; + + /// 图标颜色 + final Color? iconColor; + + /// 图标大小 + final double? iconSize; + + /// 背景颜色 + final Color? backgroundColor; + + const GpOutlineButton({ + super.key, + required this.icon, + this.onTap, + this.width = 42.0, + this.height = 22.0, + this.borderColor = const Color(0xFF39CDB9), + this.borderRadius = 4.0, + this.borderWidth = 1.0, + this.iconColor, + this.iconSize, + this.backgroundColor, + }); + + @override + Widget build(BuildContext context) { + return MouseRegion( + cursor: + onTap != null ? SystemMouseCursors.click : SystemMouseCursors.basic, + child: GestureDetector( + onTap: onTap, + child: Container( + width: width, + height: height, + decoration: BoxDecoration( + color: backgroundColor, + border: Border.all(color: borderColor, width: borderWidth), + borderRadius: BorderRadius.circular(borderRadius), + ), + child: _buildIcon(), + ), + ), + ); + } + + Widget _buildIcon() { + if (icon == null) return const SizedBox.shrink(); + + // 如果是字符串,认为是资源路径 + if (icon is String) { + return Center( + child: Image.asset( + icon as String, + width: iconSize, + height: iconSize, + color: iconColor, + fit: BoxFit.contain, + ), + ); + } + + // 如果是IconData,使用Icon组件 + if (icon is IconData) { + return Center( + child: Icon(icon as IconData, color: iconColor, size: iconSize ?? 16.0), + ); + } + + // 如果是Widget,直接使用 + if (icon is Widget) { + return Center(child: icon as Widget); + } + + return const SizedBox.shrink(); + } +} diff --git a/ui/flutter_v2/lib/modules/task/screens/task.dart b/ui/flutter_v2/lib/modules/task/screens/task.dart index 1728f404..0af5c871 100644 --- a/ui/flutter_v2/lib/modules/task/screens/task.dart +++ b/ui/flutter_v2/lib/modules/task/screens/task.dart @@ -1,5 +1,8 @@ import 'package:flutter/material.dart'; -import 'gradient_button.dart'; +import '../../../components/gp_gradient_button.dart'; +import '../../../components/gp_outline_button.dart'; +import '../../../components/gp_icon_button.dart'; +import '../widgets/task_item.dart'; import 'task_tabs.dart'; class TaskScreen extends StatefulWidget { @@ -32,7 +35,7 @@ class _TaskScreenState extends State { padding: const EdgeInsets.only(left: 16.0, top: 16.0), child: Row( children: [ - GradientButton( + GpGradientButton( text: '创建任务', icon: Icons.add, // 添加加号图标 onPressed: () { @@ -49,7 +52,37 @@ class _TaskScreenState extends State { ], ), ), - const SizedBox(height: 20), + const SizedBox(height: 16), + // 操作按钮列表 + Padding( + padding: const EdgeInsets.only(right: 24.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + GpOutlineButton( + icon: 'assets/icons/pause.png', + onTap: () { + // 处理开始按钮点击事件 + }, + ), + const SizedBox(width: 12), + GpOutlineButton( + icon: 'assets/icons/pause.png', + onTap: () { + // 处理暂停按钮点击事件 + }, + ), + const SizedBox(width: 12), + GpOutlineButton( + icon: 'assets/icons/pause.png', + onTap: () { + // 处理删除按钮点击事件 + }, + ), + ], + ), + ), + const SizedBox(height: 16), Expanded(child: _buildTaskList(_selectedTabIndex)), ], ), @@ -60,16 +93,126 @@ class _TaskScreenState extends State { // 根据选中的标签页显示不同的任务列表 switch (tabIndex) { case 0: - return const Center( - child: Text('下载中的任务列表', style: TextStyle(color: Colors.white)), + return ListView.separated( + itemCount: 3, // 示例显示3个任务项 + separatorBuilder: (context, index) => const SizedBox(height: 12), + itemBuilder: + (context, index) => TaskItem( + icon: Icons.download, // 添加下载图标 + taskName: '下载任务 ${index + 1}', // 添加任务名称 + progress: (index + 1) * 0.25, // 添加进度值 (0.25, 0.5, 0.75) + fileSizeText: + '${(2.1 + index * 0.1).toStringAsFixed(1)}MB/2.4MB', // 示例文件大小 + bottomRightIcon: Icons.speed, // 添加速度图标 + bottomRightGradientText: + '${(1.5 + index * 0.3).toStringAsFixed(1)}MB/s', // 下载速度 + bottomRightStatusText: '下载中', // 状态文本 + actionButtons: [ + GpIconButton( + icon: Icons.pause, + onTap: () => print('暂停任务 $index'), + ), + GpIconButton( + icon: Icons.delete, + onTap: () => print('删除任务 $index'), + ), + GpIconButton( + icon: Icons.folder_open, + onTap: () => print('打开所在位置 $index'), + ), + GpIconButton( + icon: Icons.info, + onTap: () => print('查看信息 $index'), + ), + GpIconButton( + icon: Icons.more_vert, + onTap: () => print('更多操作 $index'), + ), + ], + onTap: () { + print('任务项 $index 被点击'); + }, + ), ); case 1: - return const Center( - child: Text('已完成的任务列表', style: TextStyle(color: Colors.white)), + return ListView.separated( + itemCount: 2, // 示例显示2个任务项 + separatorBuilder: (context, index) => const SizedBox(height: 12), + itemBuilder: + (context, index) => TaskItem( + icon: Icons.check_circle, // 添加完成图标 + taskName: '已完成任务 ${index + 1}', // 添加任务名称 + progress: 1.0, // 已完成任务进度为100% + fileSizeText: '2.4MB/2.4MB - 已完成', // 添加完成信息 + bottomRightIcon: Icons.check, // 添加完成图标 + bottomRightGradientText: '完成时间', // 完成时间文本 + bottomRightStatusText: '已完成', // 状态文本 + actionButtons: [ + GpIconButton( + icon: Icons.pause, + onTap: () => print('暂停任务 $index'), + ), + GpIconButton( + icon: Icons.delete, + onTap: () => print('删除任务 $index'), + ), + GpIconButton( + icon: Icons.folder_open, + onTap: () => print('打开所在位置 $index'), + ), + GpIconButton( + icon: Icons.info, + onTap: () => print('查看信息 $index'), + ), + GpIconButton( + icon: Icons.more_vert, + onTap: () => print('更多操作 $index'), + ), + ], + onTap: () { + print('已完成任务项 $index 被点击'); + }, + ), ); case 2: - return const Center( - child: Text('失败的任务列表', style: TextStyle(color: Colors.white)), + return ListView.separated( + itemCount: 1, // 示例显示1个任务项 + separatorBuilder: (context, index) => const SizedBox(height: 12), + itemBuilder: + (context, index) => TaskItem( + icon: Icons.error, // 添加错误图标 + taskName: '失败任务 ${index + 1}', // 添加任务名称 + progress: 0.3, // 失败任务的部分进度 + fileSizeText: '1.2MB/4.0MB - 任务失败', // 添加失败信息 + bottomRightIcon: Icons.error_outline, // 添加错误图标 + bottomRightGradientText: '重试', // 重试文本 + bottomRightStatusText: '失败', // 状态文本 + actionButtons: [ + GpIconButton( + icon: Icons.pause, + onTap: () => print('暂停任务 $index'), + ), + GpIconButton( + icon: Icons.delete, + onTap: () => print('删除任务 $index'), + ), + GpIconButton( + icon: Icons.folder_open, + onTap: () => print('打开所在位置 $index'), + ), + GpIconButton( + icon: Icons.info, + onTap: () => print('查看信息 $index'), + ), + GpIconButton( + icon: Icons.more_vert, + onTap: () => print('更多操作 $index'), + ), + ], + onTap: () { + print('失败任务项 $index 被点击'); + }, + ), ); default: return Container(); diff --git a/ui/flutter_v2/lib/modules/task/widgets/task_item.dart b/ui/flutter_v2/lib/modules/task/widgets/task_item.dart new file mode 100644 index 00000000..2eea5932 --- /dev/null +++ b/ui/flutter_v2/lib/modules/task/widgets/task_item.dart @@ -0,0 +1,491 @@ +import 'dart:ui'; +import 'package:flutter/material.dart'; + +/// TaskItem - 任务项组件 +/// +/// 一个带有毛玻璃效果和渐变边框的任务项容器,宽度自适应父组件 +class TaskItem extends StatelessWidget { + /// 左侧图标 + final dynamic icon; + + /// 任务名称 + final String? taskName; + + /// 进度值 (0.0 - 1.0) + final double? progress; + + /// 右上角操作按钮列表 + final List? actionButtons; + + /// 容器高度,默认106px + final double height; + + /// 圆角大小,默认8px + final double borderRadius; + + /// 点击回调 + final VoidCallback? onTap; + + /// 文件大小文本(如2.1MB/2.4MB) + final String? fileSizeText; + + /// 右下角图标 + final IconData? bottomRightIcon; + + /// 右下角渐变文本 + final String? bottomRightGradientText; + + /// 右下角状态文本 + final String? bottomRightStatusText; + + const TaskItem({ + super.key, + this.icon, + this.taskName, + this.progress, + this.actionButtons, + this.height = 106.0, + this.borderRadius = 8.0, + this.onTap, + this.fileSizeText, + this.bottomRightIcon, + this.bottomRightGradientText, + this.bottomRightStatusText, + }); + + @override + Widget build(BuildContext context) { + return MouseRegion( + cursor: + onTap != null ? SystemMouseCursors.click : SystemMouseCursors.basic, + child: GestureDetector( + onTap: onTap, + child: Container( + height: height, + child: Stack( + children: [ + // Rectangle 82: 主容器 (最底层) + Positioned.fill( + child: ClipRRect( + borderRadius: BorderRadius.circular(borderRadius), + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 24.0, sigmaY: 24.0), + child: Container( + decoration: BoxDecoration( + // 背景色:rgba(178, 231, 254, 0.08) + color: const Color(0xFFB2E7FE).withOpacity(0.08), + borderRadius: BorderRadius.circular(borderRadius), + border: Border.all( + width: 0.5, + color: Colors.transparent, + ), + ), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(borderRadius), + // 渐变边框效果 + gradient: const LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + stops: [0.17, 0.92], + colors: [ + Colors.transparent, + Color(0x29FFFFFF), // rgba(255, 255, 255, 0.16) + ], + ), + ), + ), + ), + ), + ), + ), + + // 蒙版组 (中间层) - 简化测试 + Positioned.fill( + child: ClipRRect( + borderRadius: BorderRadius.circular(borderRadius), + child: Stack( + children: [ + // Rectangle 80: 渐变模糊背景 - 只保留这个 + Positioned( + left: 0, + right: 0, + top: 7.23, + child: ImageFiltered( + imageFilter: ImageFilter.blur( + sigmaX: 40.0, + sigmaY: 40.0, + ), + child: Container( + height: 90.34, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(borderRadius), + gradient: const LinearGradient( + begin: Alignment.centerLeft, // 90deg = 从左到右 + end: Alignment.centerRight, + stops: [0.0, 1.0], + colors: [ + Color(0xFF2D3975), // #2D3975 at 0% + Color(0xFF266682), // #266682 at 100% + ], + ), + ), + ), + ), + ), + + // Rectangle 81: 纯色背景蒙版 - 图层样式穿透,所以注释掉 + // 设计稿中标明"图层样式穿透",意味着这层不影响最终视觉效果 + // Positioned( + // left: 0, + // right: 0, + // top: 0, + // child: Container( + // height: height, + // decoration: BoxDecoration( + // color: const Color(0xFFB2E7FE), + // borderRadius: BorderRadius.circular(borderRadius), + // ), + // ), + // ), + ], + ), + ), + ), + + // 内容层 (最上层) + Positioned.fill( + child: Container( + padding: const EdgeInsets.all(16.0), // 统一的16px内边距 + child: Row( + children: [ + // 左侧图标区域 + if (icon != null) + Container( + margin: const EdgeInsets.only( + right: 2.0, + ), // 图标右边间隔2px + child: _buildIcon(), + ), + + // 右侧内容容器 + Expanded( + child: Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // 任务名称区域 (与操作按钮在同一行) + Row( + children: [ + // 任务名称 + if (taskName != null) + Expanded( + child: Container( + height: 22.0, // 设计稿高度22px + child: Align( + alignment: + Alignment + .bottomLeft, // align-items: flex-end + child: Text( + taskName!, + style: const TextStyle( + fontSize: 16.0, // 16px + fontWeight: + FontWeight.bold, // bold + height: + 22.0 / + 16.0, // line-height: 22px + color: Color( + 0xFFFFFFFE, + ), // #FFFFFE + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + ), + ), + + // 右侧操作按钮列表 + if (actionButtons != null && + actionButtons!.isNotEmpty) + Row( + mainAxisSize: MainAxisSize.min, + children: _buildActionButtons(), + ), + ], + ), + + // 进度条 + if (progress != null) + Container( + margin: const EdgeInsets.only( + top: 20.0, + ), // 距离名称下面20px + child: _buildProgressBar(), + ), + + // 文件大小文本和右下角元素行 + Container( + margin: const EdgeInsets.only( + top: 8.0, + ), // 距离进度条下面8px + height: 16.0, // 直接指定高度为16px + child: Row( + crossAxisAlignment: + CrossAxisAlignment.center, // 垂直居中对齐 + children: [ + // 左侧文件大小文本 + if (fileSizeText != null && + fileSizeText!.isNotEmpty) + Expanded( + child: Align( + alignment: Alignment.centerLeft, + child: Text( + fileSizeText!, + style: const TextStyle( + fontSize: 14.0, + fontWeight: FontWeight.w500, + color: Color( + 0xFFCCCCCC, + ), // #CCCCCC + letterSpacing: 0.0, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + ), + + // 右下角元素组 + _buildBottomRightElements(), + ], + ), + ), + ], + ), + ), + ), + ], + ), + ), + ), + ], + ), + ), + ), + ); + } + + /// 构建图标组件 + Widget _buildIcon() { + if (icon == null) return const SizedBox.shrink(); + + // 如果是字符串,认为是资源路径 + if (icon is String) { + return Image.asset( + icon as String, + width: 32.0, + height: 32.0, + fit: BoxFit.contain, + ); + } + + // 如果是IconData,使用Icon组件 + if (icon is IconData) { + return Icon(icon as IconData, size: 32.0, color: Colors.white); + } + + // 如果是Widget,直接使用 + if (icon is Widget) { + return SizedBox(width: 32.0, height: 32.0, child: icon as Widget); + } + + return const SizedBox.shrink(); + } + + /// 构建操作按钮列表 + List _buildActionButtons() { + if (actionButtons == null || actionButtons!.isEmpty) { + return []; + } + + List buttons = []; + for (int i = 0; i < actionButtons!.length; i++) { + // 添加按钮 + buttons.add( + SizedBox(width: 20.0, height: 20.0, child: actionButtons![i]), + ); + + // 添加间隔 (除了最后一个按钮) + if (i < actionButtons!.length - 1) { + buttons.add(const SizedBox(width: 16.0)); + } + } + + return buttons; + } + + /// 构建进度条 + Widget _buildProgressBar() { + if (progress == null) return const SizedBox.shrink(); + + return LayoutBuilder( + builder: (context, constraints) { + // 使用所有可用宽度,因为已经有统一的16px内边距 + final availableWidth = constraints.maxWidth; + final progressWidth = availableWidth * progress!; + + return SizedBox( + height: 8.0, + child: Stack( + children: [ + // 底部背景条 + Container( + width: availableWidth, + height: 8.0, + decoration: BoxDecoration( + color: const Color(0xFFEBEDF3), // #EBEDF3 + borderRadius: BorderRadius.circular(548.0), // 548px圆角 + ), + ), + + // 进度条 + Container( + width: progressWidth, + height: 8.0, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(143.0), // 143px圆角 + gradient: const LinearGradient( + begin: Alignment.centerLeft, // 90deg + end: Alignment.centerRight, + stops: [0.0, 0.44, 0.99], + colors: [ + Color(0xC93ACBBE), // rgba(58, 203, 190, 0.79) + Color(0xFF3ACBBE), // #3ACBBE at 44% + Color(0xFF2CDB90), // #2CDB90 at 99% + ], + ), + border: Border.all(width: 1.0, color: Colors.transparent), + ), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(143.0), + // 渐变边框效果 + gradient: const LinearGradient( + begin: Alignment.topCenter, // 180deg + end: Alignment.bottomCenter, + colors: [ + Color(0xFF39CBBC), // #39CBBC at 0% + Color(0xFF2CDA92), // #2CDA92 at 100% + ], + ), + ), + child: Container( + margin: const EdgeInsets.all(1.0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(142.0), + gradient: const LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + stops: [0.0, 0.44, 0.99], + colors: [ + Color(0xC93ACBBE), // rgba(58, 203, 190, 0.79) + Color(0xFF3ACBBE), // #3ACBBE at 44% + Color(0xFF2CDB90), // #2CDB90 at 99% + ], + ), + ), + ), + ), + ), + ], + ), + ); + }, + ); + } + + /// 构建右下角元素组 + Widget _buildBottomRightElements() { + // 如果没有任何右下角元素,返回空 + if (bottomRightIcon == null && + bottomRightGradientText == null && + bottomRightStatusText == null) { + return const SizedBox.shrink(); + } + + List children = []; + + // 添加图标 + if (bottomRightIcon != null) { + children.add(Icon(bottomRightIcon!, size: 16.0, color: Colors.white)); + } + + // 添加渐变文本 + if (bottomRightGradientText != null && + bottomRightGradientText!.isNotEmpty) { + if (children.isNotEmpty) { + children.add(const SizedBox(width: 4.0)); // 间隔4px + } + + children.add( + ShaderMask( + shaderCallback: + (bounds) => const LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + transform: GradientRotation(272 * 3.14159 / 180), // 272度转弧度 + stops: [0.73, 1.22], + colors: [ + Color(0xFF39CDB9), // #39CDB9 at 73% + Color(0xFF2EDA94), // #2EDA94 at 122% + ], + ).createShader(bounds), + child: Text( + bottomRightGradientText!, + style: const TextStyle( + fontSize: 14.0, + fontWeight: FontWeight.w500, + color: Colors.white, // 这个颜色会被shader覆盖 + letterSpacing: 0.0, + height: 1.0, // 设置行高为1,减少额外空间 + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + ); + } + + // 添加状态文本 + if (bottomRightStatusText != null && bottomRightStatusText!.isNotEmpty) { + if (children.isNotEmpty) { + children.add(const SizedBox(width: 12.0)); // 间隔12px + } + + children.add( + Text( + bottomRightStatusText!, + style: const TextStyle( + fontFamily: 'Source Han Sans', + fontSize: 14.0, + fontWeight: FontWeight.w500, + color: Color(0xFFCCCCCC), // #CCCCCC + letterSpacing: 0.0, + height: 1.0, // 设置行高为1,减少额外空间 + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ); + } + + return Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, // 垂直居中对齐 + textBaseline: TextBaseline.alphabetic, // 统一文本基线 + children: children, + ); + } +} diff --git a/ui/flutter_v2/macos/Podfile b/ui/flutter_v2/macos/Podfile index 29c8eb32..ff5ddb3b 100644 --- a/ui/flutter_v2/macos/Podfile +++ b/ui/flutter_v2/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.14' +platform :osx, '10.15' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/ui/flutter_v2/macos/Podfile.lock b/ui/flutter_v2/macos/Podfile.lock index 97125c03..f6f0ae1b 100644 --- a/ui/flutter_v2/macos/Podfile.lock +++ b/ui/flutter_v2/macos/Podfile.lock @@ -19,10 +19,10 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos SPEC CHECKSUMS: - FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 screen_retriever_macos: 776e0fa5d42c6163d2bf772d22478df4b302b161 window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8 -PODFILE CHECKSUM: 7eb978b976557c8c1cd717d8185ec483fd090a82 +PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 COCOAPODS: 1.15.2 diff --git a/ui/flutter_v2/macos/Runner.xcodeproj/project.pbxproj b/ui/flutter_v2/macos/Runner.xcodeproj/project.pbxproj index ddc1fc0f..3628d2fb 100644 --- a/ui/flutter_v2/macos/Runner.xcodeproj/project.pbxproj +++ b/ui/flutter_v2/macos/Runner.xcodeproj/project.pbxproj @@ -557,7 +557,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -639,7 +639,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -689,7 +689,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/ui/flutter_v2/pubspec.lock b/ui/flutter_v2/pubspec.lock index ff373dc9..a1e69f4b 100644 --- a/ui/flutter_v2/pubspec.lock +++ b/ui/flutter_v2/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: async - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.12.0" + version: "2.13.0" boolean_selector: dependency: transitive description: @@ -61,10 +61,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.3" flutter: dependency: "direct main" description: flutter @@ -82,10 +82,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: c200fd79c918a40c5cd50ea0877fa13f81bdaf6f0a5d3dbcc2a13e3285d6aa1b + sha256: b9c2ad5872518a27507ab432d1fb97e8813b05f0fc693f9d40fad06d073e0678 url: "https://pub.dev" source: hosted - version: "2.0.17" + version: "2.2.1" flutter_test: dependency: "direct dev" description: flutter @@ -108,10 +108,10 @@ packages: dependency: transitive description: name: http - sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f + sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.5.0" http_parser: dependency: transitive description: @@ -132,26 +132,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" url: "https://pub.dev" source: hosted - version: "10.0.8" + version: "11.0.2" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" url: "https://pub.dev" source: hosted - version: "3.0.9" + version: "3.0.10" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" lints: dependency: transitive description: @@ -212,10 +212,10 @@ packages: dependency: transitive description: name: petitparser - sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" + sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1" url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "7.0.1" plugin_platform_interface: dependency: transitive description: @@ -313,10 +313,10 @@ packages: dependency: transitive description: name: test_api - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" url: "https://pub.dev" source: hosted - version: "0.7.4" + version: "0.7.6" typed_data: dependency: transitive description: @@ -329,10 +329,10 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de" + sha256: a4f059dc26fc8295b5921376600a194c4ec7d55e72f2fe4c7d2831e103d461e6 url: "https://pub.dev" source: hosted - version: "1.1.18" + version: "1.1.19" vector_graphics_codec: dependency: transitive description: @@ -345,26 +345,26 @@ packages: dependency: transitive description: name: vector_graphics_compiler - sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" + sha256: d354a7ec6931e6047785f4db12a1f61ec3d43b207fc0790f863818543f8ff0dc url: "https://pub.dev" source: hosted - version: "1.1.16" + version: "1.1.19" vector_math: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" vm_service: dependency: transitive description: name: vm_service - sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" url: "https://pub.dev" source: hosted - version: "14.3.1" + version: "15.0.2" web: dependency: transitive description: @@ -385,10 +385,10 @@ packages: dependency: transitive description: name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" url: "https://pub.dev" source: hosted - version: "6.5.0" + version: "6.6.1" sdks: - dart: ">=3.7.2 <4.0.0" - flutter: ">=3.22.0" + dart: ">=3.8.0 <4.0.0" + flutter: ">=3.29.0"