88 lines
2.3 KiB
Dart
88 lines
2.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import 'package:pshared/provider/account.dart';
|
|
import 'package:pshared/utils/snackbar.dart';
|
|
|
|
import 'package:pweb/models/edit_state.dart';
|
|
import 'package:pweb/utils/error/snackbar.dart';
|
|
|
|
|
|
class PasswordFormProvider extends ChangeNotifier {
|
|
final formKey = GlobalKey<FormState>();
|
|
final oldPasswordController = TextEditingController();
|
|
final newPasswordController = TextEditingController();
|
|
final confirmPasswordController = TextEditingController();
|
|
|
|
EditState _state = EditState.view;
|
|
String _errorText = '';
|
|
bool _disposed = false;
|
|
|
|
bool get isExpanded => _state != EditState.view;
|
|
bool get isSaving => _state == EditState.saving;
|
|
String get errorText => _errorText;
|
|
EditState get state => _state;
|
|
|
|
void toggleExpanded() {
|
|
if (_state == EditState.saving) return;
|
|
_setState(_state == EditState.view ? EditState.edit : EditState.view);
|
|
_setError('');
|
|
}
|
|
|
|
Future<void> submit({
|
|
required BuildContext context,
|
|
required AccountProvider accountProvider,
|
|
required String successText,
|
|
required String errorText,
|
|
}) async {
|
|
final currentForm = formKey.currentState;
|
|
if (currentForm == null || !currentForm.validate()) return;
|
|
|
|
_setState(EditState.saving);
|
|
_setError('');
|
|
|
|
try {
|
|
await accountProvider.changePassword(
|
|
oldPasswordController.text,
|
|
newPasswordController.text,
|
|
);
|
|
|
|
oldPasswordController.clear();
|
|
newPasswordController.clear();
|
|
confirmPasswordController.clear();
|
|
if (!context.mounted) return;
|
|
notifyUser(context, successText);
|
|
} catch (e) {
|
|
_setError(errorText);
|
|
if (!context.mounted) return;
|
|
await postNotifyUserOfErrorX(
|
|
context: context,
|
|
errorSituation: errorText,
|
|
exception: e,
|
|
);
|
|
} finally {
|
|
_setState(EditState.edit);
|
|
}
|
|
}
|
|
|
|
void _setState(EditState value) {
|
|
if (_state == value || _disposed) return;
|
|
_state = value;
|
|
notifyListeners();
|
|
}
|
|
|
|
void _setError(String value) {
|
|
if (_disposed) return;
|
|
_errorText = value;
|
|
notifyListeners();
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
_disposed = true;
|
|
oldPasswordController.dispose();
|
|
newPasswordController.dispose();
|
|
confirmPasswordController.dispose();
|
|
super.dispose();
|
|
}
|
|
}
|