我无法使用存储在 firebase 存储中的 PDFViewer 查看 PDF

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

我是 Flutter 的新手。我对保存在 firebase 存储和 firebase 数据库中的 Pdf View 有疑问。我可以将 pdf 上传到存储并将 pdf 地址从存储保存到 firestore 数据库。我也可以在我的应用程序中阅读 pdf 地址,但 View 未显示此 pdf。没有人能帮帮我吗?

import 'dart:math';
import 'dart:typed_data';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:file_picker/file_picker.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart';
import 'package:flutter_cached_pdfview/flutter_cached_pdfview.dart';


main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options:
  const FirebaseOptions(apiKey: 'AIzaSyCXLARHpyIfXiB8QRgijj1nsPTfXf_Ra6k',
      appId: '1:719137220947:android:4afa9a85243a7d0eb9d9a6',
      messagingSenderId: '719137220947',
      projectId: 'fir-son-60ef4',
      storageBucket:'gs://fir-son-60ef4.appspot.com'));
  runApp(const MaterialApp(
  debugShowCheckedModeBanner: false,
  home: MyAppkitapoku(),
  ));
}


class MyAppkitapoku extends StatefulWidget {
  const MyAppkitapoku({Key? key}) : super(key: key);

  @override
  State<MyAppkitapoku> createState() => _MyAppkitapokuState();
}

class _MyAppkitapokuState extends State<MyAppkitapoku> {
  String url="";
  int number=0;

  uploadDataToFirebase()async {
    //generate random number
    number = Random().nextInt(10);
    //pick PDF File
    FilePickerResult? result = await FilePicker.platform.pickFiles();
    if (result != null) {
      Uint8List? pick = result.files.first.bytes;
      String file = result.files.first.name;
      file.replaceAll(" ", "_");

      // Upload file
      var task = await FirebaseStorage.instance.ref(file).putData(
          pick!);

      TaskSnapshot snapshot = task;
      url = await snapshot.ref.getDownloadURL();

      //upload url to cloud
      await FirebaseFirestore.instance
          .collection("kitaplar")
          .doc()
          .set({
        'url': url,
        'kitapadi': "Kitap: $number $file"});

    }
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("PDF Oku"),
      ),
      body: StreamBuilder(
        stream: FirebaseFirestore.instance.collection("kitaplar").snapshots(),
        builder: (context,AsyncSnapshot<QuerySnapshot> snapshot){

          if (snapshot.hasData) {
            return ListView.builder(
                itemCount: snapshot.data!.docs.length,
                itemBuilder: (context, i) {
              QueryDocumentSnapshot x = snapshot.data!.docs[i];
              return InkWell(
                onTap: () {Navigator.push(context, MaterialPageRoute(builder: (context)=>
                  View(url: x['url'])//PDFViewer(url: x["url"]),
                ));
                  debugPrint(x['url']);},

                child: Container(
                  margin: const EdgeInsets.symmetric(vertical: 10),
                  child: Text(x["kitapadi"]),
                ),
              );
            }
            );
          }
          return const Center(
            child: CircularProgressIndicator(),
          );
        },
      ),

      floatingActionButton: FloatingActionButton(onPressed: uploadDataToFirebase,child: const Icon(Icons.add),) ,
    );
  }
}



class View extends StatelessWidget {
  final _pdfViewerController=PdfViewerController();
  final String url;
  View({super.key, required this.url});
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("PDF Görüntüle-View"),
      ),
      body:
        SfPdfViewer.network(
            url,
          controller: _pdfViewerController,
      ),

    );
  }
}



class PDFViewer extends StatelessWidget {
  final String url;
  const PDFViewer({super.key, required this.url});
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('PDF Görüntüle- PDFViewer'),
      ),
      body: const PDF().fromUrl(
        url,
        placeholder: (progress) => const Center(child: CircularProgressIndicator()),
        errorWidget: (error) => const Center(child: Text('Yükleme Hatası'),),
      ),
    );
  }
}

我尝试通过 2 个不同的视图(View 和 PdfViewer)查看视图,但我都无法成功。 Flutter 不会给出任何错误警告。同样,flutter doctor 中没有出现任何错误。

我检查了 debugPrint() 以查看是否可以将 PDF url 从存储提取到数据库,然后从那里提取到我的应用程序,我看到我可以提取 pdf 地址的 url,当我将此 url 键入资源管理器时,我的文件被显示。 [[enter image description here](https://i.stack.imgur.com/elY4P.png)](https://i.stack.imgur.com/cKOei.png)

flutter firebase storage pdfview
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.