fix(ui): stabilize permissions dialog #14

Merged
morrning merged 1 commit from Seyyed/Seyyed_arc:codex/quick-sales-stock-shortage-override into master 2026-10-13 15:08:23 +03:30

View file

@ -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),