Browse Source

修改思维导图

newdev_shunjiawei
tanlongsheng 1 year ago
parent
commit
2dccfb7bb3
  1. 31
      lib/modules/meeting/controllers/meeting_details_controller.dart
  2. 75
      lib/modules/meeting/views/meeting_details_view.dart
  3. 3
      lib/modules/meeting/views/mind_map_tab.dart

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

@ -4,6 +4,7 @@ import 'dart:convert';
import 'package:audio_waveforms/audio_waveforms.dart'; import 'package:audio_waveforms/audio_waveforms.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart'; import 'package:get_storage/get_storage.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
@ -18,13 +19,13 @@ import '../model/meeting_model.dart';
class MeetingDetailsController extends GetxController class MeetingDetailsController extends GetxController
with GetSingleTickerProviderStateMixin { with GetSingleTickerProviderStateMixin {
late ScrollController scrollController;
late TabController tabController; late TabController tabController;
final RxInt currentIndex = 0.obs; final RxInt currentIndex = 0.obs;
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 = 200.0.w.obs;
int id = 0; int id = 0;
@ -52,8 +53,6 @@ class MeetingDetailsController extends GetxController
@override @override
void onInit() { void onInit() {
super.onInit(); super.onInit();
scrollController = ScrollController(initialScrollOffset: 0.0);
scrollController.addListener(_onScroll);
tabController = TabController(length: 4, vsync: this); tabController = TabController(length: 4, vsync: this);
tabController.addListener(() { tabController.addListener(() {
currentIndex.value = tabController.index; currentIndex.value = tabController.index;
@ -70,38 +69,12 @@ class MeetingDetailsController extends GetxController
@override @override
void onClose() { void onClose() {
scrollController.dispose();
tabController.dispose(); tabController.dispose();
playerController.dispose(); playerController.dispose();
_isDisposed = true; _isDisposed = true;
super.onClose(); super.onClose();
} }
void _onScroll() async {
double pixels = scrollController.position.pixels;
double maxScrollExtent = scrollController.position.maxScrollExtent;
if (!isTop.value && pixels > 5) {
await scrollController.animateTo(
maxScrollExtent,
duration: const Duration(milliseconds: 100),
curve: Curves.easeOut,
);
if (pixels > maxScrollExtent - 2) {
isTop.value = true;
}
}
if (isTop.value && pixels < maxScrollExtent - 5) {
await scrollController.animateTo(
0,
duration: const Duration(milliseconds: 100),
curve: Curves.easeOut,
);
if (pixels < 2) {
isTop.value = false;
}
}
}
void _getAgent() async { void _getAgent() async {
final GetStorage storage = GetStorage(); final GetStorage storage = GetStorage();
Map userInfo = storage.read("user_info"); Map userInfo = storage.read("user_info");

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

@ -161,7 +161,46 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
// 构建主体内容 // 构建主体内容
Widget _buildBody(BuildContext context, bool isDarkMode) { Widget _buildBody(BuildContext context, bool isDarkMode) {
double initialPosition = 0;
return Column( return Column(
children: [
GestureDetector(
behavior: HitTestBehavior.translucent,
onVerticalDragStart: (DragStartDetails dragStartDetails) {
initialPosition = dragStartDetails.localPosition.dy;
},
onVerticalDragUpdate: (DragUpdateDetails dragUpdateDetails) {
controller.dragOffset.value += dragUpdateDetails.delta.dy;
},
onVerticalDragEnd: (DragEndDetails dragEndDetails) {
double offset = initialPosition - dragEndDetails.localPosition.dy;
if (offset > 0) {
if (controller.isTop.value) {
controller.dragOffset.value = 0;
return;
}
if (offset > 60) {
controller.dragOffset.value = 0;
controller.isTop.value = true;
} else {
controller.dragOffset.value = 200.w;
controller.isTop.value = false;
}
} else {
if (!controller.isTop.value) {
controller.dragOffset.value = 200.w;
return;
}
if (offset < -60) {
controller.dragOffset.value = 200.w;
controller.isTop.value = false;
} else {
controller.dragOffset.value = 0;
controller.isTop.value = true;
}
}
},
child: Column(
children: [ children: [
_soundWave(isDarkMode), _soundWave(isDarkMode),
Container( Container(
@ -178,6 +217,9 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
), ),
), ),
), ),
],
),
),
Expanded( Expanded(
child: Padding( child: Padding(
padding: EdgeInsets.symmetric(horizontal: 12.w), padding: EdgeInsets.symmetric(horizontal: 12.w),
@ -198,7 +240,19 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
} }
Widget _soundWave(bool isDarkMode) { Widget _soundWave(bool isDarkMode) {
return Container( return Obx(
() => SizedBox(
height: controller.dragOffset.value < 0
? 0
: controller.dragOffset.value > 200.w
? 200.w
: controller.dragOffset.value,
child: Stack(
children: [
Positioned(
bottom: 0,
child: Container(
width: 1.sw,
height: 200.w, height: 200.w,
margin: EdgeInsets.only(bottom: 10.w), margin: EdgeInsets.only(bottom: 10.w),
decoration: BoxDecoration( decoration: BoxDecoration(
@ -232,7 +286,8 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
StreamBuilder<int>( StreamBuilder<int>(
stream: controller.playerController.onCurrentDurationChanged, stream: controller
.playerController.onCurrentDurationChanged,
builder: (context, snapshot) { builder: (context, snapshot) {
final position = snapshot.data ?? 0; final position = snapshot.data ?? 0;
return Text( return Text(
@ -242,7 +297,9 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
isUtc: true, isUtc: true,
), ),
style: TextStyle( style: TextStyle(
color: isDarkMode ? Colors.grey[400] : Colors.grey[500], color: isDarkMode
? Colors.grey[400]
: Colors.grey[500],
fontSize: 12.sp, fontSize: 12.sp,
), ),
); );
@ -256,7 +313,9 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
isUtc: true, isUtc: true,
), ),
style: TextStyle( style: TextStyle(
color: isDarkMode ? Colors.grey[400] : Colors.grey[500], color: isDarkMode
? Colors.grey[400]
: Colors.grey[500],
fontSize: 12.sp, fontSize: 12.sp,
), ),
), ),
@ -273,7 +332,8 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
size: 30.w, size: 30.w,
), ),
StreamBuilder<PlayerState>( StreamBuilder<PlayerState>(
stream: controller.playerController.onPlayerStateChanged, stream:
controller.playerController.onPlayerStateChanged,
builder: (context, snapshot) { builder: (context, snapshot) {
bool isPlay = snapshot.data?.isPlaying ?? false; bool isPlay = snapshot.data?.isPlaying ?? false;
return GestureDetector( return GestureDetector(
@ -301,6 +361,11 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
), ),
], ],
), ),
),
),
],
),
),
); );
} }

3
lib/modules/meeting/views/mind_map_tab.dart

@ -41,12 +41,14 @@ class _MindMapTabState extends State<MindMapTab> {
height: 100%; height: 100%;
margin: 0; margin: 0;
padding: 0; padding: 0;
overflow: hidden;
} }
.markmap { .markmap {
width: 100%; width: 100%;
height: 100%; height: 100%;
position: relative; position: relative;
overflow: hidden;
} }
.markmap>svg { .markmap>svg {
@ -76,6 +78,7 @@ class _MindMapTabState extends State<MindMapTab> {
markmap: markmap:
maxWidth: 300 maxWidth: 300
colorFreezeLevel: 2 colorFreezeLevel: 2
initialExpandLevel: 3
--- ---
${_meetingDetailsController.meetingDetails.value.summary} ${_meetingDetailsController.meetingDetails.value.summary}
</script> </script>

Loading…
Cancel
Save