network.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // @dart=2.9
  2. import 'dart:io';
  3. import 'package:alice/alice.dart';
  4. import 'package:dio/dio.dart';
  5. import 'package:fk_user_agent/fk_user_agent.dart';
  6. import 'package:flutter/foundation.dart';
  7. import 'package:package_info_plus/package_info_plus.dart';
  8. import 'package:uuid/uuid.dart';
  9. int kConnectTimeout = 15000;
  10. class Network {
  11. Dio _dio;
  12. Alice _alice;
  13. Future<void> init() async {
  14. _alice = Alice(darkTheme: true, showNotification: kDebugMode);
  15. await FkUserAgent.init();
  16. final packageInfo = await PackageInfo.fromPlatform();
  17. _dio = Dio(
  18. BaseOptions(
  19. connectTimeout: kConnectTimeout,
  20. headers: {
  21. HttpHeaders.userAgentHeader: FkUserAgent.userAgent,
  22. 'X-Client-Version': packageInfo.version,
  23. 'X-Client-Package': packageInfo.packageName,
  24. },
  25. ),
  26. );
  27. _dio.interceptors.add(RequestIdInterceptor());
  28. _dio.interceptors.add(_alice.getDioInterceptor());
  29. }
  30. Network._privateConstructor();
  31. static Network instance = Network._privateConstructor();
  32. Dio getDio() => _dio;
  33. Alice getAlice() => _alice;
  34. }
  35. class RequestIdInterceptor extends Interceptor {
  36. @override
  37. void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
  38. // ignore: prefer_const_constructors
  39. options.headers.putIfAbsent("x-request-id", () => Uuid().v4().toString());
  40. return super.onRequest(options, handler);
  41. }
  42. }