add pool fetching service and provider

- define FilePool model
- implement PoolService with /drive/pools endpoint
- add Riverpod providers (poolServiceProvider, poolsProvider)

Signed-off-by: Texas0295 <kimura@texas0295.top>
This commit is contained in:
Texas0295
2025-09-21 14:54:16 +08:00
parent 269a64cabb
commit b638343f02
3 changed files with 69 additions and 0 deletions

36
lib/models/file_pool.dart Normal file
View File

@@ -0,0 +1,36 @@
class FilePool {
final String id;
final String name;
final String? description;
final Map<String, dynamic> storageConfig;
final Map<String, dynamic> billingConfig;
final Map<String, dynamic> policyConfig;
final bool isHidden;
FilePool({
required this.id,
required this.name,
this.description,
required this.storageConfig,
required this.billingConfig,
required this.policyConfig,
required this.isHidden,
});
factory FilePool.fromJson(Map<String, dynamic> json) {
return FilePool(
id: json['id'] as String,
name: json['name'] as String,
description: json['description'] as String?,
storageConfig: json['storage_config'] as Map<String, dynamic>,
billingConfig: json['billing_config'] as Map<String, dynamic>,
policyConfig: json['policy_config'] as Map<String, dynamic>,
isHidden: json['is_hidden'] as bool,
);
}
static List<FilePool> listFromResponse(dynamic data) {
final parsed = data as List<dynamic>;
return parsed.map((e) => FilePool.fromJson(e)).toList();
}
}

View File

@@ -0,0 +1,14 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../services/pool_service.dart';
import '../models/file_pool.dart';
import 'package:island/pods/network.dart';
final poolServiceProvider = Provider<PoolService>((ref) {
final dio = ref.watch(apiClientProvider);
return PoolService(dio);
});
final poolsProvider = FutureProvider<List<FilePool>>((ref) async {
final service = ref.watch(poolServiceProvider);
return service.fetchPools();
});

View File

@@ -0,0 +1,19 @@
import 'package:dio/dio.dart';
import 'package:island/models/file_pool.dart';
class PoolService {
final Dio _dio;
PoolService(this._dio);
Future<List<FilePool>> fetchPools() async {
final response = await _dio.get('/drive/pools');
if (response.statusCode == 200) {
return FilePool.listFromResponse(response.data);
} else {
throw Exception('Failed to fetch pools: ${response.statusCode}');
}
}
}