Browse Source

[fit]修复轨迹记录查询时间过长导致超时的问题

zk 7 tháng trước cách đây
mục cha
commit
322b6b70ca

+ 2 - 3
lib/data/api/atmob_api.dart

@@ -31,9 +31,8 @@ import 'package:location/data/api/response/request_friend_list_response.dart';
 import 'package:location/data/api/response/request_pay_response.dart';
 import 'package:retrofit/error_logger.dart';
 import 'package:retrofit/http.dart';
-
+import 'package:retrofit/dio.dart';
 import '../bean/user_info.dart';
-
 part 'atmob_api.g.dart';
 
 @RestApi()
@@ -84,7 +83,7 @@ abstract class AtmobApi {
 
   @POST("/s/v1/location/track/query")
   Future<BaseResponse<QueryTrackResponse>> queryTrack(
-      @Body() QueryTrackRequest request);
+      @Body() QueryTrackRequest request, @DioOptions() RequestOptions options);
 
   @POST("/s/v1/friend/get")
   Future<BaseResponse<UserInfo?>> getUserInfoFromId(

+ 39 - 17
lib/data/api/atmob_api.g.dart

@@ -439,29 +439,26 @@ class _AtmobApi implements AtmobApi {
   }
 
   @override
-  Future<BaseResponse<QueryTrackResponse>> queryTrack(
-      QueryTrackRequest request) async {
+  Future<BaseResponse<QueryTrackResponse>> queryTrack(QueryTrackRequest request,
+      RequestOptions options,) async {
     final _extra = <String, dynamic>{};
     final queryParameters = <String, dynamic>{};
     final _headers = <String, dynamic>{};
     final _data = <String, dynamic>{};
     _data.addAll(request.toJson());
-    final _options = _setStreamType<BaseResponse<QueryTrackResponse>>(Options(
+    final newOptions = newRequestOptions(options);
+    newOptions.extra.addAll(_extra);
+    newOptions.headers.addAll(_dio.options.headers);
+    newOptions.headers.addAll(_headers);
+    final _options = newOptions.copyWith(
       method: 'POST',
-      headers: _headers,
-      extra: _extra,
-    )
-        .compose(
-          _dio.options,
-          '/s/v1/location/track/query',
-          queryParameters: queryParameters,
-          data: _data,
-        )
-        .copyWith(
-            baseUrl: _combineBaseUrls(
-          _dio.options.baseUrl,
-          baseUrl,
-        )));
+      baseUrl: _combineBaseUrls(
+        _dio.options.baseUrl,
+        baseUrl,
+      ),
+      queryParameters: queryParameters,
+      path: '/s/v1/location/track/query',
+    )..data = _data;
     final _result = await _dio.fetch<Map<String, dynamic>>(_options);
     late BaseResponse<QueryTrackResponse> _value;
     try {
@@ -1241,6 +1238,31 @@ class _AtmobApi implements AtmobApi {
     return _value;
   }
 
+  RequestOptions newRequestOptions(Object? options) {
+    if (options is RequestOptions) {
+      return options as RequestOptions;
+    }
+    if (options is Options) {
+      return RequestOptions(
+        method: options.method,
+        sendTimeout: options.sendTimeout,
+        receiveTimeout: options.receiveTimeout,
+        extra: options.extra,
+        headers: options.headers,
+        responseType: options.responseType,
+        contentType: options.contentType.toString(),
+        validateStatus: options.validateStatus,
+        receiveDataWhenStatusError: options.receiveDataWhenStatusError,
+        followRedirects: options.followRedirects,
+        maxRedirects: options.maxRedirects,
+        requestEncoder: options.requestEncoder,
+        responseDecoder: options.responseDecoder,
+        path: '',
+      );
+    }
+    return RequestOptions(path: '');
+  }
+
   RequestOptions _setStreamType<T>(RequestOptions requestOptions) {
     if (T != dynamic &&
         !(requestOptions.responseType == ResponseType.bytes ||

+ 7 - 2
lib/data/repositories/track_repository.dart

@@ -1,3 +1,4 @@
+import 'package:dio/dio.dart';
 import 'package:injectable/injectable.dart';
 import 'package:location/base/app_base_request.dart';
 import 'package:location/data/api/atmob_api.dart';
@@ -23,8 +24,12 @@ class TrackRepository {
       required int? endTime,
       required String? userId}) {
     return atmobApi
-        .queryTrack(QueryTrackRequest(
-            startTime: startTime, endTime: endTime, userId: userId))
+        .queryTrack(
+            QueryTrackRequest(
+                startTime: startTime, endTime: endTime, userId: userId),
+            RequestOptions(
+                receiveTimeout: Duration(seconds: 30),
+                connectTimeout: Duration(minutes: 2)))
         .then(HttpHandler.handle(true));
   }
 }