#flutter #dart
#флаттер #dart
Вопрос:
Приложение Flutter выдало следующую ошибку:
тип ‘StatefulElement’ не является подтипом типа ‘Context’
Я использую следующие пакеты: PDF и печать.
Мне сообщили, что возможной причиной ошибки является вызов _visualizarPdf (context, path)
функции
Функция _visualizarPdf отображает PDF-файл с использованием пакета flutter_full_pdf_viewer, и это работает. Ошибка возникает, когда я нажимаю значок печати.
Функция, ответственная за создание оттиска, в соответствии с печатью пакета, является печатью.layoutPdf пакета принтера.
До того, как я пытался передать _visualizarPdf в StatelessWidget, вне функции _visualizarPdf, однако произошла другая ошибка, когда она передавалась таким образом, атрибуты возвращали null, не генерируя PDF
import 'dart:io';
import 'package:flutter_full_pdf_viewer/full_pdf_viewer_scaffold.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pdf/pdf.dart';
import 'package:printing/printing.dart';
Future<Uint8List> segundaViaReport(context, Orgao orgao) async {
final pw.Document pdf = pw.Document();
final String nomeMunicipio = orgao.descricao;
pw.Widget _header(pw.Context context) {
return pw.Column(
children: <pw.Widget>[
pw.Text(nomeMunicipio, textScaleFactor: 2),
pw.Divider(height: 2.0),
],
);
}
Widget _visualizarPdf(pw.Context context, pathDirectory) {
final String path = pathDirectory;
return PDFViewerScaffold(
appBar: AppBar(
title: Text(""),
actions: <Widget>[
IconButton(icon: Icon(Icons.print), onPressed: () {
Printing.layoutPdf(onLayout: (format) => segundaViaReport(context, orgao));
}),
],
),
path: path,
);
}
pdf.addPage(
pw.MultiPage(
orientation: pw.PageOrientation.portrait,
margin: pw.EdgeInsets.all(3.0 * PdfPageFormat.mm),
header: _header,
build: (pw.Context context) => [
pw.Wrap(children: <pw.Widget>[
pw.Column(
crossAxisAlignment: pw.CrossAxisAlignment.start,
children: <pw.Widget>[
_IdentificarObservacoes(orgao),
],
),
]),
],
),
);
final String dir = (await getApplicationDocumentsDirectory()).path;
final String path = '$dir/segunda_via.pdf';
final File file = File(path);
await file.writeAsBytes(pdf.save());
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => _visualizarPdf(context, path),
),
);
}
Комментарии:
1. Какая строка конкретно выдает ошибку?
2. Помогло бы, если бы вы опубликовали, как вы используете функцию, которую вы показываете в своем комментарии 😉 очевидно, что в какой-то момент вашего кода вы передаете контекст виджету, который на самом деле является виджетом с сохранением состояния. Похоже, решить проблему легко. Но сейчас я не понимаю, где вы используете свою функцию.