Flutter 在颤振中创建pdf

Flutter 在颤振中创建pdf,flutter,flutter-layout,flutter-dependencies,flutter-test,Flutter,Flutter Layout,Flutter Dependencies,Flutter Test,您好,我正在学习关于pdf创建的颤振教程。 我遵循了所有的步骤,在教程视频中它是有效的,但在我这方面它没有。我只是不明白为什么它对我这一方不起作用。我跟踪了我正在观看的视频的每一个细节。请向我解释我做错了什么,如果可以,如果可能,请纠正错误 import 'dart:io'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:path_provider/

您好,我正在学习关于pdf创建的颤振教程。 我遵循了所有的步骤,在教程视频中它是有效的,但在我这方面它没有。我只是不明白为什么它对我这一方不起作用。我跟踪了我正在观看的视频的每一个细节。请向我解释我做错了什么,如果可以,如果可能,请纠正错误

import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:ppmobile/installers/pdf/PDfPreview.dart';

class MyAppforPDf extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: PdfTest(),
    );
  }
}

class PdfTest extends StatelessWidget {
  final pdf = pw.Document();
  writeOnPdf() {
    pdf.addPage(
      pw.MultiPage(
        pageFormat: PdfPageFormat.a4,
        margin: pw.EdgeInsets.all(32),
        build: (pw.Context context) {
          return <pw.Widget>[
            pw.Header(
              level: 0,
              child: pw.Text("1st header"),
            ),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
            pw.Header(level: 1, child: pw.Text("2nd ehader")),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
            pw.Paragraph(text: "TEST PDF"),
          ];
        },
      ),
    );
  }

  Future savePdf() async {
    Directory documentDirectory = await getApplicationDocumentsDirectory();
    String documentPath = documentDirectory.path;
    File file = File("$documentPath/example.pdf");
    file.writeAsBytesSync(pdf.save()); <------------------------------- this is the one that has problem
  }

  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Container(
        width: double.infinity,
        height: double.infinity,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              "PDF TUTORIAL",
              style: TextStyle(fontSize: 34),
            )
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          writeOnPdf();
          await savePdf();

          Directory documentDirectory =
              await getApplicationDocumentsDirectory();
          String documentPath = documentDirectory.path;
          String fullPath = "$documentPath/example.pdf";

          Navigator.push(
            context,
            MaterialPageRoute(
              builder: (context) => PdfPreviewScreen(
                path: fullPath,
              ),
            ),
          );
        },
        child: Icon(Icons.save),
      ),
    );
  }
}
导入'dart:io';
进口“包装:颤振/cupertino.dart”;
进口“包装:颤振/材料.省道”;
导入“package:path_provider/path_provider.dart”;
输入‘package:pdf/pdf.dart’;
导入“package:pdf/widgets.dart”作为pw;
导入“包:ppmobile/installers/pdf/PDfPreview.dart”;
类MyAppforPDf扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:PdfTest(),
);
}
}
类PdfTest扩展了无状态小部件{
最终pdf=pw.Document();
writeOnPdf(){
pdf.addPage(
多页(
页面格式:PdfPageFormat.a4,
裕度:所有边缘集(32),
构建:(pw.Context){
返回[
压头(
级别:0,
子项:pw.Text(“第一个标题”),
),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
pw.标题(级别:1,子级:pw.文本(“第二个eHeader”),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
pw.段落(文本:“测试PDF”),
];
},
),
);
}
Future savePdf()异步{
Directory documentDirectory=等待getApplicationDocumentsDirectory();
字符串documentPath=documentDirectory.path;
File File=File(“$documentPath/example.pdf”);
file.writeAsBytesSync(pdf.save());PdfPreviewScreen(
路径:完整路径,
),
),
);
},
子:图标(Icons.save),
),
);
}
}

老实说,我不知道为什么。但是在“file.writeAsBytesSync(pdf.save());”上添加wait修复了它

所以

“file.writeAsBytesSync(pdf.save());”
“file.writeAsBytesSync(wait pdf.save());”

帮我修好了

感谢互联网上其他问答环节的osama asif给出的答案