Flutter Firestore 集合转 PDF

Flutter Firestore Collection to PDF

我正在制作一个关于克里特岛的旅游应用程序,人们可以在其中查找最重要的景点。他们还可以将文档添加到自己的行程中,这是 firestore 上的一个集合“Selected”。

我希望人们能够从他们选择的项目中生成 pdf,以节省他们的Android/Iphone。

我有一个单独的 class 用于生成 pdf.. 但是如何将 snapshot.data() 传递给另一个 class?

onTap: () async {
                  getSelectedItems();
                  final pdfFile = await PdfApi.generateCenteredText(data);
                  PdfApi.openFile(pdfFile);
                  },


getSelectedItems(){
    mySelectedTrips.get().then((querySnapshot) {
      querySnapshot.docs.forEach((snapshot) {
        setState(() {
          data = snapshot.data();
          uid = snapshot['uid'];
          description = snapshot['description'];
          image = snapshot['image'];
        });
      });
    });
  }

您好,这是一个简短的示例,说明如何创建一页 pdf。

import 'dart:io';

import 'package:path_provider/path_provider.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart';

class PdfCreator {
  void createPdf(Snapshot snapshot) async {
    final Document pdf = Document();

    final page = Page(
      pageFormat: PdfPageFormat.a4,
      build: (Context context) {
        return Column(
          children: [
            Text(snapshot.snapshot['description']),
            Text(snapshot.snapshot['uid'].toString()),
            Image(MemoryImage(snapshot['image'])),
          ],
        );
      },
    );

    pdf.addPage(page);

    // Save file

    final output = await getTemporaryDirectory();
      var path = "${output.path}/test.pdf";
      final file = File(path);
      await file.writeAsBytes(await pdf.save());
  }
}

您可以增强它并在 foreach 循环中为每个元素创建一个页面,然后将其转换为 pdf 等等。

提示:如果你想在一个文件中使用 flutter widgets 和 pdf widgets 你可以导入 pdf 作为 p 例如:

import 'package:pdf/widgets.dart' as p;
...
final flutterWidget = Text('abc');
final pdfWidget = p.Text('def');