Android Studio 加载pdf文件并在屏幕中呈现时出现问题

bq3bfh9z  于 2023-01-21  发布在  Android
关注(0)|答案(1)|浏览(229)

我尝试加载一个pdf文件,并呈现在屏幕上与以下代码:

import 'package:flutter/material.dart';
import 'package:pdf_viewer_plugin/pdf_viewer_plugin.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:file_picker/file_picker.dart';
import 'dart:io';
import 'dart:developer';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});
  @override
  FileLoad createState() => FileLoad();
}

class FileLoad extends State<MyApp> {
  String _filePath = "";

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Test PDF',
      theme: ThemeData(primarySwatch: Colors.blue,),
      home:
        Scaffold(
          backgroundColor: Colors.grey,
          bottomNavigationBar: BottomNavigationBar(
            items: const [
              BottomNavigationBarItem(icon: Icon(Icons.home), label: "Home"),
              BottomNavigationBarItem(icon: Icon(Icons.folder), label: "Load File")
            ],
            onTap: (int index) async {
              var go = 1;
              if (index == 1) {
                var status = await Permission.storage.status;
                if (status != PermissionStatus.granted) {
                  var result = await Permission.storage.request();
                  if (result != PermissionStatus.granted) {
                    go = 0;
                  }
                }
                if (go == 1) {
                  FilePickerResult? result = await FilePicker.platform.pickFiles();
                  if (result != null) {
                    File file = File(result.files.single.path!);
                    setState(() {
                      _filePath = file.path;
                      log('_filePath: $_filePath');
                    });
                  }
                }
              }
            },
          ),
          body:
            PdfView(path: _filePath, gestureNavigationEnabled: true,)
        )
    );
  }

我可以在浏览器中看到选择了正确文件路径的日志,但屏幕上没有呈现任何内容。代码有什么问题吗?
任何错误都会在控制台中触发。

fdx2calv

fdx2calv1#

对我来说,即使使用setState(),PdfView本身也不会加载最新的路径。我在使用其他PDF查看器插件时遇到过这个问题。
我通过将PDFView Package 到if语句中来解决这个问题,当没有加载路径时,会显示某种加载小部件。
就像这样:

String? _filePath;

 body:
       _filePath != null ? PdfView(path: _filePath, gestureNavigationEnabled: true,): Text("loading")

相关问题