From 913a22590b06ec85308f674f017b353aea40bb8d Mon Sep 17 00:00:00 2001 From: tanlongsheng <252620078@qq.com> Date: Wed, 19 Nov 2025 16:14:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=BE=E5=A4=87=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/eq_settings_controller.dart | 45 ++++++++++- .../views/widgets/row_equalizer_widget.dart | 76 +++++++++++++++++++ .../widgets/select_equalizer_widget.dart | 58 ++++++++++++++ 3 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 lib/modules/eq_settings/views/widgets/row_equalizer_widget.dart create mode 100644 lib/modules/eq_settings/views/widgets/select_equalizer_widget.dart diff --git a/lib/modules/eq_settings/controllers/eq_settings_controller.dart b/lib/modules/eq_settings/controllers/eq_settings_controller.dart index 7709ff5d1..003a0c23b 100644 --- a/lib/modules/eq_settings/controllers/eq_settings_controller.dart +++ b/lib/modules/eq_settings/controllers/eq_settings_controller.dart @@ -4,6 +4,7 @@ import 'package:get/get.dart'; import '../../../core/utils/logger.dart'; import '../../../routes/app_routes.dart'; import '../views/widgets/row_confirm_widget.dart'; +import '../views/widgets/row_equalizer_widget.dart'; import '../views/widgets/row_grade_widget.dart'; import '../views/widgets/row_input_widget.dart'; import '../views/widgets/row_keypress_widget.dart'; @@ -15,7 +16,48 @@ class EqSettingsController extends GetxController { final RxList uiList = [ { 'title': '音效', - 'templates': [], + 'templates': [ + { + 'type': 'equalizer', + 'name': '均衡器', + 'value': [], + 'options': [ + { + 'label': '默认', + 'value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + 'default': true, + }, + { + 'label': '流行', + 'value': [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], + 'default': true, + }, + { + 'label': '摇滚', + 'value': [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], + 'default': true, + }, + { + 'label': '爵士', + 'value': [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], + 'default': true, + }, + { + 'label': '经典', + 'value': [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], + 'default': true, + }, + { + 'label': '乡村', + 'value': [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], + 'default': true, + }, + ], + 'onCallback': (List value) { + Logger.d('equalizer', '均衡器:$value'); + }, + } + ], }, { 'title': '按键功能', @@ -135,6 +177,7 @@ class EqSettingsController extends GetxController { Widget getTemplate(Map data) { return switch (data['type']) { + 'equalizer' => RowEqualizerWidget(data), 'keypress' => RowKeypressWidget(data), 'input' => RowInputWidget(data), 'radio' => RowRadioWidget(data), diff --git a/lib/modules/eq_settings/views/widgets/row_equalizer_widget.dart b/lib/modules/eq_settings/views/widgets/row_equalizer_widget.dart new file mode 100644 index 000000000..bdeb652ed --- /dev/null +++ b/lib/modules/eq_settings/views/widgets/row_equalizer_widget.dart @@ -0,0 +1,76 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import 'select_equalizer_widget.dart'; + +class RowEqualizerWidget extends StatefulWidget { + final Map templateData; + + const RowEqualizerWidget(this.templateData, {super.key}); + + @override + State createState() => _RowEqualizerWidgetState(); +} + +class _RowEqualizerWidgetState extends State { + Map get _templateData => widget.templateData; + + String _label = ''; + + @override + void initState() { + super.initState(); + _label = _templateData['options'].firstWhere( + (option) => option['value'] == _templateData['value'], + orElse: () => {'label': ''}, + )['label']; + } + + @override + Widget build(BuildContext context) { + final isDarkMode = Theme.of(context).brightness == Brightness.dark; + + return GestureDetector( + onTap: () async { + var result = await Get.to(() => SelectEqualizerWidget(_templateData)); + if (result != null) { + setState(() { + _label = result['label']; + }); + _templateData['value'] = result['value']; + _templateData['onCallback'](result['value']); + } + }, + behavior: HitTestBehavior.translucent, + child: Padding( + padding: EdgeInsets.fromLTRB(10.w, 10.w, 0, 10.w), + child: Row( + children: [ + Expanded( + child: Text( + _templateData['name'], + style: TextStyle( + fontSize: 14.sp, + color: isDarkMode ? Colors.white : Colors.black, + ), + ), + ), + Text( + _label, + style: TextStyle( + fontSize: 12.sp, + color: isDarkMode ? Colors.white : Colors.grey, + ), + ), + Icon( + Icons.chevron_right, + size: 26.w, + color: Colors.blue, + ), + ], + ), + ), + ); + } +} diff --git a/lib/modules/eq_settings/views/widgets/select_equalizer_widget.dart b/lib/modules/eq_settings/views/widgets/select_equalizer_widget.dart new file mode 100644 index 000000000..c9c364d62 --- /dev/null +++ b/lib/modules/eq_settings/views/widgets/select_equalizer_widget.dart @@ -0,0 +1,58 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +class SelectEqualizerWidget extends StatefulWidget { + final Map templateData; + + const SelectEqualizerWidget(this.templateData, {super.key}); + + @override + State createState() => _SelectEqualizerWidgetState(); +} + +class _SelectEqualizerWidgetState extends State { + Map get _templateData => widget.templateData; + + @override + Widget build(BuildContext context) { + final isDarkMode = Theme.of(context).brightness == Brightness.dark; + + return Scaffold( + backgroundColor: isDarkMode ? Colors.black : Colors.grey[50], + appBar: _buildAppBar(isDarkMode), + body: _buildBody(isDarkMode), + ); + } + + // 构建应用栏 + PreferredSizeWidget _buildAppBar(bool isDarkMode) { + return AppBar( + backgroundColor: isDarkMode ? Colors.black : Colors.white, + surfaceTintColor: Colors.transparent, + elevation: 0.5, + leading: IconButton( + icon: Icon( + Icons.arrow_back_ios, + color: isDarkMode ? Colors.white : Colors.black, + size: 20.sp, + ), + onPressed: () => Get.back(), + ), + title: Text( + _templateData['name'], + style: TextStyle( + fontSize: 17.sp, + fontWeight: FontWeight.w600, + color: isDarkMode ? Colors.white : Colors.black, + ), + ), + centerTitle: true, + ); + } + + // 构建主体内容 + Widget _buildBody(bool isDarkMode) { + return Container(); + } +}