У меня проблемы с объединением 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;
}
}