opt set pageTransition

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-12-04 16:54:02 +08:00
parent 7c1644efc4
commit b4a46133be
14 changed files with 136 additions and 129 deletions

View File

@@ -33,31 +33,34 @@ class _MultiSelectDialogState<T> extends State<MultiSelectDialog<T>> {
clipBehavior: Clip.hardEdge,
title: Text(widget.title),
contentPadding: const EdgeInsets.only(top: 12),
content: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: widget.values.entries.map((i) {
return Builder(
builder: (context) {
bool isChecked = _tempValues.contains(i.key);
return CheckboxListTile(
dense: true,
value: isChecked,
controlAffinity: ListTileControlAffinity.leading,
title: Text(
i.value,
style: theme.textTheme.titleMedium!,
),
onChanged: (value) {
isChecked
? _tempValues.remove(i.key)
: _tempValues.add(i.key);
(context as Element).markNeedsBuild();
},
);
},
);
}).toList(),
content: Material(
type: .transparency,
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: widget.values.entries.map((i) {
return Builder(
builder: (context) {
bool isChecked = _tempValues.contains(i.key);
return CheckboxListTile(
dense: true,
value: isChecked,
controlAffinity: ListTileControlAffinity.leading,
title: Text(
i.value,
style: theme.textTheme.titleMedium!,
),
onChanged: (value) {
isChecked
? _tempValues.remove(i.key)
: _tempValues.add(i.key);
(context as Element).markNeedsBuild();
},
);
},
);
}).toList(),
),
),
),
actionsPadding: const EdgeInsets.only(left: 16, right: 16, bottom: 12),

View File

@@ -39,7 +39,9 @@ class _NormalItemState extends State<NormalItem> {
return ListTile(
contentPadding: widget.contentPadding,
onTap: () => widget.onTap?.call(() {
setState(() {});
if (mounted) {
setState(() {});
}
}),
title: Text(
widget.title ?? widget.getTitle!(),

View File

@@ -37,39 +37,42 @@ class _OrderedMultiSelectDialogState<T>
clipBehavior: Clip.hardEdge,
title: Text(widget.title),
contentPadding: const EdgeInsets.only(top: 12),
content: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: widget.values.entries.map((i) {
return Builder(
builder: (context) {
return OrderedCheckboxListTile(
dense: true,
value: _tempValues[i.key],
title: Text(
i.value,
style: theme.textTheme.titleMedium!,
),
onChanged: (value) {
if (value == null) {
_tempValues[i.key] = _tempValues.length + 1;
(context as Element).markNeedsBuild();
} else {
final pos = _tempValues.remove(i.key)!;
if (pos == _tempValues.length + 1) {
content: Material(
type: .transparency,
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: widget.values.entries.map((i) {
return Builder(
builder: (context) {
return OrderedCheckboxListTile(
dense: true,
value: _tempValues[i.key],
title: Text(
i.value,
style: theme.textTheme.titleMedium!,
),
onChanged: (value) {
if (value == null) {
_tempValues[i.key] = _tempValues.length + 1;
(context as Element).markNeedsBuild();
} else {
_tempValues.updateAll(
(key, value) => value > pos ? value - 1 : value,
);
setState(() {});
final pos = _tempValues.remove(i.key)!;
if (pos == _tempValues.length + 1) {
(context as Element).markNeedsBuild();
} else {
_tempValues.updateAll(
(key, value) => value > pos ? value - 1 : value,
);
setState(() {});
}
}
}
},
);
},
);
}).toList(),
},
);
},
);
}).toList(),
),
),
),
actionsPadding: const EdgeInsets.only(left: 16, right: 16, bottom: 12),

View File

@@ -38,27 +38,30 @@ class SelectDialog<T> extends StatelessWidget {
? const BoxConstraints(maxWidth: 320, minWidth: 320)
: null,
contentPadding: const EdgeInsets.symmetric(vertical: 12),
content: SingleChildScrollView(
child: RadioGroup<T>(
onChanged: (v) => Navigator.of(context).pop(v ?? value),
groupValue: value,
child: Column(
mainAxisSize: MainAxisSize.min,
children: List.generate(
values.length,
(index) {
final item = values[index];
return RadioListTile<T>(
toggleable: toggleable,
dense: true,
value: item.$1,
title: Text(
item.$2,
style: titleMedium,
),
subtitle: subtitleBuilder?.call(context, index),
);
},
content: Material(
type: .transparency,
child: SingleChildScrollView(
child: RadioGroup<T>(
onChanged: (v) => Navigator.of(context).pop(v ?? value),
groupValue: value,
child: Column(
mainAxisSize: MainAxisSize.min,
children: List.generate(
values.length,
(index) {
final item = values[index];
return RadioListTile<T>(
toggleable: toggleable,
dense: true,
value: item.$1,
title: Text(
item.$2,
style: titleMedium,
),
subtitle: subtitleBuilder?.call(context, index),
);
},
),
),
),
),

View File

@@ -91,7 +91,9 @@ class _SetSwitchItemState extends State<SetSwitchItem> {
);
val = true;
SmartDialog.showToast('重启生效');
setState(() {});
if (mounted) {
setState(() {});
}
},
child: const Text('确认'),
),
@@ -113,7 +115,9 @@ class _SetSwitchItemState extends State<SetSwitchItem> {
if (widget.needReboot) {
SmartDialog.showToast('重启生效');
}
setState(() {});
if (mounted) {
setState(() {});
}
}
@override