config_dialog.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import 'package:chicken_farm/core/api/api_client.dart';
  2. import 'package:chicken_farm/core/config/app_config.dart';
  3. import 'package:flutter/material.dart';
  4. class ConfigDialog extends StatefulWidget {
  5. const ConfigDialog({super.key});
  6. @override
  7. State<ConfigDialog> createState() => _ConfigDialogState();
  8. }
  9. class _ConfigDialogState extends State<ConfigDialog> {
  10. final _formKey = GlobalKey<FormState>();
  11. late TextEditingController _baseUrlController;
  12. late TextEditingController _clientIdController;
  13. @override
  14. void initState() {
  15. super.initState();
  16. _baseUrlController = TextEditingController(text: AppConfig.baseUrl);
  17. _clientIdController = TextEditingController(text: AppConfig.clientId);
  18. }
  19. @override
  20. void dispose() {
  21. _baseUrlController.dispose();
  22. _clientIdController.dispose();
  23. super.dispose();
  24. }
  25. @override
  26. Widget build(BuildContext context) {
  27. return AlertDialog(
  28. title: const Text('配置服务器'),
  29. content: SizedBox(
  30. width: MediaQuery.of(context).size.width * 0.8,
  31. child: Form(
  32. key: _formKey,
  33. child: Column(
  34. mainAxisSize: MainAxisSize.min,
  35. children: [
  36. TextFormField(
  37. controller: _baseUrlController,
  38. decoration: const InputDecoration(
  39. labelText: 'Base URL',
  40. hintText: '例如: http://localhost:8080',
  41. border: OutlineInputBorder(),
  42. ),
  43. validator: (value) {
  44. if (value == null || value.isEmpty) {
  45. return '请输入Base URL';
  46. }
  47. if (!value.startsWith('http')) {
  48. return '请输入有效的URL地址';
  49. }
  50. return null;
  51. },
  52. ),
  53. const SizedBox(height: 16),
  54. TextFormField(
  55. controller: _clientIdController,
  56. decoration: const InputDecoration(
  57. labelText: 'Client ID',
  58. border: OutlineInputBorder(),
  59. ),
  60. validator: (value) {
  61. if (value == null || value.isEmpty) {
  62. return '请输入Client ID';
  63. }
  64. return null;
  65. },
  66. ),
  67. ],
  68. ),
  69. ),
  70. ),
  71. actions: [
  72. TextButton(
  73. onPressed: () {
  74. Navigator.of(context).pop();
  75. },
  76. child: const Text('取消'),
  77. ),
  78. ElevatedButton(
  79. onPressed: () async {
  80. if (_formKey.currentState!.validate()) {
  81. // 保存配置
  82. await AppConfig.save(
  83. _baseUrlController.text.trim(),
  84. _clientIdController.text.trim(),
  85. );
  86. // 重新初始化API客户端
  87. ApiClient.clearDio();
  88. if (context.mounted) {
  89. Navigator.of(context).pop(true);
  90. }
  91. }
  92. },
  93. child: const Text('保存'),
  94. ),
  95. ],
  96. );
  97. }
  98. }