如何在flutter中显示从API响应中获取的pdf?

Max*_*x33 6 pdf http token flutter

我正在一个项目中工作,我必须出示用户完成课程的证书,有一个 API 的 URL,它使用令牌中的 get 方法来访问 pdf 文件,问题是我不知道如何使用 flutter 显示或将该响应转换为 pdf,\n我尝试使用 url_launcher 依赖项,因为在浏览器中正常显示 pdf,但问题是我需要将令牌传递给该 url。\n第二个我尝试的方法是获取 api 的响应并将其保存在临时文件中并使用 flutter_pdfview 依赖项,但它显示错误。\n这就是 api 的响应的样子:

\n
%PDF-1.4\n1 0 obj\n<<\n/Title (\xc3\xbe\xc3\xbf)\n/Creator (\xc3\xbe\xc3\xbf)\n/Producer (\xc3\xbe\xc3\xbfQt 5.5.1)\n/CreationDate (D:20211120205047)\n>>\nendobj\n2 0 obj\n<<\n/Type /Catalog\n/Pages 3 0 R\n>>\nendobj\n4 0 obj\n<<\n/Type /ExtGState\n/SA true\n/SM 0.02\n/ca 1.0\n/CA 1.0\n/AIS false\n
Run Code Online (Sandbox Code Playgroud)\n

这是我尝试过的:

\n
 Future LoadPDF(APIurl)async {\n    Map<String,String> Headers={\n      'Content-type': 'application/json; charset=UTF-8',\n      'Accept': 'application/json',\n      'Authorization': 'Bearer $userToken'\n    };\n    final response = await http.get(Uri.parse(APIurl),headers: Headers);\n    final bytes = response.bodyBytes;\n    // print(response.bodyBytes);\n    var dir = await getTemporaryDirectory();\n    File file = File(dir.path + "/data.pdf"); \n    await file.writeAsBytes(bytes, flush: true);\n    setState(() {\n    loadDocument(file);\n    });\n    // return file;\n    \n  }\n
Run Code Online (Sandbox Code Playgroud)\n

小智 0

您可以使用flutter_pdfview包来显示 pdf:

loadDocument(file) {
    PDFView(
      filePath: file.path,
      enableSwipe: true,
      swipeHorizontal: true,
      autoSpacing: false,
      pageFling: false,
      onRender: (_pages) {
        setState(() {
          pages = _pages;
          isReady = true;
        });
      },
      onError: (error) {
        print(error.toString());
      },
      onPageError: (page, error) {
        print('$page: ${error.toString()}');
      },
      onViewCreated: (PDFViewController pdfViewController) {
        _controller.complete(pdfViewController);
      },
      onPageChanged: (int page, int total) {
        print('page change: $page/$total');
      },
    ),
}
Run Code Online (Sandbox Code Playgroud)