我正在开发一个项目,我想下载 PDF 文件并将其显示在屏幕上。我编写了下面的代码来实现它,但它给了我下面提到的错误。请查看下面的错误和代码,并告诉我如何实现它。我尝试了很多不同的事情,但都没有成功。
谢谢。
错误:
E/flutter (14805): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DioError [DioErrorType.response]: Http status error [400]
E/flutter (14805): Source stack:
E/flutter (14805): #0 DioMixin.fetch (package:dio/src/dio_mixin.dart:488:35)
E/flutter (14805): #1 DioMixin.request (package:dio/src/dio_mixin.dart:483:12)
E/flutter (14805): #2 DioForNative.download (package:dio/src/entry/dio_for_native.dart:84:24)
E/flutter (14805): #3 OpenBalanceController.getOpenBalancePDF (package:otrack/views/reports/controllers/open_balance_controller.dart:143:26)
E/flutter (14805): <asynchronous suspension>
E/flutter (14805):
E/flutter (14805): #0 DioMixin.fetch.<anonymous closure> (package:dio/src/dio_mixin.dart:643:7)
E/flutter (14805): #1 _RootZone.runBinary (dart:async/zone.dart:1665:54)
E/flutter (14805): #2 _FutureListener.handleError (dart:async/future_impl.dart:162:22)
E/flutter (14805): #3 Future._propagateToListeners.handleError (dart:async/future_impl.dart:779:47)
E/flutter (14805): #4 Future._propagateToListeners (dart:async/future_impl.dart:800:13)
E/flutter (14805): #5 Future._completeError (dart:async/future_impl.dart:575:5)
E/flutter (14805): #6 _SyncCompleter._completeError (dart:async/future_impl.dart:51:12)
E/flutter (14805): #7 _Completer.completeError (dart:async/future_impl.dart:23:5)
E/flutter (14805): #8 Future.any.onError (dart:async/future.dart:617:45)
E/flutter (14805): #9 _RootZone.runBinary (dart:async/zone.dart:1665:54)
E/flutter (14805): #10 _FutureListener.handleError (dart:async/future_impl.dart:162:22)
E/flutter (14805): #11 Future._propagateToListeners.handleError (dart:async/future_impl.dart:779:47)
E/flutter (14805): #12 Future._propagateToListeners (dart:async/future_impl.dart:800:13)
E/flutter (14805): #13 Future._completeError (dart:async/future_impl.dart:575:5)
E/flutter (14805): #14 Future._asyncCompleteError.<anonymous closure> (dart:async/future_impl.dart:666:7)
E/flutter (14805): #15 _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
E/flutter (14805): #16 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
我的 DIO Api 代码:
Future getOpenBalancePDF() async {
isLoading.value = true;
final headers = await BaseClient.generateHeaders();
Dio dioWithHeaders = Dio(BaseOptions(
receiveTimeout: 999999, sendTimeout: 999999, headers: headers));
var dir = await getApplicationDocumentsDirectory();
String path = "${dir.path}/TransactionSummary.pdf";
final data = FormData.fromMap({
"orderType": 0,
"fromDate": "2000-01-01",
"toDate": "2023-12-01",
"customerFilterList": [1387, 1460],
"exportFormat": 1,
"openBalance": true
});
await dioWithHeaders.download(
ApiConstants.POST_CUSTOMER_OPEN_BALANCE_REPORT,
data: data,
(Headers headers) {
headers.map.values;
return path;
},
);
if (path.isNotEmpty) {
Get.to(
() => PDFScreen(
path: path,
),
);
}
isLoading.value = false;
}
您可以将对
await dioWithHeaders.download
的调用放入 try 块中,捕获 DioError
并处理它:
try {
await dioWithHeaders.download(...);
} on DioError catch (e) {
// Handle error here: Your error is a network error.
}
此外,函数
Future
应该返回 Future<dynamic>
,而不是 getOpenBalancePDF
(实际上是 Future<void>
)。