Тип ‘StatefulElement’ не является подтипом типа ‘Context’ — исключение, перехваченное библиотекой widgets

#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. Помогло бы, если бы вы опубликовали, как вы используете функцию, которую вы показываете в своем комментарии 😉 очевидно, что в какой-то момент вашего кода вы передаете контекст виджету, который на самом деле является виджетом с сохранением состояния. Похоже, решить проблему легко. Но сейчас я не понимаю, где вы используете свою функцию.