import 'package:chicken_farm/core/api/api_client.dart'; import 'package:chicken_farm/core/config/app_config.dart'; import 'package:chicken_farm/core/utils/toast.dart'; import 'package:flutter/material.dart'; class ConfigDialog extends StatefulWidget { const ConfigDialog({super.key}); @override State createState() => _ConfigDialogState(); } class _ConfigDialogState extends State { final _formKey = GlobalKey(); late TextEditingController _baseUrlController; late TextEditingController _clientIdController; bool _isSaving = false; // 添加保存状态标识 @override void initState() { super.initState(); _baseUrlController = TextEditingController(text: AppConfig.baseUrl); _clientIdController = TextEditingController(text: AppConfig.clientId); } @override void dispose() { _baseUrlController.dispose(); _clientIdController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return AlertDialog( title: const Text('配置服务器'), content: SizedBox( width: MediaQuery.of(context).size.width * 0.8, child: Form( key: _formKey, child: Column( mainAxisSize: MainAxisSize.min, children: [ TextFormField( controller: _baseUrlController, decoration: const InputDecoration( labelText: 'Base URL', hintText: '例如: http://localhost:8080', border: OutlineInputBorder(), ), validator: (value) { if (value == null || value.isEmpty) { return '请输入Base URL'; } if (!value.startsWith('http')) { return '请输入有效的URL地址'; } return null; }, ), const SizedBox(height: 16), TextFormField( controller: _clientIdController, decoration: const InputDecoration( labelText: 'Client ID', border: OutlineInputBorder(), ), validator: (value) { if (value == null || value.isEmpty) { return '请输入Client ID'; } return null; }, ), ], ), ), ), actions: [ TextButton( onPressed: _isSaving ? null : () { // 保存过程中禁用取消按钮 Navigator.of(context).pop(); }, child: const Text('取消'), ), ElevatedButton( onPressed: _isSaving ? null : () async { // 保存过程中禁用保存按钮 if (_formKey.currentState!.validate()) { // 保存前取消当前焦点,避免输入法相关问题 FocusManager.instance.primaryFocus?.unfocus(); setState(() { _isSaving = true; }); try { // 稍微延迟一下确保焦点完全失去 await Future.delayed(const Duration(milliseconds: 50)); // 保存配置 await AppConfig.save( _baseUrlController.text.trim(), _clientIdController.text.trim(), ); // 重新初始化API客户端 ApiClient.clearDio(); if (context.mounted) { Navigator.of(context).pop(true); ToastUtil.success('配置保存成功'); } } catch (e) { // 发生错误时显示提示 if (context.mounted) { ToastUtil.error('保存配置失败: ${e.toString()}'); } setState(() { _isSaving = false; }); } } }, child: _isSaving ? const SizedBox( width: 20, height: 20, child: CircularProgressIndicator(strokeWidth: 2, color: Colors.white), ) : const Text('保存'), ), ], ); } }