如何使用DIO在flutter中下载PDF文件

问题描述 投票:0回答:1

我正在开发一个项目,我想下载 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;
  }
flutter dart download dio
1个回答
0
投票

您可以将对

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>
)。

© www.soinside.com 2019 - 2024. All rights reserved.