view.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import 'package:electronic_assistant/base/base_page.dart';
  2. import 'package:electronic_assistant/data/bean/talks.dart';
  3. import 'package:electronic_assistant/resource/colors.gen.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:flutter_screenutil/flutter_screenutil.dart';
  6. import 'package:get/get.dart';
  7. import '../../../data/bean/talk_original.dart';
  8. import '../common_view.dart';
  9. import 'controller.dart';
  10. class OriginalView extends BasePage<OriginalController> {
  11. const OriginalView({super.key});
  12. @override
  13. Widget buildBody(BuildContext context) {
  14. return buildOriginalContentView();
  15. }
  16. Widget buildOriginalContentView() {
  17. return Obx(() {
  18. if (controller.originalList.isEmpty &&
  19. controller.talkController.talkBean.value?.status.value ==
  20. TalkStatus.analysisFail) {
  21. return getTalkFailView();
  22. } else if (controller.originalList.isEmpty) {
  23. return getTalkLoadingView();
  24. } else {
  25. return ListView.builder(
  26. padding: EdgeInsets.only(bottom: 150.h),
  27. itemBuilder: _buildOriginalItem,
  28. itemCount: controller.originalList.length,
  29. );
  30. }
  31. });
  32. }
  33. Widget _buildOriginalItem(BuildContext context, int index) {
  34. TalkOriginal item = controller.originalList[index];
  35. return Padding(
  36. padding:
  37. EdgeInsets.only(left: 12.w, right: 12.w, top: 11.h, bottom: 13.h),
  38. child: Column(
  39. crossAxisAlignment: CrossAxisAlignment.start,
  40. children: [
  41. Row(
  42. children: [
  43. Container(
  44. decoration: const BoxDecoration(
  45. color: ColorName.colorPrimary,
  46. shape: BoxShape.circle,
  47. ),
  48. width: 20.w,
  49. height: 20.w,
  50. child: Center(
  51. child: Text(
  52. item.speakerId.toString(),
  53. style: TextStyle(fontSize: 12.sp, color: Colors.white),
  54. ),
  55. ),
  56. ),
  57. SizedBox(width: 6.w),
  58. Text(item.speaker.toString(),
  59. style: TextStyle(
  60. fontSize: 14.sp, color: ColorName.secondaryTextColor)),
  61. SizedBox(width: 4.w),
  62. Text(formatMilliseconds(item.startMs),
  63. style: TextStyle(
  64. fontSize: 12.sp, color: ColorName.tertiaryTextColor)),
  65. ],
  66. ),
  67. SizedBox(height: 12.h),
  68. Text(item.sentence.toString(),
  69. style: TextStyle(
  70. fontSize: 14.sp, color: ColorName.primaryTextColor)),
  71. ],
  72. ),
  73. );
  74. }
  75. String formatMilliseconds(int? totalMilliseconds) {
  76. if (totalMilliseconds == null) {
  77. return '';
  78. }
  79. int totalSeconds = (totalMilliseconds / 1000).round();
  80. int hours = totalSeconds ~/ 3600;
  81. int minutes = (totalSeconds % 3600) ~/ 60;
  82. int seconds = totalSeconds % 60;
  83. if (hours > 0) {
  84. return '${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}';
  85. } else {
  86. return '${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}';
  87. }
  88. }
  89. }