mirror of
https://github.com/lifegpc/eh_downloader_flutter.git
synced 2026-07-08 01:30:28 +08:00
Add delete user dialog
This commit is contained in:
@@ -1,10 +1,24 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import '../api/user.dart';
|
||||
import '../dialog/edit_user_page.dart';
|
||||
import '../globals.dart';
|
||||
|
||||
final _log = Logger("UserCard");
|
||||
|
||||
Future<void> _deleteUser(int id, String errmsg) async {
|
||||
try {
|
||||
(await api.deleteUser(id: id)).unwrap();
|
||||
listener.tryEmit("delete_user", id);
|
||||
} catch (e) {
|
||||
_log.severe("Failed to delete user $id: $e");
|
||||
final snack = SnackBar(content: Text("$errmsg$e"));
|
||||
rootScaffoldMessengerKey.currentState?.showSnackBar(snack);
|
||||
}
|
||||
}
|
||||
|
||||
class UserCard extends StatelessWidget {
|
||||
const UserCard(this.user, {super.key});
|
||||
final BUser user;
|
||||
@@ -49,7 +63,45 @@ class UserCard extends StatelessWidget {
|
||||
!user.isAdmin ||
|
||||
(user.isAdmin && auth.isRoot == true && user.id != 0)
|
||||
? IconButton(
|
||||
onPressed: () {},
|
||||
onPressed: () => showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
final maxWidth = MediaQuery.of(context).size.width;
|
||||
return Dialog(
|
||||
child: Container(
|
||||
padding: maxWidth < 400
|
||||
? const EdgeInsets.symmetric(
|
||||
vertical: 20, horizontal: 10)
|
||||
: const EdgeInsets.all(20),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius:
|
||||
BorderRadius.circular(10)),
|
||||
width: maxWidth < 500 ? null : 500,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(i18n
|
||||
.deleteUserConfirm(user.username)),
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.end,
|
||||
children: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
context.pop();
|
||||
_deleteUser(user.id,
|
||||
i18n.failedDeleteUser);
|
||||
},
|
||||
child: Text(i18n.yes)),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
context.pop();
|
||||
},
|
||||
child: Text(i18n.no)),
|
||||
]),
|
||||
],
|
||||
)));
|
||||
}),
|
||||
tooltip: i18n.delete,
|
||||
icon: const Icon(Icons.delete))
|
||||
: Container(),
|
||||
|
||||
@@ -142,6 +142,7 @@ class _EditUserPage extends State<EditUserPage> {
|
||||
? const EdgeInsets.symmetric(vertical: 20, horizontal: 10)
|
||||
: const EdgeInsets.all(20),
|
||||
decoration: BoxDecoration(borderRadius: BorderRadius.circular(10)),
|
||||
width: maxWidth < 810 ? null : 800,
|
||||
child: isLoading
|
||||
? const Center(child: CircularProgressIndicator())
|
||||
: _error != null
|
||||
|
||||
@@ -215,5 +215,14 @@
|
||||
"userPermissions": "User permissions",
|
||||
"revokeToken": "Revoke all login sessions",
|
||||
"editUser": "Edit user",
|
||||
"rootUser": "Root user"
|
||||
"rootUser": "Root user",
|
||||
"deleteUserConfirm": "Do you want to delete user {user}?",
|
||||
"@deleteUserConfirm": {
|
||||
"placeholders": {
|
||||
"user": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"failedDeleteUser": "Failed to delete user: "
|
||||
}
|
||||
|
||||
@@ -215,5 +215,14 @@
|
||||
"userPermissions": "用户权限",
|
||||
"revokeToken": "撤销所有登录的会话",
|
||||
"editUser": "编辑用户",
|
||||
"rootUser": "根用户"
|
||||
"rootUser": "根用户",
|
||||
"deleteUserConfirm": "是否删除用户 {user} ?",
|
||||
"@deleteUserConfirm": {
|
||||
"placeholders": {
|
||||
"user": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"failedDeleteUser": "删除用户失败:"
|
||||
}
|
||||
|
||||
@@ -162,6 +162,7 @@ class _UsersPage extends State<UsersPage> with ThemeModeWidget, IsTopWidget2 {
|
||||
_cancel2?.cancel();
|
||||
listener.removeEventListener("new_user", _onNewUser);
|
||||
listener.removeEventListener("update_user", _onUpdateUser);
|
||||
listener.removeEventListener("delete_user", _onDeleteUser);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@@ -169,6 +170,7 @@ class _UsersPage extends State<UsersPage> with ThemeModeWidget, IsTopWidget2 {
|
||||
void initState() {
|
||||
listener.on("new_user", _onNewUser);
|
||||
listener.on("update_user", _onUpdateUser);
|
||||
listener.on("delete_user", _onDeleteUser);
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@@ -204,4 +206,15 @@ class _UsersPage extends State<UsersPage> with ThemeModeWidget, IsTopWidget2 {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void _onDeleteUser(dynamic arg) {
|
||||
final uid = arg as int;
|
||||
if (_users == null) return;
|
||||
final index = _users!.indexWhere((v) => v.id == uid);
|
||||
if (index > -1) {
|
||||
setState(() {
|
||||
_users!.removeAt(index);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user