#flutter
#flutter
Вопрос:
У меня есть приложение электронной коммерции flutter, в котором есть страница OrderDetails, я хочу преобразовать всю страницу в PDF, используя пакет flutter pdf, так как это было бы удобнее, потому что данные извлекаются из FirebaseFirestore. Есть ли способ, которым я могу этого добиться?
я хочу преобразовать весь экран flutter в PDF, используя эту библиотеку
Комментарии:
1. с какой проблемой вы столкнулись?
Ответ №1:
Вы можете сделать снимок экрана, используя этот скриншот пакета
затем добавьте это изображение в документ PDF и сохраните его
import 'dart:io';
import 'dart:typed_data';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart ' as pw;
Future getPdf(Uint8List screenShot) async {
pw.Document pdf = pw.Document();
pdf.addPage(
pw.Page(
pageFormat: PdfPageFormat.a4,
build: (context) {
return pw.Expanded(
child: pw.Image(PdfImage.file(pdf.document, bytes: screenShot), fit: pw.BoxFit.contain)
);
},
),
);
File pdfFile = File('Your path File name');
pdfFile.writeAsBytesSync(pdf.save());
}
Комментарии:
1. предоставленная вами ссылка относится к пакету pdf для flutter , pub.dev/packages/screenshot это тот пакет, который вы указали как скриншот?
2. О, да, извините, я виноват. Да, это тот самый.
3. спасибо за ваш ответ, попробую и сообщу вам о результате.
4. @IshangaVidusha Я получил эту ошибку « Тип аргумента ‘PdfImage’ не может быть присвоен типу параметра ‘ImageProvider « в строке PdfImage(pdf.document, байты: скриншот), fit: pw.BoxFit.contain). у вас есть какой-либо ответ на это. это было бы действительно полезно
5. @basudevnayak вы можете мне помочь с этим
Ответ №2:
полная информация: загрузка зависимостей в pubspec.yaml:
screenshot:
share_plus:
path_provider:
permission_handler:
импортируйте пакеты в свой файл dart:
import 'package:screenshot/screenshot.dart';
import 'package:share_plus/share_plus.dart';
import 'package:permission_handler/permission_handler.dart';
shareImage() async {
final uint8List = await screenshotController.capture();
String tempPath = (await getTemporaryDirectory()).path;
String fileName ="myFile";
if (await Permission.storage.request().isGranted) {
File file = await File('$tempPath/$fileName.png').create();
file.writeAsBytesSync(uint8List);
await Share.shareFiles([file.path]);
}
}
и вызовите shareImage() в любом месте:
GestureDetector(
onTap: (){ shareImage();},
child: ........,
),
не забудьте обернуть виджет желаний в:
Screenshot(
controller: screenshotController,
child: Text("This text will be captured as image"),
),
Ответ №3:
newest solution will be
shareImage() async {
final uint8List = await screenshotController.capture();
String tempPath = (await getTemporaryDirectory()).path;
String fileName =" ";>>>>>your file name between ""
File file = await File('$tempPath/$fileName" }.png').create();
file.writeAsBytesSync(uint8List!);
await Share.shareFiles([file.path]);
}
Комментарии:
1. Привет, @Mendes! Спасибо за ваше предложение! Код выглядит хорошо! Не могли бы вы подробнее рассказать о том, как это вписывается в полноценный виджет?
2. github.com/vmendesneto/calculadora_capital/blob/master/lib/src/…
Ответ №4:
import 'dart:io';
import 'dart:typed_data';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart ' as pw;
import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart';
Future screenToPdf(String fileName,Uint8List screenShot) async {
pw.Document pdf = pw.Document();
pdf.addPage(
pw.Page(
pageFormat: PdfPageFormat.a4,
build: (context) {
return pw.Expanded(
child: pw.Image(pw.MemoryImage(screenShot), fit: pw.BoxFit.contain),
);
},
),
);
String path = (await getTemporaryDirectory()).path;
File pdfFile = await File('$path/$fileName.pdf').create();
pdfFile.writeAsBytesSync(await pdf.save());
await Share.shareFiles([pdfFile.path]);
}