import 'package:grpc/grpc.dart'; import 'package:sampleapp/services/auth/auth.dart'; class AuthInterceptor extends ClientInterceptor { final AuthService authService; AuthInterceptor(this.authService); @override ResponseFuture interceptUnary( ClientMethod method, Q request, CallOptions options, invoker) { final metadata = {}; metadata['authorization'] = 'Bearer ${authService.accessToken}'; options = options.mergedWith(CallOptions(metadata: metadata)); return invoker(method, request, options); } } class GrpcClient { static Client initializeClient(AuthService authService, String host, int port, Client Function(ClientChannel, List) clientFactory) { final interceptor = AuthInterceptor(authService); final channel = ClientChannel( host, port: port, options: const ChannelOptions( credentials: ChannelCredentials.secure(), ), ); return clientFactory(channel, [interceptor]); } }