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 'package:shared_preferences/shared_preferences.dart';
|
||||||
import '../api/types.dart';
|
import '../api/types.dart';
|
||||||
import '../api/client.dart';
|
import '../api/client.dart';
|
||||||
|
import '../api/grpc_client.dart';
|
||||||
|
import '../api/grpc_config.dart';
|
||||||
import '../api/openapi_config.dart';
|
import '../api/openapi_config.dart';
|
||||||
import '../services/auth_service.dart';
|
import '../services/auth_service.dart';
|
||||||
import '../models/user_profile.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 isAuthenticatedProvider = FutureProvider<bool>((ref) async {
|
||||||
final authService = ref.watch(authServiceProvider);
|
final authService = ref.watch(authServiceProvider);
|
||||||
return await authService.isAuthenticated();
|
return await authService.isAuthenticated();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user