From d5c60332f87439c35374b33a9c621a9dc0f7d114 Mon Sep 17 00:00:00 2001 From: tanlongsheng <252620078@qq.com> Date: Mon, 14 Jul 2025 11:13:42 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BA=95=E9=83=A8?= =?UTF-8?q?=E5=AF=BC=E8=88=AA=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../meeting/bindings/meeting_binding.dart | 2 + .../controllers/meeting_controller.dart | 22 +++++ .../meeting/views/meeting_home_view.dart | 2 +- lib/modules/meeting/views/meeting_view.dart | 88 +++++++++++++++++++ lib/routes/app_pages.dart | 4 +- 5 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 lib/modules/meeting/controllers/meeting_controller.dart create mode 100644 lib/modules/meeting/views/meeting_view.dart diff --git a/lib/modules/meeting/bindings/meeting_binding.dart b/lib/modules/meeting/bindings/meeting_binding.dart index 85d730e73..e555c1194 100644 --- a/lib/modules/meeting/bindings/meeting_binding.dart +++ b/lib/modules/meeting/bindings/meeting_binding.dart @@ -1,4 +1,5 @@ import 'package:get/get.dart'; +import '../controllers/meeting_controller.dart'; import '../controllers/meeting_home_controller.dart'; import '../controllers/meeting_mine_controller.dart'; @@ -6,6 +7,7 @@ class MeetingBinding extends Bindings { @override void dependencies() { // 注册控制器 + Get.lazyPut(() => MeetingController()); Get.lazyPut(() => MeetingHomeController()); Get.lazyPut(() => MeetingMineController()); } diff --git a/lib/modules/meeting/controllers/meeting_controller.dart b/lib/modules/meeting/controllers/meeting_controller.dart new file mode 100644 index 000000000..39c3856fe --- /dev/null +++ b/lib/modules/meeting/controllers/meeting_controller.dart @@ -0,0 +1,22 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import '../views/meeting_home_view.dart'; +import '../views/meeting_mine_view.dart'; + +class MeetingController extends GetxController { + late PageController pageController; + + final List pageList = [ + const MeetingHomeView(), + const MeetingMineView(), + ]; + + RxInt pageIndex = 0.obs; + + @override + void onInit() { + super.onInit(); + pageController = PageController(initialPage: 0); + } +} diff --git a/lib/modules/meeting/views/meeting_home_view.dart b/lib/modules/meeting/views/meeting_home_view.dart index 2884251a4..1c0eb5645 100644 --- a/lib/modules/meeting/views/meeting_home_view.dart +++ b/lib/modules/meeting/views/meeting_home_view.dart @@ -24,7 +24,7 @@ class MeetingHomeView extends GetView { onPopInvokedWithResult: controller.onPopInvokedWithResult, child: Scaffold( key: scaffoldKey, - backgroundColor: isDarkMode ? Colors.black : Colors.grey[50], + backgroundColor: isDarkMode ? Colors.black : Colors.grey[100], appBar: _buildAppBar(isDarkMode), drawer: Drawer( width: 260.w, diff --git a/lib/modules/meeting/views/meeting_view.dart b/lib/modules/meeting/views/meeting_view.dart new file mode 100644 index 000000000..b71be602e --- /dev/null +++ b/lib/modules/meeting/views/meeting_view.dart @@ -0,0 +1,88 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../controllers/meeting_controller.dart'; + +class MeetingView extends GetView { + const MeetingView({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: PageView( + physics: const NeverScrollableScrollPhysics(), + controller: controller.pageController, + children: controller.pageList, + ), + bottomNavigationBar: Stack( + alignment: Alignment.center, + clipBehavior: Clip.none, + children: [ + Obx( + () => BottomNavigationBar( + items: const [ + BottomNavigationBarItem( + icon: Icon(Icons.folder_outlined), + activeIcon: Icon(Icons.folder), + label: '文件', + ), + BottomNavigationBarItem( + icon: SizedBox(), + activeIcon: SizedBox(), + label: '', + ), + BottomNavigationBarItem( + icon: Icon(Icons.person_outline), + activeIcon: Icon(Icons.person), + label: '我的', + ), + ], + backgroundColor: Colors.white, + currentIndex: controller.pageIndex.value, + unselectedItemColor: Colors.grey, + selectedItemColor: Colors.red, + unselectedFontSize: 10.sp, + selectedFontSize: 10.sp, + onTap: (int index) { + if (index == controller.pageIndex.value) return; + if (index == 0) { + controller.pageIndex.value = 0; + controller.pageController.jumpToPage(0); + } else { + controller.pageIndex.value = 2; + controller.pageController.jumpToPage(1); + } + }, + ), + ), + Positioned( + top: -18.w, + child: Container( + width: 60.w, + height: 60.w, + padding: EdgeInsets.all(5.w), + alignment: Alignment.center, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(60.w), + ), + child: Container( + alignment: Alignment.center, + decoration: BoxDecoration( + color: Colors.red, + borderRadius: BorderRadius.circular(60.w), + ), + child: Icon( + Icons.add, + color: Colors.white, + size: 30.w, + ), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index ccdc2e541..88f7f07c6 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -14,7 +14,7 @@ import '../modules/meeting/views/meeting_connect_view.dart'; import '../modules/meeting/views/meeting_details_view.dart'; import '../modules/meeting/bindings/meeting_record_binding.dart'; import '../modules/meeting/views/meeting_record_view.dart'; -import '../modules/meeting/views/meeting_home_view.dart'; +import '../modules/meeting/views/meeting_view.dart'; import '../modules/opus_test/bindings/opus_test_binding.dart'; import '../modules/opus_test/views/opus_test_view.dart'; import '../modules/profile/views/profile_view.dart'; @@ -149,7 +149,7 @@ abstract class AppPages { ), GetPage( name: Routes.meeting, - page: () => const MeetingHomeView(), + page: () => const MeetingView(), binding: MeetingBinding(), transition: Transition.rightToLeft, transitionDuration: Duration(milliseconds: 250), From 01ad1d4323c3084c6d7a8713bd8d71e66bad29e1 Mon Sep 17 00:00:00 2001 From: tanlongsheng <252620078@qq.com> Date: Mon, 14 Jul 2025 12:39:06 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BE=A7=E8=BE=B9?= =?UTF-8?q?=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/meeting_controller.dart | 2 + .../controllers/meeting_home_controller.dart | 2 + .../views/bottomSheet/filtrate_drawer.dart | 61 ++++++++++--------- .../meeting/views/meeting_home_view.dart | 15 +---- lib/modules/meeting/views/meeting_view.dart | 8 +++ 5 files changed, 47 insertions(+), 41 deletions(-) diff --git a/lib/modules/meeting/controllers/meeting_controller.dart b/lib/modules/meeting/controllers/meeting_controller.dart index 39c3856fe..a865d5362 100644 --- a/lib/modules/meeting/controllers/meeting_controller.dart +++ b/lib/modules/meeting/controllers/meeting_controller.dart @@ -5,6 +5,8 @@ import '../views/meeting_home_view.dart'; import '../views/meeting_mine_view.dart'; class MeetingController extends GetxController { + final GlobalKey scaffoldKey = GlobalKey(); + late PageController pageController; final List pageList = [ diff --git a/lib/modules/meeting/controllers/meeting_home_controller.dart b/lib/modules/meeting/controllers/meeting_home_controller.dart index b08d73b63..cb91fdde9 100644 --- a/lib/modules/meeting/controllers/meeting_home_controller.dart +++ b/lib/modules/meeting/controllers/meeting_home_controller.dart @@ -20,8 +20,10 @@ import 'package:share_plus/share_plus.dart'; import '../../../data/services/meeting/meeting_task_service.dart'; import '../../../data/services/meeting/meeting_upload_service.dart'; import '../../../routes/app_routes.dart'; +import 'meeting_controller.dart'; class MeetingHomeController extends GetxController { + final meetingController = Get.find(); final meetingUploadService = Get.find(); final meetingTaskService = Get.find(); diff --git a/lib/modules/meeting/views/bottomSheet/filtrate_drawer.dart b/lib/modules/meeting/views/bottomSheet/filtrate_drawer.dart index c7b856dea..5a988ec5d 100644 --- a/lib/modules/meeting/views/bottomSheet/filtrate_drawer.dart +++ b/lib/modules/meeting/views/bottomSheet/filtrate_drawer.dart @@ -2,19 +2,19 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import '../../controllers/meeting_controller.dart'; import '../../controllers/meeting_home_controller.dart'; class FiltrateDrawer extends StatefulWidget { - final GlobalKey scaffoldKey; - - const FiltrateDrawer(this.scaffoldKey, {super.key}); + const FiltrateDrawer({super.key}); @override State createState() => _FiltrateDrawerState(); } class _FiltrateDrawerState extends State { - final _controller = Get.find(); + final _controller = Get.find(); + final _homeController = Get.find(); @override Widget build(BuildContext context) { @@ -41,7 +41,7 @@ class _FiltrateDrawerState extends State { ), Expanded( child: TextField( - controller: _controller.filtrateController, + controller: _homeController.filtrateController, style: TextStyle( color: Colors.black87, fontSize: 14.sp, @@ -58,21 +58,21 @@ class _FiltrateDrawerState extends State { contentPadding: EdgeInsets.symmetric(vertical: 10.w), ), onSubmitted: (String value) { - widget.scaffoldKey.currentState?.closeDrawer(); - _controller.dataList.value = - _controller.originalDataList.where((i) { + _controller.scaffoldKey.currentState?.closeDrawer(); + _homeController.dataList.value = + _homeController.originalDataList.where((i) { final titleLower = i['title'].trim().toLowerCase(); final queryLower = value.trim().toLowerCase(); bool isType = true; - if (_controller.filtrateType.value.isNotEmpty) { + if (_homeController.filtrateType.value.isNotEmpty) { isType = - _controller.filtrateType.value == i['type']; + _homeController.filtrateType.value == i['type']; } return isType && titleLower.contains(queryLower); }).toList(); - if (_controller.isAsc) { - _controller.dataList.value = - _controller.dataList.reversed.toList(); + if (_homeController.isAsc) { + _homeController.dataList.value = + _homeController.dataList.reversed.toList(); } }, ), @@ -87,7 +87,7 @@ class _FiltrateDrawerState extends State { behavior: HitTestBehavior.translucent, child: Container( padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.w), - decoration: _controller.filtrateType.value == '' + decoration: _homeController.filtrateType.value == '' ? BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12.w), @@ -109,7 +109,7 @@ class _FiltrateDrawerState extends State { ), 6.horizontalSpace, Text( - '全部文件(${_controller.originalDataList.length})', + '全部文件(${_homeController.originalDataList.length})', style: TextStyle( color: Colors.black87, fontSize: 14.sp, @@ -148,7 +148,7 @@ class _FiltrateDrawerState extends State { padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.w), margin: EdgeInsets.symmetric(vertical: 2.w), - decoration: _controller.filtrateType.value == name + decoration: _homeController.filtrateType.value == name ? BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12.w), @@ -184,10 +184,10 @@ class _FiltrateDrawerState extends State { ), GestureDetector( onTap: () { - widget.scaffoldKey.currentState?.closeDrawer(); - _controller.isAsc = !_controller.isAsc; - _controller.dataList.value = - _controller.dataList.reversed.toList(); + _controller.scaffoldKey.currentState?.closeDrawer(); + _homeController.isAsc = !_homeController.isAsc; + _homeController.dataList.value = + _homeController.dataList.reversed.toList(); }, behavior: HitTestBehavior.translucent, child: Container( @@ -204,7 +204,7 @@ class _FiltrateDrawerState extends State { ), ), Icon( - _controller.isAsc + _homeController.isAsc ? Icons.keyboard_double_arrow_up : Icons.keyboard_double_arrow_down, color: Colors.grey, @@ -221,17 +221,20 @@ class _FiltrateDrawerState extends State { } void _filtrateDataList(String type) { - widget.scaffoldKey.currentState?.closeDrawer(); - _controller.filtrateType.value = type; - _controller.filtrateController.text = ''; + _controller.scaffoldKey.currentState?.closeDrawer(); + _homeController.filtrateType.value = type; + _homeController.filtrateController.text = ''; if (type.isNotEmpty) { - _controller.dataList.value = - _controller.originalDataList.where((i) => i['type'] == type).toList(); + _homeController.dataList.value = _homeController.originalDataList + .where((i) => i['type'] == type) + .toList(); } else { - _controller.dataList.value = List.from(_controller.originalDataList); + _homeController.dataList.value = + List.from(_homeController.originalDataList); } - if (_controller.isAsc) { - _controller.dataList.value = _controller.dataList.reversed.toList(); + if (_homeController.isAsc) { + _homeController.dataList.value = + _homeController.dataList.reversed.toList(); } } } diff --git a/lib/modules/meeting/views/meeting_home_view.dart b/lib/modules/meeting/views/meeting_home_view.dart index 1c0eb5645..2d79397e5 100644 --- a/lib/modules/meeting/views/meeting_home_view.dart +++ b/lib/modules/meeting/views/meeting_home_view.dart @@ -9,7 +9,6 @@ import '../../../routes/app_routes.dart'; import '../controllers/meeting_home_controller.dart'; import '../model/meeting_model.dart'; import 'bottomSheet/edit_title_bottom_sheet.dart'; -import 'bottomSheet/filtrate_drawer.dart'; import 'bottomSheet/import_audio_bottom_sheet.dart'; class MeetingHomeView extends GetView { @@ -17,28 +16,20 @@ class MeetingHomeView extends GetView { @override Widget build(BuildContext context) { - final GlobalKey scaffoldKey = GlobalKey(); final isDarkMode = Theme.of(context).brightness == Brightness.dark; return PopScope( onPopInvokedWithResult: controller.onPopInvokedWithResult, child: Scaffold( - key: scaffoldKey, backgroundColor: isDarkMode ? Colors.black : Colors.grey[100], appBar: _buildAppBar(isDarkMode), - drawer: Drawer( - width: 260.w, - backgroundColor: Colors.grey[50], - child: FiltrateDrawer(scaffoldKey), - ), - drawerEnableOpenDragGesture: false, body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - _buildFiltrate(scaffoldKey, isDarkMode), + _buildFiltrate(isDarkMode), _buildConnect(isDarkMode), ], ), @@ -67,10 +58,10 @@ class MeetingHomeView extends GetView { ); } - Widget _buildFiltrate(GlobalKey scaffoldKey, bool isDarkMode) { + Widget _buildFiltrate(bool isDarkMode) { return GestureDetector( onTap: () { - scaffoldKey.currentState?.openDrawer(); + controller.meetingController.scaffoldKey.currentState?.openDrawer(); }, behavior: HitTestBehavior.translucent, child: Row( diff --git a/lib/modules/meeting/views/meeting_view.dart b/lib/modules/meeting/views/meeting_view.dart index b71be602e..c080614b2 100644 --- a/lib/modules/meeting/views/meeting_view.dart +++ b/lib/modules/meeting/views/meeting_view.dart @@ -3,6 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import '../controllers/meeting_controller.dart'; +import 'bottomSheet/filtrate_drawer.dart'; class MeetingView extends GetView { const MeetingView({super.key}); @@ -10,11 +11,18 @@ class MeetingView extends GetView { @override Widget build(BuildContext context) { return Scaffold( + key: controller.scaffoldKey, body: PageView( physics: const NeverScrollableScrollPhysics(), controller: controller.pageController, children: controller.pageList, ), + drawer: Drawer( + width: 260.w, + backgroundColor: Colors.grey[50], + child: const FiltrateDrawer(), + ), + drawerEnableOpenDragGesture: false, bottomNavigationBar: Stack( alignment: Alignment.center, clipBehavior: Clip.none,