diff --git a/lib/common/widgets/custom_toast.dart b/lib/common/widgets/custom_toast.dart index e8ffe23d..64cf0da2 100644 --- a/lib/common/widgets/custom_toast.dart +++ b/lib/common/widgets/custom_toast.dart @@ -11,7 +11,7 @@ class CustomToast extends StatelessWidget { @override Widget build(BuildContext context) { double toastOpacity = - setting.get(SettingBoxKey.defaultToastOp, defaultValue: 0.8); + setting.get(SettingBoxKey.defaultToastOp, defaultValue: 1.0); return Container( margin: EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom + 30), diff --git a/lib/pages/setting/controller.dart b/lib/pages/setting/controller.dart index 0c3b442f..70df6825 100644 --- a/lib/pages/setting/controller.dart +++ b/lib/pages/setting/controller.dart @@ -28,7 +28,7 @@ class SettingController extends GetxController { feedBackEnable.value = setting.get(SettingBoxKey.feedBackEnable, defaultValue: false); toastOpacity.value = - setting.get(SettingBoxKey.defaultToastOp, defaultValue: 0.8); + setting.get(SettingBoxKey.defaultToastOp, defaultValue: 1.0); picQuality.value = setting.get(SettingBoxKey.defaultPicQa, defaultValue: 10); themeType.value = ThemeType.values[setting.get(SettingBoxKey.themeMode, diff --git a/lib/pages/setting/style_setting.dart b/lib/pages/setting/style_setting.dart index a4cc6ac5..23784fac 100644 --- a/lib/pages/setting/style_setting.dart +++ b/lib/pages/setting/style_setting.dart @@ -6,6 +6,7 @@ import 'package:hive/hive.dart'; import 'package:pilipala/models/common/theme_type.dart'; import 'package:pilipala/pages/setting/pages/color_select.dart'; import 'package:pilipala/pages/setting/widgets/select_dialog.dart'; +import 'package:pilipala/pages/setting/widgets/slide_dialog.dart'; import 'package:pilipala/utils/storage.dart'; import 'controller.dart'; @@ -32,7 +33,7 @@ class _StyleSettingState extends State { void initState() { super.initState(); picQuality = setting.get(SettingBoxKey.defaultPicQa, defaultValue: 10); - toastOpacity = setting.get(SettingBoxKey.defaultToastOp, defaultValue: 0.8); + toastOpacity = setting.get(SettingBoxKey.defaultToastOp, defaultValue: 1.0); _tempThemeValue = settingController.themeType.value; defaultCustomRows = setting.get(SettingBoxKey.customRows, defaultValue: 2); } @@ -193,56 +194,23 @@ class _StyleSettingState extends State { ), ListTile( dense: false, - onTap: () { - showDialog( + onTap: () async { + double? result = await showDialog( context: context, builder: (context) { - return StatefulBuilder( - builder: (context, StateSetter setState) { - final SettingController settingController = - Get.put(SettingController()); - return AlertDialog( - title: const Text('Toast不透明度'), - contentPadding: const EdgeInsets.only( - top: 20, left: 8, right: 8, bottom: 8), - content: SizedBox( - height: 40, - child: Slider( - value: toastOpacity, - min: 0.0, - max: 1.0, - divisions: 10, - label: '$toastOpacity%', - onChanged: (double val) { - toastOpacity = val; - setState(() {}); - }, - ), - ), - actions: [ - TextButton( - onPressed: () => Get.back(), - child: Text('取消', - style: TextStyle( - color: Theme.of(context) - .colorScheme - .outline))), - TextButton( - onPressed: () { - setting.put( - SettingBoxKey.defaultToastOp, toastOpacity); - Get.back(); - settingController.toastOpacity.value = - toastOpacity; - }, - child: const Text('确定'), - ) - ], - ); - }, - ); + return SlideDialog( + title: 'Toast透明度', + value: toastOpacity, + min: 0.0, + max: 1.0, + divisions: 10); }, ); + if (result != null) { + toastOpacity = result; + setting.put(SettingBoxKey.defaultToastOp, result); + setState(() {}); + } }, title: Text('Toast不透明度', style: titleStyle), subtitle: Text('自定义Toast不透明度', style: subTitleStyle), diff --git a/lib/pages/setting/widgets/slide_dialog.dart b/lib/pages/setting/widgets/slide_dialog.dart new file mode 100644 index 00000000..618f7c51 --- /dev/null +++ b/lib/pages/setting/widgets/slide_dialog.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; +// import 'package:pilipala/models/common/theme_type.dart'; + +class SlideDialog extends StatefulWidget { + final T value; + final String title; + final double min; + final double max; + final int divisions; + final String? suffix; + const SlideDialog({ + super.key, + required this.value, + required this.min, + required this.max, + required this.divisions, + required this.title, + this.suffix, + }); + + @override + _SlideDialogState createState() => _SlideDialogState(); +} + +class _SlideDialogState extends State> { + late T _tempValue; + + @override + void initState() { + super.initState(); + _tempValue = widget.value; + } + + @override + Widget build(BuildContext context) { + return AlertDialog( + title: Text(widget.title), + contentPadding: + const EdgeInsets.only(top: 20, left: 8, right: 8, bottom: 8), + content: SizedBox( + height: 40, + child: Slider( + value: widget.value.toDouble(), + min: widget.min, + max: widget.max, + divisions: widget.divisions, + label: '${widget.value}${widget.suffix}', + onChanged: (double value) { + print(value); + setState(() { + _tempValue = value as T; + }); + }, + ), + ), + actions: [ + TextButton( + onPressed: () => Navigator.pop(context), + child: Text( + '取消', + style: TextStyle(color: Theme.of(context).colorScheme.outline), + )), + TextButton( + onPressed: () => Navigator.pop(context, _tempValue), + child: const Text('确定')) + ], + ); + } +}