31 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:flutter_riverpod/flutter_riverpod.dart';
 | |
| import 'package:dio/dio.dart';
 | |
| import 'package:island/models/webfeed.dart';
 | |
| import 'package:island/pods/network.dart';
 | |
| 
 | |
| /// Provider that fetches a single article by its ID
 | |
| final articleDetailProvider = FutureProvider.autoDispose
 | |
|     .family<SnWebArticle, String>((ref, articleId) async {
 | |
|       final dio = ref.watch(apiClientProvider);
 | |
| 
 | |
|       try {
 | |
|         final response = await dio.get<Map<String, dynamic>>(
 | |
|           '/sphere/feeds/articles/$articleId',
 | |
|         );
 | |
| 
 | |
|         if (response.statusCode == 200 && response.data != null) {
 | |
|           return SnWebArticle.fromJson(response.data!);
 | |
|         } else {
 | |
|           throw Exception('Failed to load article');
 | |
|         }
 | |
|       } on DioException catch (e) {
 | |
|         if (e.response?.statusCode == 404) {
 | |
|           throw Exception('Article not found');
 | |
|         } else {
 | |
|           throw Exception('Failed to load article: ${e.message}');
 | |
|         }
 | |
|       } catch (e) {
 | |
|         throw Exception('Failed to load article: $e');
 | |
|       }
 | |
|     });
 |