fix(ui): stabilize permissions dialog #14
1 changed files with 22 additions and 5 deletions
|
|
@ -1047,6 +1047,7 @@ class _PermissionsDialog extends StatefulWidget {
|
|||
|
||||
class _PermissionsDialogState extends State<_PermissionsDialog> {
|
||||
late Map<String, dynamic> _currentPermissions;
|
||||
bool _permissionsInitialized = false;
|
||||
bool _isUpdating = false;
|
||||
late bool _membershipUnlimited;
|
||||
DateTime? _membershipEndDate;
|
||||
|
|
@ -1055,11 +1056,22 @@ class _PermissionsDialogState extends State<_PermissionsDialog> {
|
|||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_currentPermissions = _mergePermissions(widget.user.permissions);
|
||||
_membershipEndDate = widget.user.membershipExpiresAt;
|
||||
_membershipUnlimited = widget.user.membershipUnlimited;
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
super.didChangeDependencies();
|
||||
if (_permissionsInitialized) return;
|
||||
|
||||
_currentPermissions = _mergePermissions(
|
||||
widget.user.permissions,
|
||||
AppLocalizations.of(context),
|
||||
);
|
||||
_permissionsInitialized = true;
|
||||
}
|
||||
|
||||
/// ساختار کامل دسترسیهای سیستم
|
||||
Map<String, Map<String, String>> _getAllPermissions(AppLocalizations t) {
|
||||
return {
|
||||
|
|
@ -1334,8 +1346,10 @@ class _PermissionsDialogState extends State<_PermissionsDialog> {
|
|||
}
|
||||
|
||||
/// ادغام دسترسیهای دیتابیس با ساختار کامل
|
||||
Map<String, dynamic> _mergePermissions(Map<String, dynamic> dbPermissions) {
|
||||
final t = AppLocalizations.of(context);
|
||||
Map<String, dynamic> _mergePermissions(
|
||||
Map<String, dynamic> dbPermissions,
|
||||
AppLocalizations t,
|
||||
) {
|
||||
final allPermissions = _getAllPermissions(t);
|
||||
final mergedPermissions = <String, dynamic>{};
|
||||
|
||||
|
|
@ -1717,8 +1731,11 @@ class _PermissionsDialogState extends State<_PermissionsDialog> {
|
|||
),
|
||||
),
|
||||
),
|
||||
Tooltip(
|
||||
message: t.dialogClose,
|
||||
// Flutter 3.41.1 may corrupt OverlayPortal element state if a
|
||||
// tooltip is visible while its dialog is being dismissed.
|
||||
Semantics(
|
||||
label: t.dialogClose,
|
||||
button: true,
|
||||
child: IconButton(
|
||||
visualDensity: VisualDensity.compact,
|
||||
padding: const EdgeInsets.all(6),
|
||||
|
|
|
|||
Loading…
Reference in a new issue