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