Browse Source

style(meeting): 统一暗黑模式适配及界面颜色优化

- 优化 MeetingUIUtils 组件中暗黑模式下背景色和卡片阴影颜色
- 在多处底部弹窗组件中添加暗黑模式判断,统一调整文字、背景、边框等颜色
- AI底部弹窗添加输入框内容监听,控制发送按钮颜色与可点击状态
- 编辑会议标题弹窗按钮色彩及边框根据暗黑模式进行切换
- 筛选抽屉组件使用 MeetingUIUtils 统一文本和背景颜色
- 生成会议弹窗内部多处颜色适配暗黑模式,按钮和选项视觉统一
- 成员底部弹窗界面调整为响应暗黑模式,文字和控件颜色分别适配
- 更多底部弹窗菜单项颜色随暗黑模式切换,禁用状态透明度保持一致
- 录音语言底部弹窗整体颜色调整,列表条目边界颜色支持暗黑模式
- 优化各类控件在暗黑/亮色模式下的切换逻辑,改善用户视觉体验
weicu
lxm 7 months ago
parent
commit
3df234d56e
  1. 22
      lib/modules/meeting/utils/meeting_ui_utils.dart
  2. 61
      lib/modules/meeting/views/bottomSheet/ai_bottom_sheet.dart
  3. 26
      lib/modules/meeting/views/bottomSheet/edit_title_bottom_sheet.dart
  4. 51
      lib/modules/meeting/views/bottomSheet/filtrate_drawer.dart
  5. 52
      lib/modules/meeting/views/bottomSheet/generate_bottom_sheet.dart
  6. 50
      lib/modules/meeting/views/bottomSheet/member_bottom_sheet.dart
  7. 19
      lib/modules/meeting/views/bottomSheet/more_bottom_sheet.dart
  8. 23
      lib/modules/meeting/views/bottomSheet/record_language_bottom_sheet.dart
  9. 32
      lib/modules/meeting/views/bottomSheet/second_level_bottom_sheet.dart
  10. 25
      lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart
  11. 67
      lib/modules/meeting/views/bottomSheet/speaker_all_bottom_sheet.dart
  12. 43
      lib/modules/meeting/views/bottomSheet/speaker_bottom_sheet.dart
  13. 50
      lib/modules/meeting/views/meeting_details_view.dart
  14. 11
      lib/modules/meeting/views/tabs/overview_tab.dart
  15. 21
      lib/modules/meeting/views/tabs/speech_tab.dart
  16. 11
      lib/modules/meeting/views/tabs/summary_tab.dart

22
lib/modules/meeting/utils/meeting_ui_utils.dart

