43 lines
1.2 KiB
Dart
43 lines
1.2 KiB
Dart
import 'package:dio/dio.dart';
|
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
|
|
import 'package:linkdy/providers/server_instances_provider.dart';
|
|
import 'package:linkdy/providers/dio_interceptor.provider.dart';
|
|
import 'package:linkdy/services/api_client.dart';
|
|
import 'package:linkdy/utils/api_base_url.dart';
|
|
|
|
part 'api_client_provider.g.dart';
|
|
|
|
@Riverpod(keepAlive: true)
|
|
class ApiClient extends _$ApiClient {
|
|
@override
|
|
ApiClientService? build() {
|
|
final savedInstances = ref.watch(serverInstancesProvider);
|
|
if (savedInstances.isNotEmpty) {
|
|
final instance = savedInstances[0];
|
|
final dio = Dio(
|
|
BaseOptions(
|
|
baseUrl: apiBaseUrl(instance),
|
|
headers: {
|
|
"Authorization": "Token ${instance.token}",
|
|
},
|
|
),
|
|
)..interceptors.add(ref.watch(dioInterceptorProvider));
|
|
return ApiClientService(
|
|
serverInstance: instance,
|
|
dioInstance: dio,
|
|
);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
void setApiClient(ApiClientService client) {
|
|
state = client;
|
|
}
|
|
|
|
void disconnectApiClient() {
|
|
state = null;
|
|
ref.read(serverInstancesProvider.notifier).removeServerInstances();
|
|
}
|
|
}
|