Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 为什么';这不会显示下一个pdf,但始终显示第一个pdf吗?_Flutter_Dart - Fatal编程技术网

Flutter 为什么';这不会显示下一个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

我是个新手。我正在做一个项目,它必须根据用户输入创建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.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格式显示,但作为新页面。