@ -5,12 +5,12 @@ import 'package:flutter/material.dart';
class MeetingUIUtils { class MeetingUIUtils {
/// 获取背景颜色 /// 获取背景颜色
static Color getBackgroundColor(bool isDarkMode) { static Color getBackgroundColor(bool isDarkMode) {
return isDarkMode ? Colors.black : Colors.grey[50]!; return isDarkMode ? const Color(0xFF121212) : Colors.grey[50]!;
} }
/// 获取卡片背景颜色 /// 获取卡片背景颜色
static Color getCardColor(bool isDarkMode) { static Color getCardColor(bool isDarkMode) {
return isDarkMode ? const Color(0xFF1A1A1A) : Colors.white; return isDarkMode ? const Color(0xFF2D2D2D) : Colors.white;
} }
/// 获取半透明白色 /// 获取半透明白色
@ -35,11 +35,23 @@ class MeetingUIUtils {
/// 获取卡片阴影 /// 获取卡片阴影
static List<BoxShadow> getCardShadow(bool isDarkMode) { static List<BoxShadow> getCardShadow(bool isDarkMode) {
if (isDarkMode) {
return [ return [
BoxShadow( BoxShadow(
color: isDarkMode color: Colors.black.withValues(alpha: 0.5),
? Colors.black.withValues(alpha: 0.2) blurRadius: 6,
: Colors.black.withValues(alpha: 0.05), offset: const Offset(0, 2),
),
BoxShadow(
color: Colors.white.withValues(alpha: 0.05),
blurRadius: 0,
offset: const Offset(0, -0.5),
),
];
}
return [
BoxShadow(
color: Colors.black.withValues(alpha: 0.05),
blurRadius: 10, blurRadius: 10,
offset: const Offset(0, 4), offset: const Offset(0, 4),
), ),

61
lib/modules/meeting/views/bottomSheet/ai_bottom_sheet.dart

@ -39,11 +39,26 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
bool _isLoading = false; bool _isLoading = false;
// 输入框是否有内容
bool _hasText = false;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_getAllText(); _getAllText();
_getDataList(); _getDataList();
// 监听输入框内容变化
_textController.addListener(_onTextChanged);
}
// 输入框内容变化回调
void _onTextChanged() {
final hasText = _textController.text.isNotEmpty;
if (_hasText != hasText) {
setState(() {
_hasText = hasText;
});
}
} }
void _getAllText() { void _getAllText() {
@ -66,6 +81,7 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
@override @override
void dispose() { void dispose() {
_textController.removeListener(_onTextChanged);
_textController.dispose(); _textController.dispose();
_scrollController.dispose(); _scrollController.dispose();
_aiResponseSubscription?.cancel(); _aiResponseSubscription?.cancel();
@ -74,6 +90,7 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return SafeArea( return SafeArea(
top: false, top: false,
child: Container( child: Container(
@ -93,7 +110,7 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
'Ask AI', 'Ask AI',
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
@ -103,7 +120,7 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
width: 26.w, width: 26.w,
height: 26.w, height: 26.w,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey[100], color: isDarkMode ? Colors.grey[700] : Colors.grey[100],
borderRadius: BorderRadius.circular(26.r), borderRadius: BorderRadius.circular(26.r),
), ),
child: Icon( child: Icon(
@ -141,6 +158,7 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
} }
Widget _item(int index, Map data) { Widget _item(int index, Map data) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
List list = []; List list = [];
if (index == 0 && data['cruxtext'].isNotEmpty) { if (index == 0 && data['cruxtext'].isNotEmpty) {
list = data['cruxtext'].split(RegExp(r'[??]')); list = data['cruxtext'].split(RegExp(r'[??]'));
@ -154,13 +172,14 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
child: Container( child: Container(
padding: EdgeInsets.all(10.w), padding: EdgeInsets.all(10.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey[200], color: isDarkMode ? Colors.grey[800] : Colors.grey[200],
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: Text( child: Text(
data['user'], data['user'],
style: TextStyle( style: TextStyle(
fontSize: 14.sp, fontSize: 14.sp,
color: isDarkMode ? Colors.white : Colors.black87,
), ),
), ),
), ),
@ -202,15 +221,20 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
EdgeInsets.symmetric(horizontal: 15.w, vertical: 8.w), EdgeInsets.symmetric(horizontal: 15.w, vertical: 8.w),
margin: EdgeInsets.symmetric(vertical: 5.w), margin: EdgeInsets.symmetric(vertical: 5.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey[100], color: isDarkMode ? Colors.grey[800] : Colors.grey[100],
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
border: Border.all( border: Border.all(
color: Colors.grey[300]!, color: isDarkMode
? Colors.grey[700]!
: Colors.grey[300]!,
), ),
), ),
child: Text( child: Text(
'${list[idx]}?', '${list[idx]}?',
style: TextStyle(fontSize: 14.sp), style: TextStyle(
fontSize: 14.sp,
color: isDarkMode ? Colors.white : Colors.black87,
),
), ),
), ),
), ),
@ -223,6 +247,7 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
} }
Widget _empty() { Widget _empty() {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return Padding( return Padding(
padding: EdgeInsets.symmetric(vertical: 10.w), padding: EdgeInsets.symmetric(vertical: 10.w),
child: Column( child: Column(
@ -233,6 +258,7 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
style: TextStyle( style: TextStyle(
fontSize: 18.sp, fontSize: 18.sp,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: isDarkMode ? Colors.white : Colors.black87,
), ),
), ),
Padding( Padding(
@ -266,15 +292,18 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
padding: EdgeInsets.symmetric(horizontal: 15.w, vertical: 8.w), padding: EdgeInsets.symmetric(horizontal: 15.w, vertical: 8.w),
margin: EdgeInsets.symmetric(vertical: 5.w), margin: EdgeInsets.symmetric(vertical: 5.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey[100], color: isDarkMode ? Colors.grey[800] : Colors.grey[100],
borderRadius: BorderRadius.circular(20.r), borderRadius: BorderRadius.circular(20.r),
border: Border.all( border: Border.all(
color: Colors.grey[300]!, color: isDarkMode ? Colors.grey[700]! : Colors.grey[300]!,
), ),
), ),
child: Text( child: Text(
_cruxList[index], _cruxList[index],
style: TextStyle(fontSize: 12.sp), style: TextStyle(
fontSize: 12.sp,
color: isDarkMode ? Colors.white : Colors.black87,
),
), ),
), ),
), ),
@ -285,6 +314,7 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
} }
Widget _inputBox() { Widget _inputBox() {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return Container( return Container(
height: 42.w, height: 42.w,
padding: EdgeInsets.symmetric(horizontal: 10.w), padding: EdgeInsets.symmetric(horizontal: 10.w),
@ -295,8 +325,8 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
begin: Alignment.centerLeft, begin: Alignment.centerLeft,
end: Alignment.centerRight, end: Alignment.centerRight,
colors: [ colors: [
const Color(0xFFab47bc).withValues(alpha: 0.1), // 薰衣草紫 const Color(0xFFab47bc).withValues(alpha: isDarkMode ? 0.2 : 0.1),
const Color(0xFFec407a).withValues(alpha: 0.2), // 品红 const Color(0xFFec407a).withValues(alpha: isDarkMode ? 0.3 : 0.2),
], ],
), ),
), ),
@ -308,7 +338,7 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
controller: _textController, controller: _textController,
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
letterSpacing: 0, letterSpacing: 0,
height: 1.4, height: 1.4,
), ),
@ -322,6 +352,7 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
), ),
isDense: true, isDense: true,
fillColor: Colors.transparent, fillColor: Colors.transparent,
focusedBorder: InputBorder.none,
border: InputBorder.none, border: InputBorder.none,
), ),
onSubmitted: _sendMessage, onSubmitted: _sendMessage,
@ -330,13 +361,17 @@ class _AIBottomSheetState extends State<AIBottomSheet> {
10.horizontalSpace, 10.horizontalSpace,
GestureDetector( GestureDetector(
onTap: () { onTap: () {
if (_hasText || _isLoading) {
_sendMessage(_textController.text); _sendMessage(_textController.text);
}
}, },
child: Container( child: Container(
width: 26.w, width: 26.w,
height: 26.w, height: 26.w,
decoration: BoxDecoration( decoration: BoxDecoration(
color: _isLoading ? Colors.black87 : Colors.grey, color: _isLoading
? Colors.black87
: (_hasText ? const Color(0xFF2196F3) : Colors.grey),
borderRadius: BorderRadius.circular(26.r), borderRadius: BorderRadius.circular(26.r),
), ),
child: Icon( child: Icon(

26
lib/modules/meeting/views/bottomSheet/edit_title_bottom_sheet.dart

@ -11,6 +11,7 @@ class EditTitleBottomSheet extends GetView<MeetingHomeController> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return SafeArea( return SafeArea(
top: false, top: false,
child: Padding( child: Padding(
@ -27,7 +28,7 @@ class EditTitleBottomSheet extends GetView<MeetingHomeController> {
'editMeetingTitle'.tr, // 编辑会议标题 'editMeetingTitle'.tr, // 编辑会议标题
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
@ -37,7 +38,7 @@ class EditTitleBottomSheet extends GetView<MeetingHomeController> {
width: 26.w, width: 26.w,
height: 26.w, height: 26.w,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? Colors.grey[700] : Colors.white,
borderRadius: BorderRadius.circular(26.r), borderRadius: BorderRadius.circular(26.r),
), ),
child: Icon( child: Icon(
@ -52,15 +53,17 @@ class EditTitleBottomSheet extends GetView<MeetingHomeController> {
), ),
Divider( Divider(
height: 1, height: 1,
color: Colors.grey[300], color: isDarkMode ? Colors.grey[700] : Colors.grey[300],
), ),
Container( Container(
margin: EdgeInsets.symmetric(vertical: 20.w), margin: EdgeInsets.symmetric(vertical: 20.w),
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? const Color(0xFF2D2D2D) : Colors.white,
borderRadius: BorderRadius.circular(12.w), borderRadius: BorderRadius.circular(12.w),
boxShadow: [ boxShadow: isDarkMode
? null
: [
BoxShadow( BoxShadow(
color: Colors.black.withValues(alpha: 0.05), color: Colors.black.withValues(alpha: 0.05),
blurRadius: 10, blurRadius: 10,
@ -71,13 +74,13 @@ class EditTitleBottomSheet extends GetView<MeetingHomeController> {
child: TextField( child: TextField(
controller: controller.titleController, controller: controller.titleController,
style: TextStyle( style: TextStyle(
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
fontSize: 16.sp, fontSize: 16.sp,
), ),
decoration: InputDecoration( decoration: InputDecoration(
hintText: 'maxCharacters'.tr, hintText: 'maxCharacters'.tr,
hintStyle: TextStyle( hintStyle: TextStyle(
color: Colors.black54, color: isDarkMode ? Colors.grey[500] : Colors.black54,
fontSize: 16.sp, fontSize: 16.sp,
), ),
isDense: true, isDense: true,
@ -98,14 +101,15 @@ class EditTitleBottomSheet extends GetView<MeetingHomeController> {
height: 48.w, height: 48.w,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey[300], color:
isDarkMode ? Colors.grey[700] : Colors.grey[300],
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: Text( child: Text(
'cancel'.tr, // 取消 'cancel'.tr, // 取消
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
), ),
), ),
), ),
@ -121,14 +125,14 @@ class EditTitleBottomSheet extends GetView<MeetingHomeController> {
height: 48.w, height: 48.w,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: Text( child: Text(
'confirm'.tr, // 确认 'confirm'.tr, // 确认
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
), ),
), ),
), ),

51
lib/modules/meeting/views/bottomSheet/filtrate_drawer.dart

@ -4,6 +4,7 @@ import 'package:get/get.dart';
import '../../controllers/meeting_controller.dart'; import '../../controllers/meeting_controller.dart';
import '../../controllers/meeting_home_controller.dart'; import '../../controllers/meeting_home_controller.dart';
import '../../utils/meeting_ui_utils.dart';
class FiltrateDrawer extends StatefulWidget { class FiltrateDrawer extends StatefulWidget {
const FiltrateDrawer({super.key}); const FiltrateDrawer({super.key});
@ -18,6 +19,7 @@ class _FiltrateDrawerState extends State<FiltrateDrawer> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return SafeArea( return SafeArea(
child: Padding( child: Padding(
padding: EdgeInsets.symmetric(horizontal: 12.w), padding: EdgeInsets.symmetric(horizontal: 12.w),
@ -29,30 +31,33 @@ class _FiltrateDrawerState extends State<FiltrateDrawer> {
margin: EdgeInsets.symmetric(vertical: 15.w), margin: EdgeInsets.symmetric(vertical: 15.w),
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey[200], color: isDarkMode
? MeetingUIUtils.getTranslucentWhite(0.1)
: Colors.grey[200],
borderRadius: BorderRadius.circular(12.w), borderRadius: BorderRadius.circular(12.w),
), ),
child: Row( child: Row(
children: [ children: [
Icon( Icon(
Icons.search, Icons.search,
color: Colors.black87, color: isDarkMode ? Colors.grey[400] : Colors.black87,
size: 20.w, size: 20.w,
), ),
Expanded( Expanded(
child: TextField( child: TextField(
controller: _homeController.filtrateController, controller: _homeController.filtrateController,
style: TextStyle( style: TextStyle(
color: Colors.black87, color: MeetingUIUtils.getTextColor(isDarkMode),
fontSize: 14.sp, fontSize: 14.sp,
), ),
decoration: InputDecoration( decoration: InputDecoration(
hintText: 'searchInAllFiles'.tr, // 对应中文:在所有文件中搜索 hintText: 'searchInAllFiles'.tr, // 对应中文:在所有文件中搜索
hintStyle: TextStyle( hintStyle: TextStyle(
color: Colors.black54, color: isDarkMode ? Colors.grey[500] : Colors.black54,
fontSize: 14.sp, fontSize: 14.sp,
), ),
isDense: true, isDense: true,
focusedBorder: InputBorder.none,
fillColor: Colors.transparent, fillColor: Colors.transparent,
border: InputBorder.none, border: InputBorder.none,
contentPadding: EdgeInsets.symmetric(vertical: 10.w), contentPadding: EdgeInsets.symmetric(vertical: 10.w),
@ -89,15 +94,11 @@ class _FiltrateDrawerState extends State<FiltrateDrawer> {
padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.w), padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.w),
decoration: _homeController.filtrateType.value == '' decoration: _homeController.filtrateType.value == ''
? BoxDecoration( ? BoxDecoration(
color: Colors.white, color: isDarkMode
? MeetingUIUtils.getTranslucentWhite(0.08)
: Colors.white,
borderRadius: BorderRadius.circular(12.w), borderRadius: BorderRadius.circular(12.w),
boxShadow: [ boxShadow: MeetingUIUtils.getCardShadow(isDarkMode),
BoxShadow(
color: Colors.black.withValues(alpha: 0.06),
blurRadius: 10,
offset: const Offset(0, 2),
),
],
) )
: null, : null,
child: Row( child: Row(
@ -111,7 +112,7 @@ class _FiltrateDrawerState extends State<FiltrateDrawer> {
Text( Text(
'${'allFiles'.tr}(${_homeController.originalDataList.length})', // 对应中文:全部文件 '${'allFiles'.tr}(${_homeController.originalDataList.length})', // 对应中文:全部文件
style: TextStyle( style: TextStyle(
color: Colors.black87, color: MeetingUIUtils.getTextColor(isDarkMode),
fontSize: 14.sp, fontSize: 14.sp,
), ),
), ),
@ -123,7 +124,7 @@ class _FiltrateDrawerState extends State<FiltrateDrawer> {
padding: EdgeInsetsGeometry.symmetric(vertical: 15.w), padding: EdgeInsetsGeometry.symmetric(vertical: 15.w),
child: Divider( child: Divider(
height: 1, height: 1,
color: Colors.grey[300], color: isDarkMode ? Colors.grey[800] : Colors.grey[300],
), ),
), ),
Padding( Padding(
@ -131,7 +132,7 @@ class _FiltrateDrawerState extends State<FiltrateDrawer> {
child: Text( child: Text(
'from'.tr, // 对应中文:来自 'from'.tr, // 对应中文:来自
style: TextStyle( style: TextStyle(
color: Colors.grey, color: isDarkMode ? Colors.grey[500] : Colors.grey,
fontSize: 14.sp, fontSize: 14.sp,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
@ -150,21 +151,17 @@ class _FiltrateDrawerState extends State<FiltrateDrawer> {
margin: EdgeInsets.symmetric(vertical: 2.w), margin: EdgeInsets.symmetric(vertical: 2.w),
decoration: _homeController.filtrateType.value == name decoration: _homeController.filtrateType.value == name
? BoxDecoration( ? BoxDecoration(
color: Colors.white, color: isDarkMode
? MeetingUIUtils.getTranslucentWhite(0.08)
: Colors.white,
borderRadius: BorderRadius.circular(12.w), borderRadius: BorderRadius.circular(12.w),
boxShadow: [ boxShadow: MeetingUIUtils.getCardShadow(isDarkMode),
BoxShadow(
color: Colors.black.withValues(alpha: 0.06),
blurRadius: 10,
offset: const Offset(0, 2),
),
],
) )
: null, : null,
child: Text( child: Text(
name, name,
style: TextStyle( style: TextStyle(
color: Colors.black87, color: MeetingUIUtils.getTextColor(isDarkMode),
fontSize: 14.sp, fontSize: 14.sp,
), ),
), ),
@ -176,7 +173,7 @@ class _FiltrateDrawerState extends State<FiltrateDrawer> {
child: Text( child: Text(
'sortBy'.tr, // 对应中文:排序方式 'sortBy'.tr, // 对应中文:排序方式
style: TextStyle( style: TextStyle(
color: Colors.grey, color: isDarkMode ? Colors.grey[500] : Colors.grey,
fontSize: 14.sp, fontSize: 14.sp,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
@ -199,7 +196,7 @@ class _FiltrateDrawerState extends State<FiltrateDrawer> {
Text( Text(
'creationTime'.tr, // 对应中文:创建时间 'creationTime'.tr, // 对应中文:创建时间
style: TextStyle( style: TextStyle(
color: Colors.black87, color: MeetingUIUtils.getTextColor(isDarkMode),
fontSize: 14.sp, fontSize: 14.sp,
), ),
), ),
@ -207,7 +204,7 @@ class _FiltrateDrawerState extends State<FiltrateDrawer> {
_homeController.isAsc _homeController.isAsc
? Icons.keyboard_double_arrow_up ? Icons.keyboard_double_arrow_up
: Icons.keyboard_double_arrow_down, : Icons.keyboard_double_arrow_down,
color: Colors.grey, color: isDarkMode ? Colors.grey[500] : Colors.grey,
size: 20.w, size: 20.w,
), ),
], ],

52
lib/modules/meeting/views/bottomSheet/generate_bottom_sheet.dart

@ -88,6 +88,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return SafeArea( return SafeArea(
top: false, top: false,
child: Column( child: Column(
@ -111,7 +112,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
_controller.meetingData.value.title, _controller.meetingData.value.title,
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
), ),
Text( Text(
@ -130,7 +131,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
width: 26.w, width: 26.w,
height: 26.w, height: 26.w,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? Colors.grey[700] : Colors.white,
borderRadius: BorderRadius.circular(26.r), borderRadius: BorderRadius.circular(26.r),
), ),
child: Icon( child: Icon(
@ -148,7 +149,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
margin: EdgeInsets.only(bottom: 10.w), margin: EdgeInsets.only(bottom: 10.w),
child: Divider( child: Divider(
height: 1, height: 1,
color: Colors.grey[300], color: isDarkMode ? Colors.grey[700] : Colors.grey[300],
), ),
), ),
Padding( Padding(
@ -160,7 +161,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
'selectSummaryTemplate'.tr, // 对应中文:选择总结模版 'selectSummaryTemplate'.tr, // 对应中文:选择总结模版
style: TextStyle( style: TextStyle(
fontSize: 14.sp, fontSize: 14.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
), ),
), ),
@ -258,13 +259,14 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
Container( Container(
margin: EdgeInsets.symmetric(horizontal: 12.w), margin: EdgeInsets.symmetric(horizontal: 12.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? const Color(0xFF2D2D2D) : Colors.white,
borderRadius: BorderRadius.circular(8.r), borderRadius: BorderRadius.circular(8.r),
), ),
child: Column( child: Column(
children: [ children: [
_row( _row(
'speakerIdentification'.tr, // 对应中文:区分说话人 'speakerIdentification'.tr, // 对应中文:区分说话人
isDarkMode: isDarkMode,
widget: Transform.scale( widget: Transform.scale(
scale: 0.8, scale: 0.8,
alignment: Alignment.centerRight, alignment: Alignment.centerRight,
@ -281,11 +283,13 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
_row( _row(
'recordingLanguage'.tr, // 对应中文:录音语言 'recordingLanguage'.tr, // 对应中文:录音语言
value: _formlanguageText, value: _formlanguageText,
isDarkMode: isDarkMode,
onTap: () { onTap: () {
Get.bottomSheet( Get.bottomSheet(
RecordLanguageBottomSheet(_formlanguage), RecordLanguageBottomSheet(_formlanguage),
isScrollControlled: true, isScrollControlled: true,
backgroundColor: Colors.grey[100], backgroundColor:
isDarkMode ? Colors.grey[850] : Colors.grey[100],
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical( borderRadius: BorderRadius.vertical(
top: Radius.circular(12.r), top: Radius.circular(12.r),
@ -305,11 +309,13 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
'targetLanguage'.tr, // 对应中文:目标语言 'targetLanguage'.tr, // 对应中文:目标语言
value: _tolanguageText, value: _tolanguageText,
isBorder: false, isBorder: false,
isDarkMode: isDarkMode,
onTap: () { onTap: () {
Get.bottomSheet( Get.bottomSheet(
RecordLanguageBottomSheet(_tolanguage), RecordLanguageBottomSheet(_tolanguage),
isScrollControlled: true, isScrollControlled: true,
backgroundColor: Colors.grey[100], backgroundColor:
isDarkMode ? Colors.grey[850] : Colors.grey[100],
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical( borderRadius: BorderRadius.vertical(
top: Radius.circular(12.r), top: Radius.circular(12.r),
@ -362,14 +368,14 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
height: 48.w, height: 48.w,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: Text( child: Text(
'meetingGenerateNow'.tr, // 对应中文:立即生成 'meetingGenerateNow'.tr, // 对应中文:立即生成
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
), ),
), ),
), ),
@ -381,6 +387,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
} }
Widget _item(Map data) { Widget _item(Map data) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return Container( return Container(
width: 200.w, width: 200.w,
margin: EdgeInsets.symmetric(horizontal: 8.w), margin: EdgeInsets.symmetric(horizontal: 8.w),
@ -399,7 +406,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
Container( Container(
padding: EdgeInsets.all(5.w), padding: EdgeInsets.all(5.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? const Color(0xFF2D2D2D) : Colors.white,
gradient: _templateData['id'] == data['id'] gradient: _templateData['id'] == data['id']
? const LinearGradient( ? const LinearGradient(
colors: [Colors.blue, Colors.pinkAccent], colors: [Colors.blue, Colors.pinkAccent],
@ -413,7 +420,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
padding: EdgeInsets.all(10.w), padding: EdgeInsets.all(10.w),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.w), borderRadius: BorderRadius.circular(10.w),
color: Colors.white, color: isDarkMode ? const Color(0xFF2D2D2D) : Colors.white,
), ),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -432,7 +439,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
data['name'], data['name'],
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
@ -447,14 +454,18 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
horizontal: 5.w, vertical: 2.w), horizontal: 5.w, vertical: 2.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey[200], color: isDarkMode
? Colors.grey[800]
: Colors.grey[200],
borderRadius: BorderRadius.circular(4.r), borderRadius: BorderRadius.circular(4.r),
), ),
child: Text( child: Text(
data['tag'][idx], data['tag'][idx],
style: TextStyle( style: TextStyle(
fontSize: 10.sp, fontSize: 10.sp,
color: Colors.grey[600], color: isDarkMode
? Colors.grey[400]
: Colors.grey[600],
), ),
), ),
); );
@ -466,7 +477,9 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: TextStyle( style: TextStyle(
fontSize: 12.sp, fontSize: 12.sp,
color: Colors.grey[600], color: isDarkMode
? Colors.grey[400]
: Colors.grey[600],
), ),
), ),
], ],
@ -527,6 +540,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
String? value, String? value,
Widget? widget, Widget? widget,
bool isBorder = true, bool isBorder = true,
bool isDarkMode = false,
Function()? onTap, Function()? onTap,
}) { }) {
return GestureDetector( return GestureDetector(
@ -540,7 +554,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
border: isBorder border: isBorder
? Border( ? Border(
bottom: BorderSide( bottom: BorderSide(
color: Colors.grey[300]!, color: isDarkMode ? Colors.grey[700]! : Colors.grey[300]!,
), ),
) )
: null, : null,
@ -552,7 +566,7 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
title, title,
style: TextStyle( style: TextStyle(
fontSize: 14.sp, fontSize: 14.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
), ),
), ),
@ -566,9 +580,9 @@ class _GenerateBottomSheetState extends State<GenerateBottomSheet> {
color: Colors.grey, color: Colors.grey,
), ),
), ),
const Icon( Icon(
Icons.keyboard_arrow_right, Icons.keyboard_arrow_right,
color: Colors.grey, color: isDarkMode ? Colors.grey[500] : Colors.grey,
) )
], ],
), ),

50
lib/modules/meeting/views/bottomSheet/member_bottom_sheet.dart

@ -9,6 +9,7 @@ class MemberBottomSheet extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return SafeArea( return SafeArea(
top: false, top: false,
child: Container( child: Container(
@ -36,13 +37,13 @@ class MemberBottomSheet extends StatelessWidget {
width: 26.w, width: 26.w,
height: 26.w, height: 26.w,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? Colors.grey[700] : Colors.white,
borderRadius: BorderRadius.circular(26.r), borderRadius: BorderRadius.circular(26.r),
), ),
child: Icon( child: Icon(
Icons.close, Icons.close,
size: 18.w, size: 18.w,
color: Colors.grey[400], color: isDarkMode ? Colors.grey[300] : Colors.grey[400],
), ),
), ),
), ),
@ -50,7 +51,7 @@ class MemberBottomSheet extends StatelessWidget {
Text( Text(
'解锁 Starter 会员', '解锁 Starter 会员',
style: TextStyle( style: TextStyle(
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
fontSize: 18.sp, fontSize: 18.sp,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
@ -65,16 +66,25 @@ class MemberBottomSheet extends StatelessWidget {
), ),
), ),
), ),
_item(Icons.access_time, Colors.red, _item(
'monthlyTranscriptionDuration'.tr), //对应中文:每月300分钟转写时长 Icons.access_time,
_item(Icons.description, Colors.purpleAccent, Colors.red,
'industrySpecificSummaryTemplate'.tr), //对应中文:为行业细分场景设计的专业总结模版 'monthlyTranscriptionDuration'.tr,
_item(Icons.auto_awesome, Colors.purpleAccent, isDarkMode), //对应中文:每月300分钟转写时长
'autopilotTemplateSummary'.tr), //对应中文:Autopilot 模版自动总结 _item(
_item(Icons.people, Colors.red, Icons.description,
'distinguishDifferentSpeakers'.tr), //对应中文:区分不同说话人 Colors.purpleAccent,
_item(Icons.cloud_upload, Colors.red, 'industrySpecificSummaryTemplate'.tr,
'importAudioFromAppWeb'.tr), //对应中文:从APP、WEB导入音频进行转写和总结 isDarkMode), //对应中文:为行业细分场景设计的专业总结模版
_item(
Icons.auto_awesome,
Colors.purpleAccent,
'autopilotTemplateSummary'.tr,
isDarkMode), //对应中文:Autopilot 模版自动总结
_item(Icons.people, Colors.red, 'distinguishDifferentSpeakers'.tr,
isDarkMode), //对应中文:区分不同说话人
_item(Icons.cloud_upload, Colors.red, 'importAudioFromAppWeb'.tr,
isDarkMode), //对应中文:从APP、WEB导入音频进行转写和总结
Padding( Padding(
padding: EdgeInsets.symmetric(vertical: 20.w), padding: EdgeInsets.symmetric(vertical: 20.w),
child: Row( child: Row(
@ -95,14 +105,16 @@ class MemberBottomSheet extends StatelessWidget {
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
border: Border.all( border: Border.all(
color: Colors.grey[400]!, color: isDarkMode
? Colors.grey[600]!
: Colors.grey[400]!,
), ),
), ),
child: Text( child: Text(
'findMore'.tr, //对应中文:发现更多 'findMore'.tr, //对应中文:发现更多
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
), ),
), ),
), ),
@ -116,14 +128,14 @@ class MemberBottomSheet extends StatelessWidget {
height: 48.w, height: 48.w,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: Text( child: Text(
'bindImmediately'.tr, //对应中文:立即绑定 'bindImmediately'.tr, //对应中文:立即绑定
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
), ),
), ),
), ),
@ -138,7 +150,7 @@ class MemberBottomSheet extends StatelessWidget {
); );
} }
Widget _item(IconData icon, Color color, String title) { Widget _item(IconData icon, Color color, String title, bool isDarkMode) {
return Padding( return Padding(
padding: EdgeInsets.symmetric(vertical: 10.w), padding: EdgeInsets.symmetric(vertical: 10.w),
child: Row( child: Row(
@ -164,7 +176,7 @@ class MemberBottomSheet extends StatelessWidget {
child: Text( child: Text(
title, title,
style: TextStyle( style: TextStyle(
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
fontSize: 14.sp, fontSize: 14.sp,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),

19
lib/modules/meeting/views/bottomSheet/more_bottom_sheet.dart

@ -19,6 +19,7 @@ class _MoreBottomSheetState extends State<MoreBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return SafeArea( return SafeArea(
top: false, top: false,
child: Padding( child: Padding(
@ -28,6 +29,7 @@ class _MoreBottomSheetState extends State<MoreBottomSheet> {
children: [ children: [
SizedBox(height: 10.w), SizedBox(height: 10.w),
_shareItem(Icons.refresh, 'reSummarize'.tr, //重新总结 _shareItem(Icons.refresh, 'reSummarize'.tr, //重新总结
isDarkMode: isDarkMode,
onTap: _detailsController.meetingDetails.value.tasktype >= 5 && onTap: _detailsController.meetingDetails.value.tasktype >= 5 &&
_detailsController.meetingDetails.value.tasktype < 10002 _detailsController.meetingDetails.value.tasktype < 10002
? () { ? () {
@ -37,7 +39,8 @@ class _MoreBottomSheetState extends State<MoreBottomSheet> {
isSummarizeAgain: true, isSummarizeAgain: true,
), ),
isScrollControlled: true, isScrollControlled: true,
backgroundColor: Colors.grey[100], backgroundColor:
isDarkMode ? Colors.grey[850] : Colors.grey[100],
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical( borderRadius: BorderRadius.vertical(
top: Radius.circular(12.r), top: Radius.circular(12.r),
@ -46,7 +49,8 @@ class _MoreBottomSheetState extends State<MoreBottomSheet> {
); );
} }
: null), : null),
_shareItem(Icons.delete_outline, 'delete'.tr, onTap: () async { _shareItem(Icons.delete_outline, 'delete'.tr,
isDarkMode: isDarkMode, onTap: () async {
_controller.deleteMeeting( _controller.deleteMeeting(
_detailsController.meetingData.value.id, _detailsController.meetingData.value.id,
_detailsController.meetingData.value.filepath, _detailsController.meetingData.value.filepath,
@ -64,6 +68,7 @@ class _MoreBottomSheetState extends State<MoreBottomSheet> {
IconData icon, IconData icon,
String title, { String title, {
VoidCallback? onTap, VoidCallback? onTap,
bool isDarkMode = false,
}) { }) {
return InkWell( return InkWell(
onTap: onTap, onTap: onTap,
@ -71,7 +76,9 @@ class _MoreBottomSheetState extends State<MoreBottomSheet> {
padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 14.w), padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 14.w),
margin: EdgeInsets.only(bottom: 10.w), margin: EdgeInsets.only(bottom: 10.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: onTap != null ? Colors.white : Colors.grey[200], color: onTap != null
? (isDarkMode ? const Color(0xFF2D2D2D) : Colors.white)
: (isDarkMode ? Colors.grey[800] : Colors.grey[200]),
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: Row( child: Row(
@ -80,7 +87,7 @@ class _MoreBottomSheetState extends State<MoreBottomSheet> {
opacity: onTap != null ? 1.0 : 0.5, opacity: onTap != null ? 1.0 : 0.5,
child: Icon( child: Icon(
icon, icon,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
), ),
10.horizontalSpace, 10.horizontalSpace,
@ -89,8 +96,8 @@ class _MoreBottomSheetState extends State<MoreBottomSheet> {
title, title,
style: TextStyle( style: TextStyle(
fontSize: 14.sp, fontSize: 14.sp,
color: color: (isDarkMode ? Colors.white : Colors.black87)
Colors.black87.withValues(alpha: onTap != null ? 1 : 0.5), .withValues(alpha: onTap != null ? 1 : 0.5),
), ),
), ),
), ),

23
lib/modules/meeting/views/bottomSheet/record_language_bottom_sheet.dart

@ -29,6 +29,7 @@ class _RecordLanguageBottomSheetState extends State<RecordLanguageBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return SafeArea( return SafeArea(
top: false, top: false,
child: Padding( child: Padding(
@ -45,7 +46,7 @@ class _RecordLanguageBottomSheetState extends State<RecordLanguageBottomSheet> {
'recordLanguage'.tr, // 对应中文:录音语言 'recordLanguage'.tr, // 对应中文:录音语言
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
@ -55,13 +56,13 @@ class _RecordLanguageBottomSheetState extends State<RecordLanguageBottomSheet> {
width: 26.w, width: 26.w,
height: 26.w, height: 26.w,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? Colors.grey[700] : Colors.white,
borderRadius: BorderRadius.circular(26.r), borderRadius: BorderRadius.circular(26.r),
), ),
child: Icon( child: Icon(
Icons.close, Icons.close,
size: 18.w, size: 18.w,
color: Colors.grey[400], color: isDarkMode ? Colors.grey[300] : Colors.grey[400],
), ),
), ),
) )
@ -70,7 +71,7 @@ class _RecordLanguageBottomSheetState extends State<RecordLanguageBottomSheet> {
), ),
Divider( Divider(
height: 1, height: 1,
color: Colors.grey[300], color: isDarkMode ? Colors.grey[700] : Colors.grey[300],
), ),
Container( Container(
margin: EdgeInsets.symmetric(vertical: 20.w), margin: EdgeInsets.symmetric(vertical: 20.w),
@ -78,7 +79,7 @@ class _RecordLanguageBottomSheetState extends State<RecordLanguageBottomSheet> {
maxHeight: 1.sh - 180.w, maxHeight: 1.sh - 180.w,
), ),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? const Color(0xFF2D2D2D) : Colors.white,
borderRadius: BorderRadius.circular(8.r), borderRadius: BorderRadius.circular(8.r),
), ),
child: ListView.builder( child: ListView.builder(
@ -86,7 +87,7 @@ class _RecordLanguageBottomSheetState extends State<RecordLanguageBottomSheet> {
shrinkWrap: true, shrinkWrap: true,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
Map data = _languages[index]; Map data = _languages[index];
return _item(index, data); return _item(index, data, isDarkMode);
}, },
), ),
), ),
@ -96,7 +97,7 @@ class _RecordLanguageBottomSheetState extends State<RecordLanguageBottomSheet> {
); );
} }
Widget _item(int index, Map data) { Widget _item(int index, Map data, bool isDarkMode) {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
Get.back(result: data); Get.back(result: data);
@ -110,7 +111,7 @@ class _RecordLanguageBottomSheetState extends State<RecordLanguageBottomSheet> {
border: index != 0 border: index != 0
? Border( ? Border(
top: BorderSide( top: BorderSide(
color: Colors.grey[300]!, color: isDarkMode ? Colors.grey[700]! : Colors.grey[300]!,
), ),
) )
: null, : null,
@ -122,14 +123,14 @@ class _RecordLanguageBottomSheetState extends State<RecordLanguageBottomSheet> {
data['name'], data['name'],
style: TextStyle( style: TextStyle(
fontSize: 14.sp, fontSize: 14.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
), ),
), ),
if (widget.language == data['value']) if (widget.language == data['value'])
const Icon( Icon(
Icons.check, Icons.check,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
], ],
), ),

32
lib/modules/meeting/views/bottomSheet/second_level_bottom_sheet.dart

@ -21,6 +21,7 @@ class _SecondLevelBottomSheetState extends State<SecondLevelBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return SafeArea( return SafeArea(
top: false, top: false,
child: Padding( child: Padding(
@ -38,7 +39,7 @@ class _SecondLevelBottomSheetState extends State<SecondLevelBottomSheet> {
widget.title, widget.title,
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
@ -48,13 +49,13 @@ class _SecondLevelBottomSheetState extends State<SecondLevelBottomSheet> {
width: 26.w, width: 26.w,
height: 26.w, height: 26.w,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? Colors.grey[700] : Colors.white,
borderRadius: BorderRadius.circular(26.r), borderRadius: BorderRadius.circular(26.r),
), ),
child: Icon( child: Icon(
Icons.close, Icons.close,
size: 18.w, size: 18.w,
color: Colors.grey[400], color: isDarkMode ? Colors.grey[300] : Colors.grey[400],
), ),
), ),
) )
@ -63,7 +64,7 @@ class _SecondLevelBottomSheetState extends State<SecondLevelBottomSheet> {
), ),
Divider( Divider(
height: 1, height: 1,
color: Colors.grey[300], color: isDarkMode ? Colors.grey[700] : Colors.grey[300],
), ),
Padding( Padding(
padding: EdgeInsetsGeometry.only( padding: EdgeInsetsGeometry.only(
@ -82,7 +83,7 @@ class _SecondLevelBottomSheetState extends State<SecondLevelBottomSheet> {
Container( Container(
clipBehavior: Clip.hardEdge, clipBehavior: Clip.hardEdge,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? const Color(0xFF2D2D2D) : Colors.white,
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: Column( child: Column(
@ -95,14 +96,16 @@ class _SecondLevelBottomSheetState extends State<SecondLevelBottomSheet> {
}); });
}, },
child: Container( child: Container(
padding: padding: EdgeInsets.symmetric(
EdgeInsets.symmetric(horizontal: 12.w, vertical: 14.w), horizontal: 12.w, vertical: 14.w),
decoration: BoxDecoration( decoration: BoxDecoration(
border: item['isBorder'] border: item['isBorder']
? Border( ? Border(
bottom: BorderSide( bottom: BorderSide(
width: 0.5, width: 0.5,
color: Colors.grey[300]!, color: isDarkMode
? Colors.grey[700]!
: Colors.grey[300]!,
), ),
) )
: null, : null,
@ -111,7 +114,7 @@ class _SecondLevelBottomSheetState extends State<SecondLevelBottomSheet> {
children: [ children: [
Icon( Icon(
item['icon'], item['icon'],
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
10.horizontalSpace, 10.horizontalSpace,
Expanded( Expanded(
@ -119,14 +122,15 @@ class _SecondLevelBottomSheetState extends State<SecondLevelBottomSheet> {
item['title'], item['title'],
style: TextStyle( style: TextStyle(
fontSize: 14.sp, fontSize: 14.sp,
color: Colors.black87, color:
isDarkMode ? Colors.white : Colors.black87,
), ),
), ),
), ),
if (_selectedIndex == index) if (_selectedIndex == index)
const Icon( Icon(
Icons.check, Icons.check,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
], ],
), ),
@ -146,14 +150,14 @@ class _SecondLevelBottomSheetState extends State<SecondLevelBottomSheet> {
height: 48.w, height: 48.w,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: Text( child: Text(
'export'.tr, // 对应中文:导出 'export'.tr, // 对应中文:导出
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
), ),
), ),
), ),

25
lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart

@ -30,6 +30,7 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return SafeArea( return SafeArea(
top: false, top: false,
child: Padding( child: Padding(
@ -52,7 +53,7 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
_controller.meetingData.value.title, _controller.meetingData.value.title,
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
), ),
), ),
@ -62,7 +63,7 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
width: 26.w, width: 26.w,
height: 26.w, height: 26.w,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? Colors.grey[700] : Colors.white,
borderRadius: BorderRadius.circular(26.r), borderRadius: BorderRadius.circular(26.r),
), ),
child: Icon( child: Icon(
@ -204,7 +205,9 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
], ],
), ),
isScrollControlled: true, isScrollControlled: true,
backgroundColor: Colors.grey[100], backgroundColor: isDarkMode
? Colors.grey[850]
: Colors.grey[100],
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical( borderRadius: BorderRadius.vertical(
top: Radius.circular(12.r), top: Radius.circular(12.r),
@ -281,11 +284,12 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
} }
Widget _box(List<Widget> children) { Widget _box(List<Widget> children) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return Container( return Container(
margin: EdgeInsets.only(bottom: 10.w), margin: EdgeInsets.only(bottom: 10.w),
clipBehavior: Clip.hardEdge, clipBehavior: Clip.hardEdge,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? const Color(0xFF2D2D2D) : Colors.white,
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: Column( child: Column(
@ -300,17 +304,20 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
bool isBorder = true, bool isBorder = true,
VoidCallback? onTap, VoidCallback? onTap,
}) { }) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return InkWell( return InkWell(
onTap: onTap, onTap: onTap,
child: Container( child: Container(
padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 14.w), padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 14.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: onTap != null ? null : Colors.grey[200], color: onTap != null
? null
: (isDarkMode ? Colors.grey[800] : Colors.grey[200]),
border: isBorder border: isBorder
? Border( ? Border(
bottom: BorderSide( bottom: BorderSide(
width: 0.5, width: 0.5,
color: Colors.grey[300]!, color: isDarkMode ? Colors.grey[700]! : Colors.grey[300]!,
), ),
) )
: null, : null,
@ -321,7 +328,7 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
opacity: onTap != null ? 1.0 : 0.5, opacity: onTap != null ? 1.0 : 0.5,
child: Icon( child: Icon(
icon, icon,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
), ),
10.horizontalSpace, 10.horizontalSpace,
@ -330,8 +337,8 @@ class _ShareBottomSheetState extends State<ShareBottomSheet> {
title, title,
style: TextStyle( style: TextStyle(
fontSize: 14.sp, fontSize: 14.sp,
color: color: (isDarkMode ? Colors.white : Colors.black87)
Colors.black87.withValues(alpha: onTap != null ? 1 : 0.5), .withValues(alpha: onTap != null ? 1 : 0.5),
), ),
), ),
), ),

67
lib/modules/meeting/views/bottomSheet/speaker_all_bottom_sheet.dart

@ -89,6 +89,7 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return SafeArea( return SafeArea(
top: false, top: false,
child: Padding( child: Padding(
@ -105,7 +106,7 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
'nameSpeaker'.tr, // 对应中文:命名发言者 'nameSpeaker'.tr, // 对应中文:命名发言者
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
@ -115,13 +116,13 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
width: 26.w, width: 26.w,
height: 26.w, height: 26.w,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? Colors.grey[700] : Colors.white,
borderRadius: BorderRadius.circular(26.r), borderRadius: BorderRadius.circular(26.r),
), ),
child: Icon( child: Icon(
Icons.close, Icons.close,
size: 18.w, size: 18.w,
color: Colors.grey[400], color: isDarkMode ? Colors.grey[300] : Colors.grey[400],
), ),
), ),
) )
@ -130,7 +131,7 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
), ),
Divider( Divider(
height: 1, height: 1,
color: Colors.grey[300], color: isDarkMode ? Colors.grey[700] : Colors.grey[300],
), ),
Container( Container(
constraints: BoxConstraints( constraints: BoxConstraints(
@ -149,8 +150,11 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
margin: EdgeInsets.only(top: 15.w), margin: EdgeInsets.only(top: 15.w),
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode
borderRadius: item['isShow'] && _speakerList.isNotEmpty ? const Color(0xFF2D2D2D)
: Colors.white,
borderRadius:
item['isShow'] && _speakerList.isNotEmpty
? BorderRadius.vertical( ? BorderRadius.vertical(
top: Radius.circular(12.r), top: Radius.circular(12.r),
) )
@ -166,7 +170,7 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
controller: item['speakerText'], controller: item['speakerText'],
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
letterSpacing: 0, letterSpacing: 0,
height: 1.4, height: 1.4,
), ),
@ -174,7 +178,9 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
hintText: item['speaker'], hintText: item['speaker'],
hintStyle: TextStyle( hintStyle: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.grey[400], color: isDarkMode
? Colors.grey[500]
: Colors.grey[400],
letterSpacing: 0, letterSpacing: 0,
height: 1.4, height: 1.4,
), ),
@ -194,14 +200,18 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
padding: EdgeInsets.only(left: 10.w), padding: EdgeInsets.only(left: 10.w),
clipBehavior: Clip.hardEdge, clipBehavior: Clip.hardEdge,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode
? const Color(0xFF2D2D2D)
: Colors.white,
borderRadius: BorderRadius.vertical( borderRadius: BorderRadius.vertical(
bottom: Radius.circular(12.r), bottom: Radius.circular(12.r),
), ),
border: Border( border: Border(
top: BorderSide( top: BorderSide(
width: 1, width: 1,
color: Colors.grey[300]!, color: isDarkMode
? Colors.grey[700]!
: Colors.grey[300]!,
), ),
), ),
), ),
@ -209,7 +219,8 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: EdgeInsets.only(top: 10.w, bottom: 5.w), padding:
EdgeInsets.only(top: 10.w, bottom: 5.w),
child: Text( child: Text(
'recentlyUsedNames'.tr, // 对应中文:最近使用过的名称 'recentlyUsedNames'.tr, // 对应中文:最近使用过的名称
style: TextStyle( style: TextStyle(
@ -241,7 +252,9 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
_speakerList[idx], _speakerList[idx],
style: TextStyle( style: TextStyle(
fontSize: 14.sp, fontSize: 14.sp,
color: Colors.black87, color: isDarkMode
? Colors.white
: Colors.black87,
), ),
), ),
), ),
@ -272,7 +285,9 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
'${item['totaltime'] / 1000}s', '${item['totaltime'] / 1000}s',
style: TextStyle( style: TextStyle(
fontSize: 12.sp, fontSize: 12.sp,
color: Colors.black87, color: isDarkMode
? Colors.white70
: Colors.black87,
), ),
), ),
], ],
@ -359,7 +374,9 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
Text( Text(
'${(data['endtime'] - data['starttime']) / 1000}s', '${(data['endtime'] - data['starttime']) / 1000}s',
style: TextStyle( style: TextStyle(
color: Colors.black54, color: isDarkMode
? Colors.grey[400]
: Colors.black54,
fontSize: 12.sp, fontSize: 12.sp,
), ),
), ),
@ -390,6 +407,8 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
style: TextStyle( style: TextStyle(
color: isActive color: isActive
? Colors.red ? Colors.red
: isDarkMode
? Colors.grey[400]
: Colors.grey[700], : Colors.grey[700],
fontSize: 12.sp, fontSize: 12.sp,
), ),
@ -404,8 +423,8 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
), ),
if (item['isOmit']) if (item['isOmit'])
Padding( Padding(
padding: padding: EdgeInsets.only(
EdgeInsets.only(left: 10.w, top: 5.w, bottom: 8.w), left: 10.w, top: 5.w, bottom: 8.w),
child: Row( child: Row(
children: List.generate( children: List.generate(
6, 6,
@ -433,7 +452,8 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
Padding( Padding(
padding: EdgeInsets.symmetric(vertical: 5.w), padding: EdgeInsets.symmetric(vertical: 5.w),
child: Text( child: Text(
'summarySpeakerWillBeUpdatedAutomatically'.tr, // 对应中文:总结的发言者将自动更新 'summarySpeakerWillBeUpdatedAutomatically'
.tr, // 对应中文:总结的发言者将自动更新
style: TextStyle( style: TextStyle(
fontSize: 14.sp, fontSize: 14.sp,
color: Colors.grey[600], color: Colors.grey[600],
@ -451,14 +471,15 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
height: 48.w, height: 48.w,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey[300], color:
isDarkMode ? Colors.grey[700] : Colors.grey[300],
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: Text( child: Text(
'cancel'.tr, // 对应中文:取消 'cancel'.tr, // 对应中文:取消
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
), ),
), ),
), ),
@ -472,7 +493,7 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
height: 48.w, height: 48.w,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: Text( child: Text(
@ -480,7 +501,7 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
), ),
), ),
), ),
@ -498,6 +519,7 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
Widget _separator() { Widget _separator() {
return LayoutBuilder( return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) { builder: (BuildContext context, BoxConstraints constraints) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
final boxWidth = constraints.constrainWidth(); final boxWidth = constraints.constrainWidth();
const dashWidth = 2.0; const dashWidth = 2.0;
const dashHeight = 1.0; const dashHeight = 1.0;
@ -510,7 +532,8 @@ class _SpeakerAllBottomSheetState extends State<SpeakerAllBottomSheet> {
width: dashWidth, width: dashWidth,
height: dashHeight, height: dashHeight,
child: DecoratedBox( child: DecoratedBox(
decoration: BoxDecoration(color: Colors.grey[300]), decoration: BoxDecoration(
color: isDarkMode ? Colors.grey[700] : Colors.grey[300]),
), ),
); );
}), }),

43
lib/modules/meeting/views/bottomSheet/speaker_bottom_sheet.dart

@ -60,6 +60,7 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return SafeArea( return SafeArea(
top: false, top: false,
child: Padding( child: Padding(
@ -76,7 +77,7 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
'nameCurrentSpeaker'.tr, // 对应中文:命名当前发言者 'nameCurrentSpeaker'.tr, // 对应中文:命名当前发言者
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
@ -86,7 +87,7 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
width: 26.w, width: 26.w,
height: 26.w, height: 26.w,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? Colors.grey[700] : Colors.white,
borderRadius: BorderRadius.circular(26.r), borderRadius: BorderRadius.circular(26.r),
), ),
child: Icon( child: Icon(
@ -101,20 +102,20 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
), ),
Divider( Divider(
height: 1, height: 1,
color: Colors.grey[300], color: isDarkMode ? Colors.grey[700] : Colors.grey[300],
), ),
Container( Container(
margin: EdgeInsets.symmetric(vertical: 15.w), margin: EdgeInsets.symmetric(vertical: 15.w),
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: isDarkMode ? const Color(0xFF2D2D2D) : Colors.white,
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: TextField( child: TextField(
controller: _speakerController, controller: _speakerController,
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
letterSpacing: 0, letterSpacing: 0,
height: 1.4, height: 1.4,
), ),
@ -151,7 +152,9 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
border: Border( border: Border(
bottom: BorderSide( bottom: BorderSide(
width: 1, width: 1,
color: Colors.grey[300]!, color: isDarkMode
? Colors.grey[700]!
: Colors.grey[300]!,
), ),
), ),
), ),
@ -179,7 +182,9 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
_speakerList[index], _speakerList[index],
style: TextStyle( style: TextStyle(
fontSize: 14.sp, fontSize: 14.sp,
color: Colors.black87, color: isDarkMode
? Colors.white
: Colors.black87,
), ),
), ),
), ),
@ -193,7 +198,8 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
), ),
_row( _row(
'applyToCurrentParagraph'.tr, // 对应中文:应用到当前段落 'applyToCurrentParagraph'.tr, // 对应中文:应用到当前段落
_type == 0, onTap: () { _type == 0,
isDarkMode: isDarkMode, onTap: () {
setState(() { setState(() {
_type = 0; _type = 0;
}); });
@ -201,6 +207,7 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
_row( _row(
'applyToAllParagraphs'.tr, // 对应中文:应用到这个发言者的所有段落 'applyToAllParagraphs'.tr, // 对应中文:应用到这个发言者的所有段落
_type == 1, _type == 1,
isDarkMode: isDarkMode,
description: description:
'summaryWillBeUpdatedAutomatically'.tr, // 对应中文:总结将根据模版自动更新 'summaryWillBeUpdatedAutomatically'.tr, // 对应中文:总结将根据模版自动更新
onTap: () { onTap: () {
@ -217,14 +224,14 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
height: 48.w, height: 48.w,
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
borderRadius: BorderRadius.circular(12.r), borderRadius: BorderRadius.circular(12.r),
), ),
child: Text( child: Text(
'save'.tr, // 对应中文:保存 'save'.tr, // 对应中文:保存
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
), ),
), ),
), ),
@ -237,14 +244,14 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
} }
Widget _row(String name, bool isActive, Widget _row(String name, bool isActive,
{String? description, Function()? onTap}) { {String? description, Function()? onTap, bool isDarkMode = false}) {
return GestureDetector( return GestureDetector(
onTap: onTap, onTap: onTap,
child: Padding( child: Padding(
padding: EdgeInsets.symmetric(vertical: 10.w), padding: EdgeInsets.symmetric(vertical: 10.w),
child: Row( child: Row(
children: [ children: [
isActive ? _round() : _circle(), isActive ? _round(isDarkMode) : _circle(isDarkMode),
Expanded( Expanded(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -253,7 +260,7 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
name, name,
style: TextStyle( style: TextStyle(
fontSize: 14.sp, fontSize: 14.sp,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
), ),
if (description != null) if (description != null)
@ -273,7 +280,7 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
); );
} }
Widget _circle() { Widget _circle(bool isDarkMode) {
return Container( return Container(
width: 18.w, width: 18.w,
height: 18.w, height: 18.w,
@ -282,13 +289,13 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
borderRadius: BorderRadius.circular(18.r), borderRadius: BorderRadius.circular(18.r),
border: Border.all( border: Border.all(
width: 1.5, width: 1.5,
color: Colors.grey[300]!, color: isDarkMode ? Colors.grey[600]! : Colors.grey[300]!,
), ),
), ),
); );
} }
Widget _round() { Widget _round(bool isDarkMode) {
return Container( return Container(
width: 18.w, width: 18.w,
height: 18.w, height: 18.w,
@ -298,12 +305,12 @@ class _SpeakerBottomSheetState extends State<SpeakerBottomSheet> {
borderRadius: BorderRadius.circular(18.r), borderRadius: BorderRadius.circular(18.r),
border: Border.all( border: Border.all(
width: 1.5, width: 1.5,
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
), ),
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
borderRadius: BorderRadius.circular(18.r), borderRadius: BorderRadius.circular(18.r),
), ),
), ),

50
lib/modules/meeting/views/meeting_details_view.dart

@ -80,7 +80,9 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
padding: EdgeInsets.symmetric(horizontal: 2.w, vertical: 3.w), padding: EdgeInsets.symmetric(horizontal: 2.w, vertical: 3.w),
clipBehavior: Clip.hardEdge, clipBehavior: Clip.hardEdge,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey[200], color: isDarkMode
? Colors.grey[850] ?? const Color(0xFF1F1F1F)
: Colors.grey[200],
borderRadius: BorderRadius.circular(30.r), borderRadius: BorderRadius.circular(30.r),
), ),
child: Row( child: Row(
@ -139,7 +141,9 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
), ),
Icon( Icon(
Icons.download_for_offline, Icons.download_for_offline,
color: Colors.black, color: isDarkMode
? Colors.white
: Colors.black,
size: 30.w, size: 30.w,
), ),
], ],
@ -149,7 +153,7 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
controller.isPlay.value controller.isPlay.value
? Icons.pause_circle ? Icons.pause_circle
: Icons.play_circle, : Icons.play_circle,
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
size: 30.w, size: 30.w,
), ),
), ),
@ -323,14 +327,14 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
child: Obx( child: Obx(
() => Row( () => Row(
children: [ children: [
_iconItem( _iconItem(Icons.summarize, 'overview'.tr, 0,
Icons.summarize, 'overview'.tr, 0), // 对应中文:概览 isDarkMode), // 对应中文:概览
_iconItem(Icons.message, 'transcription'.tr, _iconItem(Icons.message, 'transcription'.tr, 1,
1), // 对应中文:转写 isDarkMode), // 对应中文:转写
_iconItem( _iconItem(Icons.article, 'summary'.tr, 2,
Icons.article, 'summary'.tr, 2), // 对应中文:总结 isDarkMode), // 对应中文:总结
_iconItem( _iconItem(Icons.lan, 'mindMap'.tr, 3,
Icons.lan, 'mindMap'.tr, 3), // 对应中文:思维导图 isDarkMode), // 对应中文:思维导图
], ],
), ),
), ),
@ -524,7 +528,7 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
}, },
child: Icon( child: Icon(
Icons.replay_10, Icons.replay_10,
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
size: 30.w, size: 30.w,
), ),
), ),
@ -586,7 +590,9 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
), ),
Icon( Icon(
Icons.download_for_offline, Icons.download_for_offline,
color: Colors.black, color: isDarkMode
? Colors.white
: Colors.black,
size: 48.w, size: 48.w,
), ),
], ],
@ -596,7 +602,9 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
controller.isPlay.value controller.isPlay.value
? Icons.pause_circle ? Icons.pause_circle
: Icons.play_circle, : Icons.play_circle,
color: Colors.black, color: isDarkMode
? Colors.white
: Colors.black,
size: 48.w, size: 48.w,
), ),
), ),
@ -609,7 +617,7 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
}, },
child: Icon( child: Icon(
Icons.forward_10, Icons.forward_10,
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
size: 30.w, size: 30.w,
), ),
), ),
@ -626,7 +634,7 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
); );
} }
Widget _iconItem(IconData icon, String title, int index) { Widget _iconItem(IconData icon, String title, int index, bool isDarkMode) {
bool isActive = controller.currentIndex.value == index; bool isActive = controller.currentIndex.value == index;
return Expanded( return Expanded(
@ -641,7 +649,9 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
padding: EdgeInsets.symmetric(horizontal: 18.w), padding: EdgeInsets.symmetric(horizontal: 18.w),
margin: EdgeInsets.symmetric(horizontal: 4.w), margin: EdgeInsets.symmetric(horizontal: 4.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: isActive ? Colors.black : Colors.grey[200], color: isActive
? (isDarkMode ? Colors.white : Colors.black)
: (isDarkMode ? const Color(0xFF2D2D2D) : Colors.grey[200]),
borderRadius: BorderRadius.circular(12.w), borderRadius: BorderRadius.circular(12.w),
), ),
child: Row( child: Row(
@ -649,7 +659,9 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
children: [ children: [
Icon( Icon(
icon, icon,
color: isActive ? Colors.white : Colors.grey[600], color: isActive
? (isDarkMode ? Colors.black : Colors.white)
: (isDarkMode ? Colors.grey[400] : Colors.grey[600]),
size: 20.sp, size: 20.sp,
), ),
if (isActive) if (isActive)
@ -658,7 +670,7 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
child: Text( child: Text(
title, title,
style: TextStyle( style: TextStyle(
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
fontSize: 16.sp, fontSize: 16.sp,
), ),
), ),

11
lib/modules/meeting/views/tabs/overview_tab.dart

@ -211,6 +211,9 @@ class _OverviewTabState extends State<OverviewTab> {
} }
Widget _button(IconData icon, String title, Function() onTap) { Widget _button(IconData icon, String title, Function() onTap) {
return Builder(
builder: (context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return GestureDetector( return GestureDetector(
onTap: onTap, onTap: onTap,
child: Container( child: Container(
@ -218,7 +221,7 @@ class _OverviewTabState extends State<OverviewTab> {
padding: EdgeInsets.symmetric(horizontal: 15.w), padding: EdgeInsets.symmetric(horizontal: 15.w),
margin: EdgeInsets.symmetric(horizontal: 4.w), margin: EdgeInsets.symmetric(horizontal: 4.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
borderRadius: BorderRadius.circular(42.w), borderRadius: BorderRadius.circular(42.w),
), ),
child: Row( child: Row(
@ -226,14 +229,14 @@ class _OverviewTabState extends State<OverviewTab> {
children: [ children: [
Icon( Icon(
icon, icon,
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
size: 20.sp, size: 20.sp,
), ),
5.horizontalSpace, 5.horizontalSpace,
Text( Text(
title, title,
style: TextStyle( style: TextStyle(
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
fontSize: 14.sp, fontSize: 14.sp,
), ),
), ),
@ -241,6 +244,8 @@ class _OverviewTabState extends State<OverviewTab> {
), ),
), ),
); );
},
);
} }
Widget _empty() { Widget _empty() {

21
lib/modules/meeting/views/tabs/speech_tab.dart

@ -344,9 +344,8 @@ class SpeechTab extends GetView<MeetingDetailsController> {
Get.bottomSheet( Get.bottomSheet(
const GenerateBottomSheet(), const GenerateBottomSheet(),
isScrollControlled: true, isScrollControlled: true,
backgroundColor: isDarkMode backgroundColor:
? Colors.grey[800] isDarkMode ? Colors.grey[800] : Colors.grey[100],
: Colors.grey[100],
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical( borderRadius: BorderRadius.vertical(
top: Radius.circular(12.r), top: Radius.circular(12.r),
@ -366,9 +365,8 @@ class SpeechTab extends GetView<MeetingDetailsController> {
Get.bottomSheet( Get.bottomSheet(
const GenerateBottomSheet(), const GenerateBottomSheet(),
isScrollControlled: true, isScrollControlled: true,
backgroundColor: isDarkMode backgroundColor:
? Colors.grey[800] isDarkMode ? Colors.grey[800] : Colors.grey[100],
: Colors.grey[100],
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical( borderRadius: BorderRadius.vertical(
top: Radius.circular(12.r), top: Radius.circular(12.r),
@ -387,6 +385,9 @@ class SpeechTab extends GetView<MeetingDetailsController> {
} }
Widget _button(IconData icon, String title, Function() onTap) { Widget _button(IconData icon, String title, Function() onTap) {
return Builder(
builder: (context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return GestureDetector( return GestureDetector(
onTap: onTap, onTap: onTap,
child: Container( child: Container(
@ -394,7 +395,7 @@ class SpeechTab extends GetView<MeetingDetailsController> {
padding: EdgeInsets.symmetric(horizontal: 15.w), padding: EdgeInsets.symmetric(horizontal: 15.w),
margin: EdgeInsets.symmetric(horizontal: 4.w), margin: EdgeInsets.symmetric(horizontal: 4.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
borderRadius: BorderRadius.circular(42.w), borderRadius: BorderRadius.circular(42.w),
), ),
child: Row( child: Row(
@ -402,14 +403,14 @@ class SpeechTab extends GetView<MeetingDetailsController> {
children: [ children: [
Icon( Icon(
icon, icon,
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
size: 20.sp, size: 20.sp,
), ),
5.horizontalSpace, 5.horizontalSpace,
Text( Text(
title, title,
style: TextStyle( style: TextStyle(
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
fontSize: 14.sp, fontSize: 14.sp,
), ),
), ),
@ -417,5 +418,7 @@ class SpeechTab extends GetView<MeetingDetailsController> {
), ),
), ),
); );
},
);
} }
} }

11
lib/modules/meeting/views/tabs/summary_tab.dart

@ -499,6 +499,9 @@ class _SummaryTabState extends State<SummaryTab> {
} }
Widget _button(IconData icon, String title, Function() onTap) { Widget _button(IconData icon, String title, Function() onTap) {
return Builder(
builder: (context) {
final isDarkMode = Theme.of(context).brightness == Brightness.dark;
return GestureDetector( return GestureDetector(
onTap: onTap, onTap: onTap,
child: Container( child: Container(
@ -506,7 +509,7 @@ class _SummaryTabState extends State<SummaryTab> {
padding: EdgeInsets.symmetric(horizontal: 15.w), padding: EdgeInsets.symmetric(horizontal: 15.w),
margin: EdgeInsets.symmetric(horizontal: 4.w), margin: EdgeInsets.symmetric(horizontal: 4.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black, color: isDarkMode ? Colors.white : Colors.black,
borderRadius: BorderRadius.circular(42.w), borderRadius: BorderRadius.circular(42.w),
), ),
child: Row( child: Row(
@ -514,14 +517,14 @@ class _SummaryTabState extends State<SummaryTab> {
children: [ children: [
Icon( Icon(
icon, icon,
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
size: 20.sp, size: 20.sp,
), ),
5.horizontalSpace, 5.horizontalSpace,
Text( Text(
title, title,
style: TextStyle( style: TextStyle(
color: Colors.white, color: isDarkMode ? Colors.black : Colors.white,
fontSize: 14.sp, fontSize: 14.sp,
), ),
), ),
@ -529,6 +532,8 @@ class _SummaryTabState extends State<SummaryTab> {
), ),
), ),
); );
},
);
} }
String _formatDateSeconds(int seconds) { String _formatDateSeconds(int seconds) {

Loading…
Cancel
Save