add split settings model

Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-04-18 11:32:19 +08:00
parent 24f2cfa4e9
commit bac0769933
4 changed files with 149 additions and 49 deletions

View File

@@ -30,6 +30,43 @@ sealed class SettingsModel {
});
}
class SplitModel extends SettingsModel {
const SplitModel({
super.contentPadding,
super.titleStyle,
required this.normalModel,
required this.switchModel,
});
@override
String? get effectiveSubtitle => normalModel.effectiveSubtitle;
@override
String get effectiveTitle => normalModel.effectiveTitle;
@override
String? get title => normalModel.title;
final NormalModel normalModel;
final SwitchModel switchModel;
@override
Widget get widget => SetSwitchItem(
title: effectiveTitle,
subtitle: effectiveSubtitle,
setKey: switchModel.setKey,
defaultVal: switchModel.defaultVal,
onChanged: switchModel.onChanged,
needReboot: switchModel.needReboot,
leading: normalModel.leading,
onTap: switchModel.onTap,
contentPadding: contentPadding,
titleStyle: titleStyle,
isSplit: true,
);
}
class PopupModel<T extends EnumWithLabel> extends SettingsModel {
const PopupModel({
required this.title,
@@ -88,6 +125,18 @@ class NormalModel extends SettingsModel {
this.onTap,
}) : assert(title != null || getTitle != null);
const NormalModel.split({
super.subtitle,
super.leading,
super.contentPadding,
super.titleStyle,
this.title,
this.getTitle,
this.getSubtitle,
this.getTrailing,
}) : onTap = null,
assert(title != null || getTitle != null);
@override
String get effectiveTitle => title ?? getTitle!();
@override
@@ -109,7 +158,7 @@ class NormalModel extends SettingsModel {
class SwitchModel extends SettingsModel {
@override
final String title;
final String? title;
final String setKey;
final bool defaultVal;
final ValueChanged<bool>? onChanged;
@@ -121,7 +170,7 @@ class SwitchModel extends SettingsModel {
super.leading,
super.contentPadding,
super.titleStyle,
required this.title,
required String this.title,
required this.setKey,
this.defaultVal = false,
this.onChanged,
@@ -129,14 +178,22 @@ class SwitchModel extends SettingsModel {
this.onTap,
});
const SwitchModel.split({
required this.setKey,
this.defaultVal = false,
this.needReboot = false,
this.onChanged,
this.onTap,
}) : title = null;
@override
String get effectiveTitle => title;
String get effectiveTitle => title!;
@override
String? get effectiveSubtitle => subtitle;
@override
Widget get widget => SetSwitchItem(
title: title,
title: title!,
subtitle: subtitle,
setKey: setKey,
defaultVal: defaultVal,