redesign for settings page
This commit is contained in:
62
frontend/pweb/lib/controllers/settings/profile_actions.dart
Normal file
62
frontend/pweb/lib/controllers/settings/profile_actions.dart
Normal file
@@ -0,0 +1,62 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user