Showing
6 changed files
with
432 additions
and
6 deletions
| @@ -16,6 +16,7 @@ | @@ -16,6 +16,7 @@ | ||
| 16 | CLNG_SRC=$(shell find printing/ios -name '*.java' -o -name '*.m' -o -name '*.h') $(shell find printing/android -name '*.java' -o -name '*.m' -o -name '*.h') | 16 | CLNG_SRC=$(shell find printing/ios -name '*.java' -o -name '*.m' -o -name '*.h') $(shell find printing/android -name '*.java' -o -name '*.m' -o -name '*.h') |
| 17 | SWFT_SRC=$(shell find . -name '*.swift') | 17 | SWFT_SRC=$(shell find . -name '*.swift') |
| 18 | FONTS=pdf/open-sans.ttf pdf/open-sans-bold.ttf pdf/roboto.ttf pdf/noto-sans.ttf pdf/genyomintw.ttf | 18 | FONTS=pdf/open-sans.ttf pdf/open-sans-bold.ttf pdf/roboto.ttf pdf/noto-sans.ttf pdf/genyomintw.ttf |
| 19 | + COV_PORT=9292 | ||
| 19 | 20 | ||
| 20 | all: $(FONTS) format | 21 | all: $(FONTS) format |
| 21 | 22 | ||
| @@ -45,12 +46,22 @@ format-clang: $(CLNG_SRC) | @@ -45,12 +46,22 @@ format-clang: $(CLNG_SRC) | ||
| 45 | format-swift: $(SWFT_SRC) | 46 | format-swift: $(SWFT_SRC) |
| 46 | swiftformat --swiftversion 4.2 $^ | 47 | swiftformat --swiftversion 4.2 $^ |
| 47 | 48 | ||
| 48 | -test: $(FONTS) | 49 | +.coverage: |
| 50 | + pub global activate coverage | ||
| 51 | + touch $@ | ||
| 52 | + | ||
| 53 | +node_modules: | ||
| 54 | + npm install lcov-summary | ||
| 55 | + | ||
| 56 | +test: $(FONTS) .coverage node_modules | ||
| 49 | cd pdf; pub get | 57 | cd pdf; pub get |
| 50 | - cd pdf; pub run test | 58 | + cd pdf; pub global run coverage:collect_coverage --port=$(COV_PORT) -o coverage.json --resume-isolates --wait-paused &\ |
| 59 | + dart --enable-asserts --disable-service-auth-codes --enable-vm-service=$(COV_PORT) --pause-isolates-on-exit test/all_tests.dart | ||
| 60 | + cd pdf; pub global run coverage:format_coverage --packages=.packages -i coverage.json --report-on lib --lcov --out lcov.info | ||
| 51 | cd pdf; for EXAMPLE in $(shell cd pdf; find example -name '*.dart'); do dart $$EXAMPLE; done | 61 | cd pdf; for EXAMPLE in $(shell cd pdf; find example -name '*.dart'); do dart $$EXAMPLE; done |
| 52 | cd printing/example; flutter packages get | 62 | cd printing/example; flutter packages get |
| 53 | cd printing/example; flutter test | 63 | cd printing/example; flutter test |
| 64 | + node_modules/.bin/lcov-summary pdf/lcov.info | ||
| 54 | 65 | ||
| 55 | clean: | 66 | clean: |
| 56 | git clean -fdx -e .vscode | 67 | git clean -fdx -e .vscode |
| @@ -72,8 +83,8 @@ publish-printing: format clean | @@ -72,8 +83,8 @@ publish-printing: format clean | ||
| 72 | analyze: .pana | 83 | analyze: .pana |
| 73 | @find pdf -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';' | 84 | @find pdf -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';' |
| 74 | @find printing -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';' | 85 | @find printing -name pubspec.yaml -exec sed -i -e 's/^dependency_overrides:/_dependency_overrides:/g' '{}' ';' |
| 75 | - @pana --no-warning --source path pdf 2> /dev/null | python pana_report.py | ||
| 76 | - @pana --no-warning --source path printing 2> /dev/null | python pana_report.py | 86 | + @pub global run pana --no-warning --source path pdf 2> /dev/null | python pana_report.py |
| 87 | + @pub global run pana --no-warning --source path printing 2> /dev/null | python pana_report.py | ||
| 77 | @find pdf -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';' | 88 | @find pdf -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';' |
| 78 | @find printing -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';' | 89 | @find printing -name pubspec.yaml -exec sed -i -e 's/^_dependency_overrides:/dependency_overrides:/g' '{}' ';' |
| 79 | 90 | ||
| @@ -83,8 +94,8 @@ analyze: .pana | @@ -83,8 +94,8 @@ analyze: .pana | ||
| 83 | 94 | ||
| 84 | fix: .dartfix | 95 | fix: .dartfix |
| 85 | cd pdf; pub get | 96 | cd pdf; pub get |
| 86 | - cd pdf; dartfix --overwrite . | 97 | + cd pdf; pub global run dartfix:fix --overwrite . |
| 87 | cd printing; flutter packages get | 98 | cd printing; flutter packages get |
| 88 | - cd printing; dartfix --overwrite . | 99 | + cd printing; pub global run dartfix:fix --overwrite . |
| 89 | 100 | ||
| 90 | .PHONY: test format format-dart format-clang clean publish-pdf publish-printing analyze | 101 | .PHONY: test format format-dart format-clang clean publish-pdf publish-printing analyze |
pdf/test/all_tests.dart
0 → 100644
| 1 | +/* | ||
| 2 | + * Copyright (C) 2017, David PHAM-VAN <dev.nfet.net@gmail.com> | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | + | ||
| 17 | +library pdf.all_tests; | ||
| 18 | + | ||
| 19 | +import '../example/main.dart' as example; | ||
| 20 | +import 'annotations_test.dart' as annotations; | ||
| 21 | +import 'colors_test.dart' as colors; | ||
| 22 | +import 'complex_test.dart' as complex; | ||
| 23 | +import 'jpeg_test.dart' as jpeg; | ||
| 24 | +import 'metrics_test.dart' as metrics; | ||
| 25 | +import 'minimal_test.dart' as minimal; | ||
| 26 | +import 'ttf_test.dart' as ttf; | ||
| 27 | +import 'type1_test.dart' as type1; | ||
| 28 | +import 'widget_basic_test.dart' as widget_basic; | ||
| 29 | +import 'widget_clip_test.dart' as widget_clip; | ||
| 30 | +import 'widget_container_test.dart' as widget_container; | ||
| 31 | +import 'widget_test.dart' as widget; | ||
| 32 | + | ||
| 33 | +void main() { | ||
| 34 | + annotations.main(); | ||
| 35 | + colors.main(); | ||
| 36 | + complex.main(); | ||
| 37 | + jpeg.main(); | ||
| 38 | + metrics.main(); | ||
| 39 | + minimal.main(); | ||
| 40 | + ttf.main(); | ||
| 41 | + type1.main(); | ||
| 42 | + widget_basic.main(); | ||
| 43 | + widget_clip.main(); | ||
| 44 | + widget_container.main(); | ||
| 45 | + widget.main(); | ||
| 46 | + example.main(); | ||
| 47 | +} |
pdf/test/widget_basic_test.dart
0 → 100644
| 1 | +/* | ||
| 2 | + * Copyright (C) 2017, David PHAM-VAN <dev.nfet.net@gmail.com> | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | + | ||
| 17 | +import 'dart:io'; | ||
| 18 | + | ||
| 19 | +import 'package:test/test.dart'; | ||
| 20 | +import 'package:pdf/pdf.dart'; | ||
| 21 | +import 'package:pdf/widgets.dart'; | ||
| 22 | + | ||
| 23 | +Document pdf; | ||
| 24 | + | ||
| 25 | +void main() { | ||
| 26 | + setUpAll(() { | ||
| 27 | + Document.debug = true; | ||
| 28 | + pdf = Document(); | ||
| 29 | + }); | ||
| 30 | + | ||
| 31 | + test('Basic Widgets Align', () { | ||
| 32 | + pdf.addPage(Page( | ||
| 33 | + build: (Context context) => Align( | ||
| 34 | + alignment: Alignment.bottomRight, | ||
| 35 | + child: SizedBox(width: 100, height: 100, child: PdfLogo()), | ||
| 36 | + ))); | ||
| 37 | + }); | ||
| 38 | + | ||
| 39 | + test('Basic Widgets AspectRatio', () { | ||
| 40 | + pdf.addPage(Page( | ||
| 41 | + build: (Context context) => AspectRatio( | ||
| 42 | + aspectRatio: 1.618, | ||
| 43 | + child: Placeholder(), | ||
| 44 | + ))); | ||
| 45 | + }); | ||
| 46 | + | ||
| 47 | + test('Basic Widgets Center', () { | ||
| 48 | + pdf.addPage(Page( | ||
| 49 | + build: (Context context) => Center( | ||
| 50 | + child: SizedBox(width: 100, height: 100, child: PdfLogo()), | ||
| 51 | + ))); | ||
| 52 | + }); | ||
| 53 | + | ||
| 54 | + test('Basic Widgets ConstrainedBox', () { | ||
| 55 | + pdf.addPage(Page( | ||
| 56 | + build: (Context context) => ConstrainedBox( | ||
| 57 | + constraints: const BoxConstraints.tightFor(height: 300), | ||
| 58 | + child: Placeholder()), | ||
| 59 | + )); | ||
| 60 | + }); | ||
| 61 | + | ||
| 62 | + test('Basic Widgets CustomPaint', () { | ||
| 63 | + pdf.addPage(Page( | ||
| 64 | + build: (Context context) => CustomPaint( | ||
| 65 | + size: const PdfPoint(200, 200), | ||
| 66 | + painter: (PdfGraphics canvas, PdfPoint size) { | ||
| 67 | + canvas | ||
| 68 | + ..drawEllipse(size.x / 2, size.y / 2, size.x / 2, size.y / 2) | ||
| 69 | + ..setFillColor(PdfColors.blue) | ||
| 70 | + ..fillPath(); | ||
| 71 | + }, | ||
| 72 | + ))); | ||
| 73 | + pdf.addPage(Page( | ||
| 74 | + build: (Context context) => CustomPaint( | ||
| 75 | + size: const PdfPoint(200, 200), | ||
| 76 | + painter: (PdfGraphics canvas, PdfPoint size) { | ||
| 77 | + canvas | ||
| 78 | + ..drawEllipse(size.x / 2, size.y / 2, size.x / 2, size.y / 2) | ||
| 79 | + ..setFillColor(PdfColors.blue) | ||
| 80 | + ..fillPath(); | ||
| 81 | + }, | ||
| 82 | + child: PdfLogo(), | ||
| 83 | + ))); | ||
| 84 | + }); | ||
| 85 | + | ||
| 86 | + test('Basic Widgets FittedBox', () { | ||
| 87 | + pdf.addPage(Page( | ||
| 88 | + build: (Context context) => Column( | ||
| 89 | + mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 90 | + mainAxisSize: MainAxisSize.max, | ||
| 91 | + children: <Widget>[ | ||
| 92 | + SizedBox( | ||
| 93 | + height: 100, | ||
| 94 | + width: 100, | ||
| 95 | + child: FittedBox( | ||
| 96 | + fit: BoxFit.contain, | ||
| 97 | + child: SizedBox( | ||
| 98 | + width: 100, height: 50, child: Placeholder()))), | ||
| 99 | + SizedBox( | ||
| 100 | + height: 100, | ||
| 101 | + width: 100, | ||
| 102 | + child: FittedBox( | ||
| 103 | + fit: BoxFit.cover, | ||
| 104 | + child: SizedBox( | ||
| 105 | + width: 100, height: 50, child: Placeholder()))), | ||
| 106 | + SizedBox( | ||
| 107 | + height: 100, | ||
| 108 | + width: 100, | ||
| 109 | + child: FittedBox( | ||
| 110 | + fit: BoxFit.fill, | ||
| 111 | + child: SizedBox( | ||
| 112 | + width: 100, height: 50, child: Placeholder()))), | ||
| 113 | + SizedBox( | ||
| 114 | + height: 100, | ||
| 115 | + width: 100, | ||
| 116 | + child: FittedBox( | ||
| 117 | + fit: BoxFit.fitWidth, | ||
| 118 | + child: SizedBox( | ||
| 119 | + width: 100, height: 50, child: Placeholder()))), | ||
| 120 | + SizedBox( | ||
| 121 | + height: 100, | ||
| 122 | + width: 100, | ||
| 123 | + child: FittedBox( | ||
| 124 | + fit: BoxFit.fitHeight, | ||
| 125 | + child: SizedBox( | ||
| 126 | + width: 100, height: 50, child: Placeholder()))), | ||
| 127 | + SizedBox( | ||
| 128 | + height: 100, | ||
| 129 | + width: 100, | ||
| 130 | + child: FittedBox( | ||
| 131 | + fit: BoxFit.none, | ||
| 132 | + child: SizedBox( | ||
| 133 | + width: 100, height: 50, child: Placeholder()))), | ||
| 134 | + SizedBox( | ||
| 135 | + height: 100, | ||
| 136 | + width: 100, | ||
| 137 | + child: FittedBox( | ||
| 138 | + fit: BoxFit.scaleDown, | ||
| 139 | + child: SizedBox( | ||
| 140 | + width: 100, height: 50, child: Placeholder()))), | ||
| 141 | + ]))); | ||
| 142 | + }); | ||
| 143 | + | ||
| 144 | + test('Basic Widgets LimitedBox', () { | ||
| 145 | + pdf.addPage(Page( | ||
| 146 | + build: (Context context) => ListView( | ||
| 147 | + children: <Widget>[ | ||
| 148 | + LimitedBox( | ||
| 149 | + maxHeight: 40, | ||
| 150 | + child: Placeholder(), | ||
| 151 | + ), | ||
| 152 | + ], | ||
| 153 | + ))); | ||
| 154 | + }); | ||
| 155 | + | ||
| 156 | + test('Basic Widgets Padding', () { | ||
| 157 | + pdf.addPage(Page( | ||
| 158 | + build: (Context context) => Center( | ||
| 159 | + child: Padding( | ||
| 160 | + padding: const EdgeInsets.all(20), | ||
| 161 | + child: PdfLogo(), | ||
| 162 | + ), | ||
| 163 | + ))); | ||
| 164 | + }); | ||
| 165 | + | ||
| 166 | + test('Basic Widgets SizedBox', () { | ||
| 167 | + pdf.addPage(Page( | ||
| 168 | + build: (Context context) => SizedBox( | ||
| 169 | + width: 200, | ||
| 170 | + height: 100, | ||
| 171 | + child: Placeholder(), | ||
| 172 | + ))); | ||
| 173 | + }); | ||
| 174 | + | ||
| 175 | + test('Basic Widgets Transform', () { | ||
| 176 | + pdf.addPage(Page( | ||
| 177 | + build: (Context context) => Transform.scale( | ||
| 178 | + scale: 0.5, | ||
| 179 | + child: Transform.rotate( | ||
| 180 | + angle: 0.1, | ||
| 181 | + child: Placeholder(), | ||
| 182 | + ), | ||
| 183 | + ))); | ||
| 184 | + }); | ||
| 185 | + | ||
| 186 | + tearDownAll(() { | ||
| 187 | + final File file = File('widgets-basic.pdf'); | ||
| 188 | + file.writeAsBytesSync(pdf.save()); | ||
| 189 | + }); | ||
| 190 | +} |
pdf/test/widget_clip_test.dart
0 → 100644
| 1 | +/* | ||
| 2 | + * Copyright (C) 2017, David PHAM-VAN <dev.nfet.net@gmail.com> | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | + | ||
| 17 | +import 'dart:io'; | ||
| 18 | + | ||
| 19 | +import 'package:test/test.dart'; | ||
| 20 | +import 'package:pdf/pdf.dart'; | ||
| 21 | +import 'package:pdf/widgets.dart'; | ||
| 22 | + | ||
| 23 | +Document pdf; | ||
| 24 | + | ||
| 25 | +void main() { | ||
| 26 | + setUpAll(() { | ||
| 27 | + Document.debug = true; | ||
| 28 | + pdf = Document(); | ||
| 29 | + }); | ||
| 30 | + | ||
| 31 | + test('Clip Widgets ClipRect', () { | ||
| 32 | + pdf.addPage(Page( | ||
| 33 | + build: (Context context) => ClipRect( | ||
| 34 | + child: Transform.rotate( | ||
| 35 | + angle: 0.1, | ||
| 36 | + child: Container( | ||
| 37 | + decoration: const BoxDecoration( | ||
| 38 | + color: PdfColors.blue, | ||
| 39 | + ), | ||
| 40 | + ), | ||
| 41 | + ), | ||
| 42 | + ), | ||
| 43 | + )); | ||
| 44 | + }); | ||
| 45 | + | ||
| 46 | + test('Clip Widgets ClipRRect', () { | ||
| 47 | + pdf.addPage(Page( | ||
| 48 | + build: (Context context) => ClipRRect( | ||
| 49 | + horizontalRadius: 30, | ||
| 50 | + verticalRadius: 30, | ||
| 51 | + child: Container( | ||
| 52 | + decoration: const BoxDecoration( | ||
| 53 | + color: PdfColors.blue, | ||
| 54 | + ), | ||
| 55 | + ), | ||
| 56 | + ), | ||
| 57 | + )); | ||
| 58 | + }); | ||
| 59 | + | ||
| 60 | + test('Clip Widgets ClipOval', () { | ||
| 61 | + pdf.addPage(Page( | ||
| 62 | + build: (Context context) => ClipOval( | ||
| 63 | + child: Container( | ||
| 64 | + decoration: const BoxDecoration( | ||
| 65 | + color: PdfColors.blue, | ||
| 66 | + ), | ||
| 67 | + ), | ||
| 68 | + ), | ||
| 69 | + )); | ||
| 70 | + }); | ||
| 71 | + | ||
| 72 | + tearDownAll(() { | ||
| 73 | + final File file = File('widgets-clip.pdf'); | ||
| 74 | + file.writeAsBytesSync(pdf.save()); | ||
| 75 | + }); | ||
| 76 | +} |
pdf/test/widget_container_test.dart
0 → 100644
| 1 | +/* | ||
| 2 | + * Copyright (C) 2017, David PHAM-VAN <dev.nfet.net@gmail.com> | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | + | ||
| 17 | +import 'dart:io'; | ||
| 18 | +import 'dart:math' as math; | ||
| 19 | +import 'dart:typed_data'; | ||
| 20 | + | ||
| 21 | +import 'package:test/test.dart'; | ||
| 22 | +import 'package:pdf/pdf.dart'; | ||
| 23 | +import 'package:pdf/widgets.dart'; | ||
| 24 | + | ||
| 25 | +Document pdf; | ||
| 26 | + | ||
| 27 | +Uint32List generateBitmap(int w, int h) { | ||
| 28 | + final Uint32List bm = Uint32List(w * h); | ||
| 29 | + final double dw = w.toDouble(); | ||
| 30 | + final double dh = h.toDouble(); | ||
| 31 | + for (int y = 0; y < h; y++) { | ||
| 32 | + for (int x = 0; x < w; x++) { | ||
| 33 | + bm[y * w + x] = (math.sin(x / dw) * 256).toInt() | | ||
| 34 | + (math.sin(y / dh) * 256).toInt() << 8 | | ||
| 35 | + (math.sin(x / dw * y / dh) * 256).toInt() << 16 | | ||
| 36 | + 0xff000000; | ||
| 37 | + } | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + return bm; | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | +void main() { | ||
| 44 | + setUpAll(() { | ||
| 45 | + Document.debug = true; | ||
| 46 | + pdf = Document(); | ||
| 47 | + }); | ||
| 48 | + | ||
| 49 | + test('Container Widgets Flat', () { | ||
| 50 | + pdf.addPage(Page( | ||
| 51 | + build: (Context context) => Container( | ||
| 52 | + alignment: Alignment.center, | ||
| 53 | + margin: const EdgeInsets.all(30), | ||
| 54 | + padding: const EdgeInsets.all(20), | ||
| 55 | + decoration: const BoxDecoration( | ||
| 56 | + color: PdfColors.blue, | ||
| 57 | + borderRadius: 20, | ||
| 58 | + border: BoxBorder( | ||
| 59 | + color: PdfColors.blue800, | ||
| 60 | + top: true, | ||
| 61 | + left: true, | ||
| 62 | + right: true, | ||
| 63 | + bottom: true, | ||
| 64 | + width: 2, | ||
| 65 | + )), | ||
| 66 | + width: 200, | ||
| 67 | + height: 400, | ||
| 68 | + // child: Placeholder(), | ||
| 69 | + ), | ||
| 70 | + )); | ||
| 71 | + }); | ||
| 72 | + | ||
| 73 | + test('Container Widgets Image', () { | ||
| 74 | + final Uint32List img = generateBitmap(100, 100); | ||
| 75 | + final PdfImage image = PdfImage(pdf.document, | ||
| 76 | + image: img.buffer.asUint8List(), width: 100, height: 100); | ||
| 77 | + | ||
| 78 | + pdf.addPage(Page( | ||
| 79 | + build: (Context context) => Container( | ||
| 80 | + alignment: Alignment.center, | ||
| 81 | + margin: const EdgeInsets.all(30), | ||
| 82 | + padding: const EdgeInsets.all(20), | ||
| 83 | + decoration: BoxDecoration( | ||
| 84 | + image: DecorationImage(image: image, fit: BoxFit.cover), | ||
| 85 | + ), | ||
| 86 | + width: 200, | ||
| 87 | + height: 400, | ||
| 88 | + // child: Placeholder(), | ||
| 89 | + ), | ||
| 90 | + )); | ||
| 91 | + }); | ||
| 92 | + | ||
| 93 | + tearDownAll(() { | ||
| 94 | + final File file = File('widgets-container.pdf'); | ||
| 95 | + file.writeAsBytesSync(pdf.save()); | ||
| 96 | + }); | ||
| 97 | +} |
-
Please register or login to post a comment