fix: batch delete servers (#408)

Fixes #393
This commit is contained in:
lollipopkit🏳️‍⚧️
2024-06-23 00:24:30 +08:00
committed by GitHub
parent 43e6105eb3
commit f1315dda7f

View File

@@ -7,7 +7,6 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:icons_plus/icons_plus.dart'; import 'package:icons_plus/icons_plus.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:server_box/core/extension/context/locale.dart'; import 'package:server_box/core/extension/context/locale.dart';
import 'package:server_box/data/res/provider.dart';
import 'package:server_box/data/res/rebuild.dart'; import 'package:server_box/data/res/rebuild.dart';
import 'package:server_box/data/res/store.dart'; import 'package:server_box/data/res/store.dart';
import 'package:server_box/data/res/url.dart'; import 'package:server_box/data/res/url.dart';
@@ -737,47 +736,29 @@ class _SettingPageState extends State<SettingPage> {
leading: const Icon(Icons.delete_forever), leading: const Icon(Icons.delete_forever),
trailing: const Icon(Icons.keyboard_arrow_right), trailing: const Icon(Icons.keyboard_arrow_right),
onTap: () async { onTap: () async {
context.showRoundDialog<List<String>>(
title: l10n.choose,
child: SingleChildScrollView(
child: StatefulBuilder(builder: (ctx, setState) {
final keys = Stores.server.box.keys.toList(); final keys = Stores.server.box.keys.toList();
keys.removeWhere((element) => element == BoxX.lastModifiedKey); keys.removeWhere((element) => element == BoxX.lastModifiedKey);
final all = keys.map( final strKeys = List<String>.empty(growable: true);
(e) { for (final key in keys) {
final name = Pros.server.pick(id: e)?.spi.name; if (key is String) strKeys.add(key);
return ListTile( }
title: Text(name ?? e), final deleteKeys = await context.showPickDialog<String>(
subtitle: name != null ? Text(e) : null, clearable: true,
onTap: () => context.showRoundDialog( items: strKeys,
);
if (deleteKeys == null) return;
final md = deleteKeys.map((e) => '- $e').join('\n');
final sure = await context.showRoundDialog(
title: l10n.attention, title: l10n.attention,
child: Text(l10n.askContinue( child: SimpleMarkdown(data: md),
'${l10n.delete} ${l10n.server}($e)',
)),
actions: [
TextButton(
onPressed: () {
Pros.server.delServer(e);
ctx.pop();
setState(() {});
},
child: Text(l10n.ok),
)
],
),
);
},
);
return ConstrainedBox(
constraints: const BoxConstraints(maxHeight: 377),
child: Column(
mainAxisSize: MainAxisSize.min,
children: all.toList(),
),
);
}),
),
); );
if (sure != true) return;
for (final key in deleteKeys) {
Stores.server.box.delete(key);
}
context.showSnackBar(l10n.success);
}, },
); );
} }