From 4ed0006b4ac9aae6f9c254bed39d1107d20a6fb3 Mon Sep 17 00:00:00 2001 From: tanlongsheng <252620078@qq.com> Date: Sun, 18 May 2025 22:45:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=BA=E5=91=98=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../meeting_details_controller.dart | 6 +- .../meeting/views/meeting_details_view.dart | 242 ++++++++---------- 2 files changed, 113 insertions(+), 135 deletions(-) diff --git a/lib/modules/meeting/controllers/meeting_details_controller.dart b/lib/modules/meeting/controllers/meeting_details_controller.dart index eb70a521d..10cf3dfc0 100644 --- a/lib/modules/meeting/controllers/meeting_details_controller.dart +++ b/lib/modules/meeting/controllers/meeting_details_controller.dart @@ -335,7 +335,9 @@ class MeetingDetailsController extends GetxController if (element['additions'].isNotEmpty) { speaker = 'Speaker ${element['additions']['speaker']}'; text += '$speaker:'; - personnel += '[$speaker] '; + if (!personnel.contains(speaker)) { + personnel += '[$speaker] '; + } } list.add({ 'meetingid': id, @@ -357,4 +359,4 @@ class MeetingDetailsController extends GetxController } allText = text; } -} \ No newline at end of file +} diff --git a/lib/modules/meeting/views/meeting_details_view.dart b/lib/modules/meeting/views/meeting_details_view.dart index 4e974e27d..d1b2ec7a5 100644 --- a/lib/modules/meeting/views/meeting_details_view.dart +++ b/lib/modules/meeting/views/meeting_details_view.dart @@ -22,139 +22,7 @@ class MeetingDetailsView extends GetView { () => Scaffold( backgroundColor: isDarkMode ? Colors.black : Colors.grey[50], appBar: _buildAppBar(isDarkMode), - body: NestedScrollView( - controller: controller.scrollController, - headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { - return [ - SliverAppBar( - automaticallyImplyLeading: false, - expandedHeight: 210.w, - backgroundColor: Colors.transparent, - flexibleSpace: FlexibleSpaceBar( - collapseMode: CollapseMode.pin, - background: Align( - alignment: Alignment.topCenter, - child: Container( - height: 200.w, - decoration: BoxDecoration( - color: Colors.grey[200]!, - borderRadius: BorderRadius.vertical( - bottom: Radius.circular(20.r), - ), - ), - child: Column( - children: [ - Container( - margin: EdgeInsets.only(bottom: 5.w), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(8.r), - ), - child: AudioFileWaveforms( - size: Size(350.w, 120.w), - playerController: controller.playerController, - playerWaveStyle: PlayerWaveStyle( - fixedWaveColor: Colors.grey[300]!, - liveWaveColor: Colors.red, - seekLineColor: Colors.red, - scaleFactor: 600, - ), - ), - ), - SizedBox( - width: 350.w, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - StreamBuilder( - stream: controller.playerController - .onCurrentDurationChanged, - builder: (context, snapshot) { - final position = snapshot.data ?? 0; - return Text( - DateUtil.formatDateMs( - position, - format: 'HH:mm:ss', - isUtc: true, - ), - style: TextStyle( - color: isDarkMode - ? Colors.grey[400] - : Colors.grey[500], - fontSize: 12.sp, - ), - ); - }, - ), - Obx( - () => Text( - DateUtil.formatDateMs( - controller.durationMax.value, - format: 'HH:mm:ss', - isUtc: true, - ), - style: TextStyle( - color: isDarkMode - ? Colors.grey[400] - : Colors.grey[500], - fontSize: 12.sp, - ), - ), - ), - ], - ), - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Icon( - Icons.replay_10, - color: Colors.black, - size: 30.w, - ), - StreamBuilder( - stream: controller - .playerController.onPlayerStateChanged, - builder: (context, snapshot) { - bool isPlay = - snapshot.data?.isPlaying ?? false; - return GestureDetector( - onTap: () { - if (isPlay) { - controller.playerController - .pausePlayer(); - } else { - controller.playerController - .startPlayer(); - } - }, - child: Icon( - isPlay - ? Icons.pause_circle - : Icons.play_circle, - color: Colors.black, - size: 48.w, - ), - ); - }, - ), - Icon( - Icons.forward_10, - color: Colors.black, - size: 30.w, - ), - ], - ), - ], - ), - ), - ), - ), - ), - ]; - }, - body: _buildBody(context, isDarkMode), - ), + body: _buildBody(context, isDarkMode), ), ); } @@ -295,6 +163,7 @@ class MeetingDetailsView extends GetView { Widget _buildBody(BuildContext context, bool isDarkMode) { return Column( children: [ + _soundWave(isDarkMode), Container( padding: EdgeInsets.symmetric(horizontal: 8.w), margin: EdgeInsets.symmetric(vertical: 10.w), @@ -328,6 +197,113 @@ class MeetingDetailsView extends GetView { ); } + Widget _soundWave(bool isDarkMode) { + return Container( + height: 200.w, + margin: EdgeInsets.only(bottom: 10.w), + decoration: BoxDecoration( + color: Colors.grey[200]!, + borderRadius: BorderRadius.vertical( + bottom: Radius.circular(20.r), + ), + ), + child: Column( + children: [ + Container( + margin: EdgeInsets.only(bottom: 5.w), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8.r), + ), + child: AudioFileWaveforms( + size: Size(350.w, 120.w), + playerController: controller.playerController, + playerWaveStyle: PlayerWaveStyle( + fixedWaveColor: Colors.grey[300]!, + liveWaveColor: Colors.red, + seekLineColor: Colors.red, + scaleFactor: 600, + ), + ), + ), + SizedBox( + width: 350.w, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + StreamBuilder( + stream: controller.playerController.onCurrentDurationChanged, + builder: (context, snapshot) { + final position = snapshot.data ?? 0; + return Text( + DateUtil.formatDateMs( + position, + format: 'HH:mm:ss', + isUtc: true, + ), + style: TextStyle( + color: isDarkMode ? Colors.grey[400] : Colors.grey[500], + fontSize: 12.sp, + ), + ); + }, + ), + Obx( + () => Text( + DateUtil.formatDateMs( + controller.durationMax.value, + format: 'HH:mm:ss', + isUtc: true, + ), + style: TextStyle( + color: isDarkMode ? Colors.grey[400] : Colors.grey[500], + fontSize: 12.sp, + ), + ), + ), + ], + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Icon( + Icons.replay_10, + color: Colors.black, + size: 30.w, + ), + StreamBuilder( + stream: controller.playerController.onPlayerStateChanged, + builder: (context, snapshot) { + bool isPlay = snapshot.data?.isPlaying ?? false; + return GestureDetector( + onTap: () { + if (isPlay) { + controller.playerController.pausePlayer(); + } else { + controller.playerController.startPlayer(); + } + }, + child: Icon( + isPlay ? Icons.pause_circle : Icons.play_circle, + color: Colors.black, + size: 48.w, + ), + ); + }, + ), + Icon( + Icons.forward_10, + color: Colors.black, + size: 30.w, + ), + ], + ), + ], + ), + ); + } + Widget _iconItem(IconData icon, String title, int index) { bool isActive = controller.currentIndex.value == index;