Browse Source

修改点击文字播放

weicu
tanlongsheng 1 year ago
parent
commit
051ea80398
  1. 7
      lib/modules/meeting/controllers/meeting_details_controller.dart
  2. 53
      lib/modules/meeting/views/meeting_details_view.dart
  3. 36
      lib/modules/meeting/views/speech_tab.dart

7
lib/modules/meeting/controllers/meeting_details_controller.dart

@ -25,7 +25,9 @@ class MeetingDetailsController extends GetxController
final PlayerController playerController = PlayerController(); final PlayerController playerController = PlayerController();
RxBool isTop = false.obs; RxBool isTop = false.obs;
RxInt durationMax = 0.obs; RxInt durationMax = 0.obs;
RxDouble dragOffset = 210.0.w.obs; RxDouble dragOffset = 210.w.obs;
RxInt currentDuration = 0.obs;
int id = 0; int id = 0;
@ -99,6 +101,9 @@ class MeetingDetailsController extends GetxController
); );
durationMax.value = await playerController.getDuration(DurationType.max); durationMax.value = await playerController.getDuration(DurationType.max);
playerController.setFinishMode(finishMode: FinishMode.pause); playerController.setFinishMode(finishMode: FinishMode.pause);
playerController.onCurrentDurationChanged.listen((int position) {
currentDuration.value = position;
});
if (meetingDetails.value.tasktype == 1) { if (meetingDetails.value.tasktype == 1) {
List speakerList = await SqfliteApi.getMeetingSpeaker(id); List speakerList = await SqfliteApi.getMeetingSpeaker(id);
textList.value = List.from(speakerList); textList.value = List.from(speakerList);

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

@ -92,9 +92,16 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
}, },
), ),
4.horizontalSpace, 4.horizontalSpace,
AudioFileWaveforms( GestureDetector(
onTap: () {
if (controller.isSpeakerText.value) return;
controller.dragOffset.value = 210.w;
controller.isTop.value = false;
},
child: AudioFileWaveforms(
size: Size(130.w, 30.w), size: Size(130.w, 30.w),
playerController: controller.playerController, playerController: controller.playerController,
enableSeekGesture: false,
playerWaveStyle: PlayerWaveStyle( playerWaveStyle: PlayerWaveStyle(
fixedWaveColor: Colors.grey[400]!, fixedWaveColor: Colors.grey[400]!,
liveWaveColor: Colors.red, liveWaveColor: Colors.red,
@ -102,6 +109,7 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
scaleFactor: 100, scaleFactor: 100,
), ),
), ),
),
], ],
), ),
), ),
@ -203,7 +211,9 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
child: Column( child: Column(
children: [ children: [
_soundWave(isDarkMode), _soundWave(isDarkMode),
Container( Obx(
() => !controller.isSpeakerText.value
? Container(
padding: EdgeInsets.symmetric(horizontal: 8.w), padding: EdgeInsets.symmetric(horizontal: 8.w),
margin: EdgeInsets.symmetric(vertical: 10.w), margin: EdgeInsets.symmetric(vertical: 10.w),
child: Obx( child: Obx(
@ -216,6 +226,8 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
], ],
), ),
), ),
)
: const SizedBox(),
), ),
], ],
), ),
@ -289,14 +301,10 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
StreamBuilder<int>( Obx(
stream: controller () => Text(
.playerController.onCurrentDurationChanged,
builder: (context, snapshot) {
final position = snapshot.data ?? 0;
return Text(
DateUtil.formatDateMs( DateUtil.formatDateMs(
position, controller.currentDuration.value,
format: 'HH:mm:ss', format: 'HH:mm:ss',
isUtc: true, isUtc: true,
), ),
@ -306,8 +314,7 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
: Colors.grey[500], : Colors.grey[500],
fontSize: 12.sp, fontSize: 12.sp,
), ),
); ),
},
), ),
Obx( Obx(
() => Text( () => Text(
@ -330,11 +337,21 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [ children: [
Icon( GestureDetector(
onTap: () {
int progress =
controller.currentDuration.value - 10000;
if (progress < 0) {
progress = 0;
}
controller.playerController.seekTo(progress);
},
child: Icon(
Icons.replay_10, Icons.replay_10,
color: Colors.black, color: Colors.black,
size: 30.w, size: 30.w,
), ),
),
StreamBuilder<PlayerState>( StreamBuilder<PlayerState>(
stream: stream:
controller.playerController.onPlayerStateChanged, controller.playerController.onPlayerStateChanged,
@ -356,11 +373,18 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
); );
}, },
), ),
Icon( GestureDetector(
onTap: () {
int progress =
controller.currentDuration.value + 10000;
controller.playerController.seekTo(progress);
},
child: Icon(
Icons.forward_10, Icons.forward_10,
color: Colors.black, color: Colors.black,
size: 30.w, size: 30.w,
), ),
),
], ],
), ),
], ],
@ -382,9 +406,6 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
onTap: () { onTap: () {
if (isActive) return; if (isActive) return;
controller.tabController.index = index; controller.tabController.index = index;
controller.isSpeakerText.value = false;
controller.editSpeakerTextId.value = 0;
controller.editSpeakerTextList = [];
}, },
child: Container( child: Container(
height: 45.w, height: 45.w,

36
lib/modules/meeting/views/speech_tab.dart

@ -151,16 +151,46 @@ class SpeechTab extends GetView<MeetingDetailsController> {
), ),
); );
} else { } else {
return Container( return Obx(() {
bool isActive = false;
int starttime = item['starttime'];
int endtime = 0;
if (index == controller.textList.length - 1) {
endtime = controller.durationMax.value;
} else {
endtime = controller.textList[index + 1]['starttime'];
}
if (controller.currentDuration.value != 0) {
if (controller.currentDuration.value >= starttime &&
controller.currentDuration.value <= endtime) {
isActive = true;
}
}
return GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
controller.playerController
.seekTo(item['starttime']);
controller.playerController.startPlayer();
},
child: Container(
width: double.infinity,
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
horizontal: 14.w, horizontal: 14.w,
vertical: 5.w, vertical: 5.w,
), ),
child: Text( child: Text(
item['content'], item['content'],
style: textStyle, style: TextStyle(
fontSize: 15.sp,
color: isActive ? Colors.red : Colors.black87,
letterSpacing: 0,
height: 1.4,
),
),
), ),
); );
});
} }
}), }),
], ],
@ -183,6 +213,8 @@ class SpeechTab extends GetView<MeetingDetailsController> {
'编辑', '编辑',
() { () {
controller.isSpeakerText.value = true; controller.isSpeakerText.value = true;
controller.dragOffset.value = 0;
controller.isTop.value = true;
}, },
), ),
if (controller.meetingDetails.value.tasktype == 1 && if (controller.meetingDetails.value.tasktype == 1 &&

Loading…
Cancel
Save