diff --git a/lib/modules/meeting/views/bottomSheet/navigation_bar_bottom_sheet.dart b/lib/modules/meeting/views/bottomSheet/navigation_bar_bottom_sheet.dart index d4db457b4..020c1da6b 100644 --- a/lib/modules/meeting/views/bottomSheet/navigation_bar_bottom_sheet.dart +++ b/lib/modules/meeting/views/bottomSheet/navigation_bar_bottom_sheet.dart @@ -4,7 +4,6 @@ import 'package:get/get_navigation/src/extension_navigation.dart'; import 'package:get/state_manager.dart'; import '../../controllers/meeting_home_controller.dart'; -import '../../utils/meeting_ui_utils.dart'; class NavigationBarBottomSheet extends GetView { const NavigationBarBottomSheet({super.key}); diff --git a/lib/modules/meeting/views/meeting_mine_view.dart b/lib/modules/meeting/views/meeting_mine_view.dart index 93a36c2b9..e300a3b31 100644 --- a/lib/modules/meeting/views/meeting_mine_view.dart +++ b/lib/modules/meeting/views/meeting_mine_view.dart @@ -7,6 +7,8 @@ import '../../profile/views/unified_avatar.dart'; import '../controllers/meeting_mine_controller.dart'; import '../utils/meeting_ui_utils.dart'; import 'bottomSheet/statistics_bottom_sheet.dart'; +import 'mine/meeting_cloud_view.dart'; +import 'mine/meeting_transcription_view.dart'; class MeetingMineView extends StatefulWidget { const MeetingMineView({super.key}); @@ -49,23 +51,22 @@ class _MeetingMineViewState extends State _item( Icons.article_outlined, '转写记录', - onTap: () {}, + onTap: () { + Get.to(() => const MeetingTranscriptionView()); + }, ), ]), _box([ - _item( - Icons.settings_outlined, - '设置', - onTap: () {}, - ), _item( Icons.layers_outlined, '模版社区', + description: '尽请期待', onTap: () {}, ), _item( Icons.sync_alt_outlined, '集成', + description: '尽请期待', onTap: () {}, ), ]), @@ -74,7 +75,9 @@ class _MeetingMineViewState extends State Icons.cloud_upload_outlined, 'DEAPSOUND PRIVATE CLOUD', description: '开启', - onTap: () {}, + onTap: () { + Get.to(() => const MeetingCloudView()); + }, ), ]), _box([ @@ -94,7 +97,9 @@ class _MeetingMineViewState extends State _item( Icons.help_outline_rounded, '帮助与反馈', - onTap: () {}, + onTap: () { + Get.toNamed(Routes.feedback); + }, ), _item( Icons.info_outline_rounded, @@ -396,6 +401,7 @@ class _MeetingMineViewState extends State }) { return GestureDetector( onTap: onTap, + behavior: HitTestBehavior.translucent, child: Padding( padding: EdgeInsets.symmetric(horizontal: 8.w, vertical: 12.w), child: Row( diff --git a/lib/modules/meeting/views/meeting_view.dart b/lib/modules/meeting/views/meeting_view.dart index 045a92721..372cf8f24 100644 --- a/lib/modules/meeting/views/meeting_view.dart +++ b/lib/modules/meeting/views/meeting_view.dart @@ -15,7 +15,7 @@ class MeetingView extends GetView { @override Widget build(BuildContext context) { final isDarkMode = Theme.of(context).brightness == Brightness.dark; - + return Scaffold( key: controller.scaffoldKey, backgroundColor: MeetingUIUtils.getBackgroundColor(isDarkMode), @@ -52,7 +52,8 @@ class MeetingView extends GetView { label: '我的', ), ], - backgroundColor: isDarkMode ? const Color(0xFF1A1A1A) : Colors.white, + backgroundColor: + isDarkMode ? const Color(0xFF1A1A1A) : Colors.white, currentIndex: controller.pageIndex.value, unselectedItemColor: Colors.grey, selectedItemColor: isDarkMode ? Colors.white : Colors.blue, @@ -92,7 +93,8 @@ class MeetingView extends GetView { borderRadius: BorderRadius.circular(60.w), boxShadow: [ BoxShadow( - color: Colors.black.withValues(alpha: isDarkMode ? 0.3 : 0.1), + color: Colors.black + .withValues(alpha: isDarkMode ? 0.3 : 0.1), blurRadius: 8, offset: const Offset(0, 2), ), diff --git a/lib/modules/meeting/views/mine/meeting_cloud_view.dart b/lib/modules/meeting/views/mine/meeting_cloud_view.dart new file mode 100644 index 000000000..1e0892aba --- /dev/null +++ b/lib/modules/meeting/views/mine/meeting_cloud_view.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../../utils/meeting_ui_utils.dart'; + +class MeetingCloudView extends StatefulWidget { + const MeetingCloudView({super.key}); + + @override + State createState() => _MeetingCloudViewState(); +} + +class _MeetingCloudViewState extends State { + @override + Widget build(BuildContext context) { + final isDarkMode = Theme.of(context).brightness == Brightness.dark; + + return Scaffold( + backgroundColor: MeetingUIUtils.getBackgroundColor(isDarkMode), + appBar: _buildAppBar(isDarkMode), + body: _buildBody(isDarkMode), + ); + } + + // 构建应用栏 + PreferredSizeWidget _buildAppBar(bool isDarkMode) { + return AppBar( + backgroundColor: isDarkMode ? Colors.black : Colors.white, + surfaceTintColor: Colors.transparent, + elevation: 0.5, + leading: IconButton( + icon: Icon( + Icons.arrow_back_ios, + color: isDarkMode ? Colors.white : Colors.black, + size: 20.sp, + ), + onPressed: () => Get.back(), + ), + title: Text( + '同步到云端', + style: TextStyle( + fontSize: 17.sp, + fontWeight: FontWeight.w600, + color: isDarkMode ? Colors.white : Colors.black, + ), + ), + centerTitle: true, + ); + } + + Widget _buildBody(bool isDarkMode) { + return Container(); + } +} diff --git a/lib/modules/meeting/views/mine/meeting_transcription_view.dart b/lib/modules/meeting/views/mine/meeting_transcription_view.dart new file mode 100644 index 000000000..3a4653f62 --- /dev/null +++ b/lib/modules/meeting/views/mine/meeting_transcription_view.dart @@ -0,0 +1,167 @@ +import 'package:common_utils/common_utils.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../../../../routes/app_routes.dart'; +import '../../controllers/meeting_home_controller.dart'; +import '../../model/meeting_model.dart'; +import '../../utils/meeting_ui_utils.dart'; + +class MeetingTranscriptionView extends GetView { + const MeetingTranscriptionView({super.key}); + + @override + Widget build(BuildContext context) { + final isDarkMode = Theme.of(context).brightness == Brightness.dark; + + return Scaffold( + backgroundColor: MeetingUIUtils.getBackgroundColor(isDarkMode), + appBar: _buildAppBar(isDarkMode), + body: _buildBody(isDarkMode), + ); + } + + // 构建应用栏 + PreferredSizeWidget _buildAppBar(bool isDarkMode) { + return AppBar( + backgroundColor: isDarkMode ? Colors.black : Colors.white, + surfaceTintColor: Colors.transparent, + elevation: 0.5, + leading: IconButton( + icon: Icon( + Icons.arrow_back_ios, + color: isDarkMode ? Colors.white : Colors.black, + size: 20.sp, + ), + onPressed: () => Get.back(), + ), + title: Text( + '转写记录', + style: TextStyle( + fontSize: 17.sp, + fontWeight: FontWeight.w600, + color: isDarkMode ? Colors.white : Colors.black, + ), + ), + centerTitle: true, + ); + } + + Widget _buildBody(bool isDarkMode) { + return Obx( + () => ListView.builder( + itemCount: controller.originalDataList.length, + padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 5.w), + itemBuilder: (BuildContext context, int index) { + MeetingModel data = + MeetingModel.fromJson(controller.originalDataList[index]); + return data.tasktype >= 2 + ? _item(context, isDarkMode, data) + : const SizedBox.shrink(); + }, + ), + ); + } + + Widget _item(BuildContext context, bool isDarkMode, MeetingModel data) { + return GestureDetector( + onTap: () { + Get.toNamed(Routes.meetingDetails, arguments: { + 'id': data.id, + }); + }, + child: Container( + padding: EdgeInsets.symmetric(horizontal: 15.w, vertical: 10.w), + margin: EdgeInsets.symmetric(vertical: 5.w), + decoration: BoxDecoration( + color: isDarkMode + ? MeetingUIUtils.getTranslucentWhite(0.05) + : MeetingUIUtils.getCardColor(isDarkMode), + borderRadius: BorderRadius.circular(12.w), + boxShadow: MeetingUIUtils.getCardShadow(isDarkMode), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + data.title, + style: TextStyle( + color: MeetingUIUtils.getTextColor(isDarkMode), + fontSize: 18.sp, + ), + overflow: TextOverflow.ellipsis, + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 5.w), + child: Row( + children: [ + Icon( + Icons.calendar_month, + size: 14.w, + color: isDarkMode ? Colors.grey[400] : Colors.grey[500], + ), + 2.horizontalSpace, + Text( + DateUtil.formatDateMs( + data.creationtime, + format: DateFormats.y_mo_d_h_m, + ), + style: TextStyle( + color: isDarkMode ? Colors.grey[400] : Colors.grey[500], + fontSize: 12.sp, + ), + ), + 20.horizontalSpace, + Icon( + Icons.access_time, + size: 14.w, + color: isDarkMode ? Colors.grey[400] : Colors.grey[500], + ), + 2.horizontalSpace, + Text( + _formatDateSeconds(data.seconds), + style: TextStyle( + color: isDarkMode ? Colors.grey[400] : Colors.grey[500], + fontSize: 12.sp, + ), + ), + ], + ), + ), + Container( + padding: EdgeInsets.symmetric(horizontal: 5.w, vertical: 2.w), + margin: EdgeInsets.only(top: 5.w), + decoration: BoxDecoration( + color: isDarkMode ? Colors.grey[900] : Colors.grey[100], + borderRadius: BorderRadius.circular(4.w), + ), + child: Text( + data.type, + style: TextStyle( + color: isDarkMode ? Colors.grey[400] : Colors.grey[600], + fontSize: 10.sp, + ), + ), + ), + ], + ), + ), + ); + } + + String _formatDateSeconds(int seconds) { + if (seconds < 60) { + return '${seconds}s'; + } else if (seconds < 3600) { + int minutes = seconds ~/ 60; + int remainingSeconds = seconds % 60; + return '${minutes}m ${remainingSeconds}s'; + } else { + int hours = seconds ~/ 3600; + int remainingMinutes = (seconds % 3600) ~/ 60; + int remainingSeconds = seconds % 60; + return '${hours}h ${remainingMinutes}m ${remainingSeconds}s'; + } + } +}