auto-claude: subtask-4-1 - Add gRPC client provider to providers.dart
Add grpcClientProvider to providers.dart for gRPC-based API access: - Import GrpcCqrsApiClient and GrpcConfig from api layer - Create grpcClientProvider using Provider.autoDispose for proper channel cleanup when no longer watched - Inject authService for token management - Register onDispose callback to shutdown gRPC channel resources This follows the same pattern as the existing apiClientProvider while adding proper resource management for gRPC connections. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
823f9107fd
commit
8ea186ef4a
@ -3,6 +3,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../api/types.dart';
|
||||
import '../api/client.dart';
|
||||
import '../api/grpc_client.dart';
|
||||
import '../api/grpc_config.dart';
|
||||
import '../api/openapi_config.dart';
|
||||
import '../services/auth_service.dart';
|
||||
import '../models/user_profile.dart';
|
||||
@ -21,6 +23,31 @@ final apiClientProvider = Provider<CqrsApiClient>((ref) {
|
||||
);
|
||||
});
|
||||
|
||||
/// Provider for the gRPC-based CQRS API client.
|
||||
///
|
||||
/// Uses auto-dispose to properly shut down the gRPC channel when the provider
|
||||
/// is no longer being watched. This ensures network resources are cleaned up.
|
||||
///
|
||||
/// Example usage:
|
||||
/// ```dart
|
||||
/// final grpcClient = ref.watch(grpcClientProvider);
|
||||
/// final result = await grpcClient.getDeliveryRoutes();
|
||||
/// ```
|
||||
final grpcClientProvider = Provider.autoDispose<GrpcCqrsApiClient>((ref) {
|
||||
final authService = ref.watch(authServiceProvider);
|
||||
final client = GrpcCqrsApiClient(
|
||||
config: GrpcConfig.development,
|
||||
authService: authService,
|
||||
);
|
||||
|
||||
// Register disposal callback to clean up gRPC channel resources
|
||||
ref.onDispose(() {
|
||||
client.shutdown();
|
||||
});
|
||||
|
||||
return client;
|
||||
});
|
||||
|
||||
final isAuthenticatedProvider = FutureProvider<bool>((ref) async {
|
||||
final authService = ref.watch(authServiceProvider);
|
||||
return await authService.isAuthenticated();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user