Flutter 为什么';这不会显示下一个pdf,但始终显示第一个pdf吗?
我是个新手。我正在做一个项目,它必须根据用户输入创建PDF。在第一次输入中,它创建PDF并预览它。但在接下来的输入中,它不会显示新的PDF,而是显示旧的PDF。我不知道怎么了 我用来预览和创建pdf的包Flutter 为什么';这不会显示下一个pdf,但始终显示第一个pdf吗?,flutter,dart,Flutter,Dart,我是个新手。我正在做一个项目,它必须根据用户输入创建PDF。在第一次输入中,它创建PDF并预览它。但在接下来的输入中,它不会显示新的PDF,而是显示旧的PDF。我不知道怎么了 我用来预览和创建pdf的包 import 'package:flutter_full_pdf_viewer/full_pdf_viewer_scaffold.dart'; import 'package:path_provider/path_provider.dart'; import 'package:pdf/pdf.d
import 'package:flutter_full_pdf_viewer/full_pdf_viewer_scaffold.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
final pdf = pw.Document();
writeOnPdf() {
String name = controllerName.text;
String drugs = controllerDrugs.text;
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("Methsuwa Family Clinics",
style: pw.TextStyle(fontSize: 40)) ),
pw.Header(child: pw.Text('Name :- ' + name, style:
pw.TextStyle(fontSize:16))),
pw.Paragraph(text: 'Medications :-'),
pw.Paragraph(text: drugs)
];
}));
}
Future savePdf() async {
String name = controllerName.text;
Directory documentDirectory = await getApplicationDocumentsDirectory();
String documentPath = documentDirectory.path;
File file = File("$documentPath/" + name + ".pdf");
file.writeAsBytesSync(await pdf.save());
}
创建pdf的代码
import 'package:flutter_full_pdf_viewer/full_pdf_viewer_scaffold.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
final pdf = pw.Document();
writeOnPdf() {
String name = controllerName.text;
String drugs = controllerDrugs.text;
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("Methsuwa Family Clinics",
style: pw.TextStyle(fontSize: 40)) ),
pw.Header(child: pw.Text('Name :- ' + name, style:
pw.TextStyle(fontSize:16))),
pw.Paragraph(text: 'Medications :-'),
pw.Paragraph(text: drugs)
];
}));
}
Future savePdf() async {
String name = controllerName.text;
Directory documentDirectory = await getApplicationDocumentsDirectory();
String documentPath = documentDirectory.path;
File file = File("$documentPath/" + name + ".pdf");
file.writeAsBytesSync(await pdf.save());
}
调用pdf
onPressed: () async {
String name = controllerName.text;
// Add your onPressed code here!
writeOnPdf();
await savePdf();
Directory documentDirectory =
await getApplicationDocumentsDirectory();
String documentPath = documentDirectory.path;
String fullPath = ("$documentPath/" + name + ".pdf"); // name is the file name which user inputs.
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PdfPreviewScreen(path: fullPath)));
这是PDF显示类
class PdfPreviewScreen extends StatelessWidget{
final String path;
PdfPreviewScreen({this.path});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar:AppBar(
leading: IconButton(
icon: Icon(Icons.menu),
onPressed: null,
tooltip: "Navigation Menu",
),
title: Text("Methsuwa Family Clinics"),
),
body: PDFViewerScaffold(path: path),
);
}
}
final pdf=pw.Document();
writeOnPdf(){
字符串名称=controllerName.text;
字符串药物=controllerDrugs.text;
pdf.addPage(pw.MultiPage(
页面格式:PdfPageFormat.a4,
裕度:所有边缘集(32),
构建:(pw.Context){
返回[
pw.Header(级别:0,儿童:pw.Text(“Methsuwa家庭诊所”),
样式:pw.TextStyle(fontSize:40)),
pw.Header(子项:pw.Text('Name:-')+名称,样式:
pw.TextStyle(fontSize:16)),
pw.段落(正文:“药物:-”),
pw.第段(正文:药物)
];
}));
}
在这里,当我想要创建时,我会一次又一次地更新同一个名为pdf的变量。不仅如此,我还创建了多页pdf。所以我每次运行它都会创建一个新页面。这就是我的代码的问题。以下是每次使用新pdf的完整工作代码:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:open_file/open_file.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyStatefulWidget(),
);
}
}
class MyStatefulWidget extends StatefulWidget {
const MyStatefulWidget({Key key}) : super(key: key);
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
final nameText = TextEditingController();
final drugsText = TextEditingController();
@override
void dispose() {
nameText.dispose();
drugsText.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
controller: nameText,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'Enter Name',
),
),
TextField(
controller: drugsText,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'Enter Drug',
),
),
TextButton(
onPressed: () async {
String name = nameText.text;
String drugs = drugsText.text;
var pdf = pw.Document(); //pdf document
// Pdf creation
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("Methsuwa Family Clinics",
style: pw.TextStyle(fontSize: 40))),
pw.Header(
child: pw.Text('Name :- ' + name,
style: pw.TextStyle(fontSize: 16))),
pw.Paragraph(text: 'Medications :-'),
pw.Paragraph(text: drugs)
];
}));
}
//Saving pdf
Future savePdf() async {
Directory documentDirectory =
await getApplicationDocumentsDirectory();
String documentPath = documentDirectory.path;
File file = File("$documentPath/" + name + ".pdf");
file.writeAsBytesSync(await pdf.save());
}
writeOnPdf();
await savePdf();
Directory documentDirectory =
await getApplicationDocumentsDirectory();
String documentPath = documentDirectory.path;
String fullPath = ("$documentPath/" + name + ".pdf");
//Opening created pdf
OpenFile.open(fullPath);
},
child: Text('Click To Create PDF'),
),
],
),
),
),
);
}
}
还请澄清您用于创建和查看pdf的包装。同时添加创建pdf的代码。@DC很抱歉出错。感谢提供更多信息,但您仍然忘记提供创建pdf的输入方式。我想是用了
writeOnPdf()
。@DC我很抱歉没有提供必要的细节。很高兴你发现了这个问题。起初,我认为您希望新数据以相同的pdf格式显示,但作为新页面。