Текущая страница не закрыта с помощью PdfRenderer Flutter - PullRequest
0 голосов
/ 29 мая 2020

У меня проблемы с объединением PageTurn с ImageLoader. Я работаю над приложением, которое открывает файл PDF в сочетании с эффектом переворота страницы. Я использую 2 пакета

page_turn: https://pub.flutter-io.cn/packages/page_turn

native_pdf_renderer: https://pub.dev/packages/native_pdf_renderer

Пример кода native_pdf_renderer I изменил PageView на PageTurn, но когда я запустил приложение, оно вылетело «Процесс: com.wappos.flutter_app_3, PID: 21799 java .lang.IllegalStateException: Текущая страница не закрыта».

Мне нужна помощь, я просто пришел с флаттером.

        import 'dart:async';

    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 'package:native_pdf_renderer/native_pdf_renderer.dart';
    import 'package:page_turn/page_turn.dart';

    void main() => runApp(ExampleApp());

    class ExampleApp extends StatelessWidget {
      Future<PdfDocument> _getDocument() async {
          return await PdfDocument.openAsset('assets/mypdf.pdf');
      }

      @override
      Widget build(BuildContext context) {
        SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
          statusBarColor: Colors.transparent,
          statusBarBrightness: Brightness.light,
          statusBarIconBrightness: Brightness.dark,
          systemNavigationBarColor: Colors.white,
          systemNavigationBarIconBrightness: Brightness.dark,
        ));

        final storage = Map<int, PdfPageImage>();

        return MaterialApp(
          title: 'PDF View example',
          color: Colors.white,
          home: Scaffold(
            body: FutureBuilder(
              future: _getDocument(),
              builder: (context, AsyncSnapshot<PdfDocument> snapshot) {
                if (!snapshot.hasData) {
                  return Center(
                    child: CircularProgressIndicator(),
                  );
                }

                if (snapshot.hasError) {
                  return Center(
                    child: Text(snapshot.error.toString()),
                  );
                }

                return PageTurn(
                  children: <Widget>[
                    ImageLoader(
                      storage: storage,
                      document: snapshot.data,
                      pageNumber: 1,
                    ),
                    ImageLoader(
                      storage: storage,
                      document: snapshot.data,
                      pageNumber: 2,
                    ),
                  ],
                );
              },
            ),
          ),
        );
      }
    }

    class ImageLoader extends StatelessWidget {
      ImageLoader({
        @required this.storage,
        @required this.document,
        @required this.pageNumber,
        Key key,
      }) : super(key: key);

      final Map<int, PdfPageImage> storage;
      final PdfDocument document;
      final int pageNumber;

      @override
      Widget build(BuildContext context) => FutureBuilder(
        future: _renderPage(),
        builder: (context, AsyncSnapshot<PdfPageImage> snapshot) {
          if (snapshot.hasError) {
            return Center(
              child: Text('Error'),
            );
          }
          if (!snapshot.hasData) {
            return Center(
              child: CircularProgressIndicator(),
            );
          }

          return Image(
            image: MemoryImage(snapshot.data.bytes),
          );
        },
      );

      Future<PdfPageImage> _renderPage() async {
        if (storage.containsKey(pageNumber)) {
          return storage[pageNumber];
        }
        final page = await document.getPage(pageNumber);
        final pageImage = await page.render(
          width: page.width * 2,
          height: page.height * 2,
          format: PdfPageFormat.PNG,
        );
        await page.close();
        storage[pageNumber] = pageImage;
        return pageImage;
      }
    }
...