You've already forked flutter-rp-example
37 lines
1.0 KiB
Dart
37 lines
1.0 KiB
Dart
import 'package:grpc/grpc.dart';
|
|
import 'package:grpc/grpc_or_grpcweb.dart';
|
|
import 'package:sampleapp/services/auth/auth.dart';
|
|
|
|
class AuthInterceptor extends ClientInterceptor {
|
|
final AuthService authService;
|
|
|
|
AuthInterceptor(this.authService);
|
|
|
|
@override
|
|
ResponseFuture<R> interceptUnary<Q, R>(
|
|
ClientMethod<Q, R> method, Q request, CallOptions options, invoker) {
|
|
final metadata = <String, String>{};
|
|
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(GrpcOrGrpcWebClientChannel, List<ClientInterceptor>)
|
|
clientFactory,
|
|
) {
|
|
final interceptor = AuthInterceptor(authService);
|
|
final channel = GrpcOrGrpcWebClientChannel.toSingleEndpoint(
|
|
host: host,
|
|
port: port,
|
|
transportSecure: true,
|
|
);
|
|
return clientFactory(channel, [interceptor]);
|
|
}
|
|
}
|