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