Files
sendico/frontend/pweb/lib/controllers/settings/profile_actions.dart
2026-03-13 23:01:57 +03:00

63 lines
1.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:pweb/controllers/auth/account_name.dart';
import 'package:pweb/models/settings/profile_action_section.dart';
class ProfileActionsController extends ChangeNotifier {
AccountNameController? _accountNameController;
ProfileActionSection? _expandedSection;
ProfileActionSection? get expandedSection => _expandedSection;
bool get isEditingName => _accountNameController?.isEditing ?? false;
bool isExpanded(ProfileActionSection section) => _expandedSection == section;
void updateAccountNameController(AccountNameController controller) {
if (identical(_accountNameController, controller)) {
return;
}
_accountNameController?.removeListener(_handleAccountNameChanged);
_accountNameController = controller;
_accountNameController?.addListener(_handleAccountNameChanged);
}
void toggle(ProfileActionSection section) {
final isOpeningSection = !isExpanded(section);
if (isOpeningSection) {
if (_accountNameController?.isBusy ?? false) {
return;
}
_accountNameController?.cancelEditing();
}
_expandedSection = isExpanded(section) ? null : section;
notifyListeners();
}
void toggleNameEditing() {
final accountNameController = _accountNameController;
if (accountNameController == null || accountNameController.isBusy) {
return;
}
if (accountNameController.isEditing) {
accountNameController.cancelEditing();
return;
}
_expandedSection = null;
accountNameController.startEditing();
notifyListeners();
}
void _handleAccountNameChanged() {
notifyListeners();
}
@override
void dispose() {
_accountNameController?.removeListener(_handleAccountNameChanged);
super.dispose();
}
}