app_provider.dart 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /// 全局 Provider — API 服务 + 连接状态
  2. import 'package:flutter_riverpod/flutter_riverpod.dart';
  3. import '../services/api_service.dart';
  4. final apiServiceProvider = Provider<ApiService>((ref) {
  5. return ApiService();
  6. });
  7. /// 连接状态
  8. enum ConnectionStatus { unconfigured, configured, error }
  9. class ConnectionState {
  10. final ConnectionStatus status;
  11. final String? serverUrl;
  12. final String? errorMessage;
  13. const ConnectionState({this.status = ConnectionStatus.unconfigured, this.serverUrl, this.errorMessage});
  14. }
  15. class ConnectionNotifier extends StateNotifier<ConnectionState> {
  16. final ApiService _api;
  17. ConnectionNotifier(this._api) : super(const ConnectionState());
  18. Future<void> initialize() async {
  19. await _api.loadConfig();
  20. if (_api.isConfigured) {
  21. state = ConnectionState(status: ConnectionStatus.configured);
  22. }
  23. }
  24. Future<bool> connect(String url, String token) async {
  25. final valid = await _api.verifyToken(url, token);
  26. if (valid) {
  27. await _api.saveConfig(url, token);
  28. state = ConnectionState(status: ConnectionStatus.configured, serverUrl: url);
  29. return true;
  30. } else {
  31. state = ConnectionState(status: ConnectionStatus.error, errorMessage: 'Token 验证失败');
  32. return false;
  33. }
  34. }
  35. Future<void> disconnect() async {
  36. await _api.clearConfig();
  37. state = const ConnectionState();
  38. }
  39. }
  40. final connectionProvider = StateNotifierProvider<ConnectionNotifier, ConnectionState>((ref) {
  41. final api = ref.watch(apiServiceProvider);
  42. return ConnectionNotifier(api);
  43. });
  44. /// WebDAV 配置状态(从服务端拉取)
  45. final webdavConfiguredProvider = StateProvider<bool>((ref) => false);
  46. final webdavUrlProvider = StateProvider<String>((ref) => '');
  47. final webdavUserProvider = StateProvider<String>((ref) => '');