web-dev-qa-db-ja.com

リリースモードの読み取り時にFlutterアプリがクラッシュするPDF

私のアプリにはPDFリーダーがあり、この関数を使用してURLからPDFを取得し、ファイルをローカルパスに保存します

  Future<File> getFileFromUrl(String url) async {
    try {
      var data = await http.get(url);
      var bytes = data.bodyBytes;
      var dir = await getApplicationSupportDirectory();
      File file = File("${dir.path}/some.pdf");

      File urlFile = await file.writeAsBytes(bytes);
      return urlFile;
    } catch (e) {
      throw Exception("Error opening url file");
    }
  }

このプロセスの後で、クラスを呼び出してこれを表示しますPDF新しいルートで

import 'package:flutter/material.Dart';
import 'package:flutter_pdfview/flutter_pdfview.Dart';

class CustomPdfView extends StatefulWidget {
  final String title;
  final String urlPdf;

  CustomPdfView(
    this.title,
    this.urlPdf
  );

  @override
  _CustomPdfViewState createState() => _CustomPdfViewState();
}

class _CustomPdfViewState extends State<CustomPdfView> {
  //int _totalPages = 0;
  //int _currentPage = 0;
  bool pdfReady = false;
  //PDFViewController _pdfViewController;

  @override
  Widget build(BuildContext context) {
    print('Aqui entra antes: ${widget.urlPdf}');
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Stack(
        children: <Widget>[
          PDFView(
            filePath: widget.urlPdf,
            autoSpacing: true,
            enableSwipe: true,
            pageSnap: true,
            swipeHorizontal: true,
            nightMode: false,
            onError: (e) {
              print("error $e");
            },
            onRender: (_pages) {
              setState(() {
                //_totalPages = _pages;
                pdfReady = true;
              });
            },
            onViewCreated: (PDFViewController vc) {
              //_pdfViewController = vc;
            },
            onPageChanged: (int page, int total) {
              setState(() {});
            },
            onPageError: (page, e) {},
          ),
          !pdfReady
              ? Center(
                  child: CircularProgressIndicator(),
                )
              : Offstage()
        ],
      ),
    );
  }
}

デバッグモードではすべて正常に動作しますが、リリース時にアプリを実行すると、CustomPdfViewでアプリがクラッシュします。

エラーが何なのかわからない、すでに追加した、/ app/src/main/AndroidManifest.xmlのSTORAGE権限

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />

また、アプリがリリース時に実行されているため、コンソールにエラー行を表示する方法がわかりません。

3
GarnachaSoft

同じ問題....私はそれを修正しました

  1. aPKのビルド後にプロジェクトをクリーンアップする

それでも問題が解決しない場合は、これらのコマンドを試してください

フラッタービルドapk --no-shrink

フラッタービルドapk --release --split-per-abi --no-shrink

4
akshay yadav