Keep stored home API keys hidden on edit
This commit is contained in:
@@ -25,6 +25,7 @@ class _HomeEditScreenState extends ConsumerState<HomeEditScreen> {
|
||||
final _lonCtrl = TextEditingController();
|
||||
bool _saving = false;
|
||||
bool _loadingApiKey = false;
|
||||
bool _hasStoredApiKey = false;
|
||||
String _originalApiKey = '';
|
||||
|
||||
bool get _isEdit => widget.home != null;
|
||||
@@ -59,11 +60,11 @@ class _HomeEditScreenState extends ConsumerState<HomeEditScreen> {
|
||||
final apiKey = await ref
|
||||
.read(settingsServiceProvider)
|
||||
.getHomeApiKey(widget.home!.id);
|
||||
_originalApiKey = apiKey ?? '';
|
||||
_originalApiKey = apiKey?.trim() ?? '';
|
||||
_hasStoredApiKey = _originalApiKey.isNotEmpty;
|
||||
if (!mounted) {
|
||||
return;
|
||||
}
|
||||
_keyCtrl.text = _originalApiKey;
|
||||
} finally {
|
||||
if (mounted) {
|
||||
setState(() => _loadingApiKey = false);
|
||||
@@ -144,14 +145,24 @@ class _HomeEditScreenState extends ConsumerState<HomeEditScreen> {
|
||||
controller: _keyCtrl,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'API Key',
|
||||
hintText: _hasStoredApiKey
|
||||
? 'Оставьте пустым, чтобы сохранить текущий ключ'
|
||||
: null,
|
||||
helperText: _loadingApiKey
|
||||
? 'Загружаем сохранённый ключ...'
|
||||
: 'Ключ проверяется только при изменении подключения',
|
||||
: _hasStoredApiKey
|
||||
? 'Сохранённый ключ хранится отдельно и не показывается в поле'
|
||||
: 'Ключ хранится отдельно в защищённом хранилище',
|
||||
prefixIcon: const Icon(Icons.key),
|
||||
),
|
||||
obscureText: true,
|
||||
validator: (value) =>
|
||||
(value?.trim().isEmpty ?? true) ? 'Укажите API key' : null,
|
||||
validator: (value) {
|
||||
final enteredKey = value?.trim() ?? '';
|
||||
if (enteredKey.isNotEmpty || _hasStoredApiKey) {
|
||||
return null;
|
||||
}
|
||||
return 'Укажите API key';
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
const Text(
|
||||
@@ -285,7 +296,8 @@ class _HomeEditScreenState extends ConsumerState<HomeEditScreen> {
|
||||
|
||||
final name = _nameCtrl.text.trim();
|
||||
final rawUrl = _urlCtrl.text.trim();
|
||||
final key = _keyCtrl.text.trim();
|
||||
final enteredKey = _keyCtrl.text.trim();
|
||||
final key = enteredKey.isNotEmpty ? enteredKey : _originalApiKey;
|
||||
final latText = _latCtrl.text.trim();
|
||||
final lonText = _lonCtrl.text.trim();
|
||||
|
||||
@@ -370,7 +382,7 @@ class _HomeEditScreenState extends ConsumerState<HomeEditScreen> {
|
||||
if (_isEdit) {
|
||||
await ref
|
||||
.read(homesProvider.notifier)
|
||||
.update(home, apiKey: credentialsChanged ? key : null);
|
||||
.update(home, apiKey: enteredKey.isNotEmpty ? key : null);
|
||||
} else {
|
||||
await ref.read(homesProvider.notifier).add(home, apiKey: key);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user