mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 15:57:25 +00:00
Improve UI
This commit is contained in:
@@ -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": "關鍵詞"
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -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(
|
||||||
|
@@ -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 StatefulBuilder(builder: (context, setState) {
|
||||||
return ContentDialog(
|
return ContentDialog(
|
||||||
title: "Add".tl,
|
title: "Add".tl,
|
||||||
content: Column(
|
content: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: canAdd.entries
|
children: canAdd.entries
|
||||||
.map(
|
.map(
|
||||||
(e) => ListTile(
|
(e) => CheckboxListTile(
|
||||||
|
value: selected.contains(e.key),
|
||||||
title: Text(e.value),
|
title: Text(e.value),
|
||||||
key: Key(e.key),
|
key: Key(e.key),
|
||||||
onTap: () {
|
onChanged: (value) {
|
||||||
context.pop();
|
|
||||||
setState(() {
|
setState(() {
|
||||||
keys.add(e.key);
|
if (value!) {
|
||||||
|
selected.add(e.key);
|
||||||
|
} else {
|
||||||
|
selected.remove(e.key);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
updateSetting();
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.toList(),
|
.toList(),
|
||||||
),
|
),
|
||||||
|
actions: [
|
||||||
|
if (selected.length < canAdd.length)
|
||||||
|
TextButton(
|
||||||
|
child: Text("Select All".tl),
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
selected = canAdd.keys.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),
|
||||||
|
),
|
||||||
|
],
|
||||||
);
|
);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user