代码之家  ›  专栏  ›  技术社区  ›  markhorrocks

如何将数据传递到PDF页面生成函数

  •  0
  • markhorrocks  · 技术社区  · 6 年前

    我从屏幕上的浮动操作按钮调用了这个函数,但不知道如何将数据对象传递给这个函数。

    有人能帮忙吗?函数不接受任何参数。

    我这样称呼它:

                             FloatingActionButton(
                                    heroTag: 1,
                                    backgroundColor: Colors.yellow,
                                    onPressed: () {
                                      Printing.layoutPdf(onLayout: buildReceipt);
                                      },
                                    child: Icon(FontAwesomeIcons.print),
                                 ),
    

    这是我的代码:

    import 'dart:async';
    import 'package:pdf/pdf.dart';
    import 'package:pdf/widgets.dart';
    
    Future<List<int>> buildReceipt(PdfPageFormat format)  async {
    
    final Document pdf = Document();
    
    pdf.addPage(MultiPage(
    
      pageFormat: PdfPageFormat.a4.copyWith(marginBottom: 1.5 * PdfPageFormat.cm),
    
      crossAxisAlignment: CrossAxisAlignment.start,
    
      header: (Context context) {
    
        if (context.pageNumber == 1) {
          return null;
        }
    
        return Container(
    
            alignment: Alignment.centerRight,
    
            margin: const EdgeInsets.only(bottom: 3.0 * PdfPageFormat.mm),
    
            padding: const EdgeInsets.only(bottom: 3.0 * PdfPageFormat.mm),
    
            decoration: const BoxDecoration(
                border:
                    BoxBorder(bottom: true, width: 0.5, color: PdfColors.grey)),
    
            child: Text('Portable Document Format',
                style: Theme.of(context)
                    .defaultTextStyle
                    .copyWith(color: PdfColors.grey)));
      },
      footer: (Context context) {
        return Container(
            alignment: Alignment.centerRight,
            margin: const EdgeInsets.only(top: 1.0 * PdfPageFormat.cm),
            child: Text('Page ${context.pageNumber} of ${context.pagesCount}',
                style: Theme.of(context)
                    .defaultTextStyle
                    .copyWith(color: PdfColors.grey)));
      },
      build: (Context context) => <Widget>[
            Header(
                level: 0,
                child: Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: <Widget>[
                      Text('Portable Document Format', textScaleFactor: 2),
                      PdfLogo()
                    ])),
            Padding(padding: const EdgeInsets.all(10)),
            Paragraph(
                text:
                    'I want to display this ${data}')
          ]));
    
      return pdf.save();
    }
    
    0 回复  |  直到 6 年前
        1
  •  2
  •   Constantin N.    6 年前

    嗨,你可以把密码改成这个

    FloatingActionButton(
                                    heroTag: 1,
                                    backgroundColor: Colors.yellow,
                                    onPressed: () {
                                      Printing.layoutPdf(onLayout:(format)=> buildReceipt(format, data1, data2, data3));
                                      },
                                    child: Icon(FontAwesomeIcons.print),
                                 ),
    

    然后更改函数以匹配方法调用

    Future<List<int>> buildReceipt(PdfPageFormat format, data1, data2, data3)  async {
    //bla bla bla
    }