Improve UI

This commit is contained in:
2025-01-25 16:50:04 +08:00
parent 24b9bcd86e
commit f5a814cfe4
3 changed files with 83 additions and 29 deletions

View File

@@ -314,7 +314,10 @@
"New Version": "新版本", "New Version": "新版本",
"@c updates": "@c 项更新", "@c updates": "@c 项更新",
"No updates": "无更新", "No updates": "无更新",
"Set comic source list url": "设置漫画源列表URL" "Set comic source list url": "设置漫画源列表URL",
"Deselect All": "取消全选",
"Add keyword": "添加关键词",
"Keyword": "关键词"
}, },
"zh_TW": { "zh_TW": {
"Home": "首頁", "Home": "首頁",
@@ -631,6 +634,9 @@
"New Version": "新版本", "New Version": "新版本",
"@c updates": "@c 項更新", "@c updates": "@c 項更新",
"No updates": "無更新", "No updates": "無更新",
"Set comic source list url": "設置漫畫源列表URL" "Set comic source list url": "設置漫畫源列表URL",
"Deselect All": "取消全選",
"Add keyword": "添加關鍵詞",
"Keyword": "關鍵詞"
} }
} }

View File

@@ -108,8 +108,9 @@ class _ManageBlockingWordViewState extends State<_ManageBlockingWordView> {
return PopUpWidgetScaffold( return PopUpWidgetScaffold(
title: "Keyword blocking".tl, title: "Keyword blocking".tl,
tailing: [ tailing: [
IconButton( TextButton.icon(
icon: const Icon(Icons.add), icon: const Icon(Icons.add),
label: Text("Add".tl),
onPressed: add, onPressed: add,
), ),
], ],
@@ -135,7 +136,6 @@ class _ManageBlockingWordViewState extends State<_ManageBlockingWordView> {
void add() { void add() {
showDialog( showDialog(
context: App.rootContext, context: App.rootContext,
barrierColor: Colors.black.toOpacity(0.1),
builder: (context) { builder: (context) {
var controller = TextEditingController(); var controller = TextEditingController();
String? error; String? error;
@@ -186,7 +186,7 @@ Widget setExplorePagesWidget() {
var pages = <String, String>{}; var pages = <String, String>{};
for (var c in ComicSource.all()) { for (var c in ComicSource.all()) {
for (var page in c.explorePages) { for (var page in c.explorePages) {
pages[page.title] = page.title; pages[page.title] = page.title.ts(c.key);
} }
} }
return _MultiPagesFilter( return _MultiPagesFilter(

View File

@@ -376,6 +376,14 @@ class _MultiPagesFilterState extends State<_MultiPagesFilter> {
super.initState(); super.initState();
} }
@override
void dispose() {
super.dispose();
Future.microtask(() {
updateSetting();
});
}
var reorderWidgetKey = UniqueKey(); var reorderWidgetKey = UniqueKey();
var scrollController = ScrollController(); var scrollController = ScrollController();
final _key = GlobalKey(); final _key = GlobalKey();
@@ -404,7 +412,6 @@ class _MultiPagesFilterState extends State<_MultiPagesFilter> {
setState(() { setState(() {
keys = List.from(reorderFunc(keys)); keys = List.from(reorderFunc(keys));
}); });
updateSetting();
}, },
children: tiles, children: tiles,
builder: (children) { builder: (children) {
@@ -424,7 +431,11 @@ class _MultiPagesFilterState extends State<_MultiPagesFilter> {
title: widget.title, title: widget.title,
tailing: [ tailing: [
if (keys.length < widget.pages.length) if (keys.length < widget.pages.length)
IconButton(onPressed: showAddDialog, icon: const Icon(Icons.add)) TextButton.icon(
label: Text("Add".tl),
icon: const Icon(Icons.add),
onPressed: showAddDialog,
)
], ],
body: view, body: view,
); );
@@ -438,9 +449,8 @@ class _MultiPagesFilterState extends State<_MultiPagesFilter> {
setState(() { setState(() {
keys.remove(key); keys.remove(key);
}); });
updateSetting();
}, },
icon: const Icon(Icons.delete)), icon: const Icon(Icons.delete_outline)),
); );
return ListTile( return ListTile(
@@ -463,30 +473,68 @@ class _MultiPagesFilterState extends State<_MultiPagesFilter> {
canAdd[key] = value; canAdd[key] = value;
} }
}); });
var selected = <String>[];
showDialog( showDialog(
context: context, context: context,
builder: (context) { builder: (context) {
return ContentDialog( return StatefulBuilder(builder: (context, setState) {
title: "Add".tl, return ContentDialog(
content: Column( title: "Add".tl,
mainAxisSize: MainAxisSize.min, content: Column(
children: canAdd.entries mainAxisSize: MainAxisSize.min,
.map( children: canAdd.entries
(e) => ListTile( .map(
title: Text(e.value), (e) => CheckboxListTile(
key: Key(e.key), value: selected.contains(e.key),
onTap: () { title: Text(e.value),
context.pop(); key: Key(e.key),
setState(() { onChanged: (value) {
keys.add(e.key); setState(() {
}); if (value!) {
updateSetting(); selected.add(e.key);
}, } else {
), selected.remove(e.key);
}
});
},
),
)
.toList(),
),
actions: [
if (selected.length < canAdd.length)
TextButton(
child: Text("Select All".tl),
onPressed: () {
setState(() {
selected = canAdd.keys.toList();
});
},
) )
.toList(), else
), TextButton(
); child: Text("Deselect All".tl),
onPressed: () {
setState(() {
selected.clear();
});
},
),
const SizedBox(width: 8),
FilledButton(
onPressed: selected.isNotEmpty
? () {
this.setState(() {
keys.addAll(selected);
});
Navigator.pop(context);
}
: null,
child: Text("Add".tl),
),
],
);
});
}, },
); );
} }