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:
36
lib/models/file_pool.dart
Normal file
36
lib/models/file_pool.dart
Normal 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();
|
||||
}
|
||||
}
|
14
lib/pods/pool_provider.dart
Normal file
14
lib/pods/pool_provider.dart
Normal 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();
|
||||
});
|
19
lib/services/pool_service.dart
Normal file
19
lib/services/pool_service.dart
Normal 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}');
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user