5 changed files with 241 additions and 12 deletions
@ -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(); |
|||
} |
|||
} |
|||
@ -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…
Reference in new issue