Browse Source

添加会议转写记录和云端同步功能视图

newdev_shunjiawei
tanlongsheng 1 year ago
parent
commit
b22f624bb1
  1. 1
      lib/modules/meeting/views/bottomSheet/navigation_bar_bottom_sheet.dart
  2. 22
      lib/modules/meeting/views/meeting_mine_view.dart
  3. 8
      lib/modules/meeting/views/meeting_view.dart
  4. 55
      lib/modules/meeting/views/mine/meeting_cloud_view.dart
  5. 167
      lib/modules/meeting/views/mine/meeting_transcription_view.dart

1
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 'package:get/state_manager.dart';
import '../../controllers/meeting_home_controller.dart'; import '../../controllers/meeting_home_controller.dart';
import '../../utils/meeting_ui_utils.dart';
class NavigationBarBottomSheet extends GetView<MeetingHomeController> { class NavigationBarBottomSheet extends GetView<MeetingHomeController> {
const NavigationBarBottomSheet({super.key}); const NavigationBarBottomSheet({super.key});

22
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 '../controllers/meeting_mine_controller.dart';
import '../utils/meeting_ui_utils.dart'; import '../utils/meeting_ui_utils.dart';
import 'bottomSheet/statistics_bottom_sheet.dart'; import 'bottomSheet/statistics_bottom_sheet.dart';
import 'mine/meeting_cloud_view.dart';
import 'mine/meeting_transcription_view.dart';
class MeetingMineView extends StatefulWidget { class MeetingMineView extends StatefulWidget {
const MeetingMineView({super.key}); const MeetingMineView({super.key});
@ -49,23 +51,22 @@ class _MeetingMineViewState extends State<MeetingMineView>
_item( _item(
Icons.article_outlined, Icons.article_outlined,
'转写记录', '转写记录',
onTap: () {}, onTap: () {
Get.to(() => const MeetingTranscriptionView());
},
), ),
]), ]),
_box([ _box([
_item(
Icons.settings_outlined,
'设置',
onTap: () {},
),
_item( _item(
Icons.layers_outlined, Icons.layers_outlined,
'模版社区', '模版社区',
description: '尽请期待',
onTap: () {}, onTap: () {},
), ),
_item( _item(
Icons.sync_alt_outlined, Icons.sync_alt_outlined,
'集成', '集成',
description: '尽请期待',
onTap: () {}, onTap: () {},
), ),
]), ]),
@ -74,7 +75,9 @@ class _MeetingMineViewState extends State<MeetingMineView>
Icons.cloud_upload_outlined, Icons.cloud_upload_outlined,
'DEAPSOUND PRIVATE CLOUD', 'DEAPSOUND PRIVATE CLOUD',
description: '开启', description: '开启',
onTap: () {}, onTap: () {
Get.to(() => const MeetingCloudView());
},
), ),
]), ]),
_box([ _box([
@ -94,7 +97,9 @@ class _MeetingMineViewState extends State<MeetingMineView>
_item( _item(
Icons.help_outline_rounded, Icons.help_outline_rounded,
'帮助与反馈', '帮助与反馈',
onTap: () {}, onTap: () {
Get.toNamed(Routes.feedback);
},
), ),
_item( _item(
Icons.info_outline_rounded, Icons.info_outline_rounded,
@ -396,6 +401,7 @@ class _MeetingMineViewState extends State<MeetingMineView>
}) { }) {
return GestureDetector( return GestureDetector(
onTap: onTap, onTap: onTap,
behavior: HitTestBehavior.translucent,
child: Padding( child: Padding(
padding: EdgeInsets.symmetric(horizontal: 8.w, vertical: 12.w), padding: EdgeInsets.symmetric(horizontal: 8.w, vertical: 12.w),
child: Row( child: Row(

8
lib/modules/meeting/views/meeting_view.dart

@ -15,7 +15,7 @@ class MeetingView extends GetView<MeetingController> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark; final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return Scaffold( return Scaffold(
key: controller.scaffoldKey, key: controller.scaffoldKey,
backgroundColor: MeetingUIUtils.getBackgroundColor(isDarkMode), backgroundColor: MeetingUIUtils.getBackgroundColor(isDarkMode),
@ -52,7 +52,8 @@ class MeetingView extends GetView<MeetingController> {
label: '我的', label: '我的',
), ),
], ],
backgroundColor: isDarkMode ? const Color(0xFF1A1A1A) : Colors.white, backgroundColor:
isDarkMode ? const Color(0xFF1A1A1A) : Colors.white,
currentIndex: controller.pageIndex.value, currentIndex: controller.pageIndex.value,
unselectedItemColor: Colors.grey, unselectedItemColor: Colors.grey,
selectedItemColor: isDarkMode ? Colors.white : Colors.blue, selectedItemColor: isDarkMode ? Colors.white : Colors.blue,
@ -92,7 +93,8 @@ class MeetingView extends GetView<MeetingController> {
borderRadius: BorderRadius.circular(60.w), borderRadius: BorderRadius.circular(60.w),
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(
color: Colors.black.withValues(alpha: isDarkMode ? 0.3 : 0.1), color: Colors.black
.withValues(alpha: isDarkMode ? 0.3 : 0.1),
blurRadius: 8, blurRadius: 8,
offset: const Offset(0, 2), offset: const Offset(0, 2),
), ),

55
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<MeetingCloudView> createState() => _MeetingCloudViewState();
}
class _MeetingCloudViewState extends State<MeetingCloudView> {
@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();
}
}

167
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<MeetingHomeController> {
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';
}
}
}
Loading…
Cancel
Save