David PHAM-VAN

Fix Checkbox Widget

# Changelog
## 3.0.0-nullsafety.2
- Fix Checkbox Widget
## 3.0.0-nullsafety.1
- Fix Table border
... ...
... ... @@ -82,7 +82,7 @@ enum PdfAnnotFlags {
lockedContent,
}
enum PdfAnnotApparence {
enum PdfAnnotAppearance {
normal,
rollover,
down,
... ... @@ -125,6 +125,8 @@ abstract class PdfAnnotBase {
final Map<String?, PdfDataType> _appearances = <String?, PdfDataType>{};
PdfName? _as;
int get flagValue {
if (flags == null || flags!.isEmpty) {
return 0;
... ... @@ -137,21 +139,22 @@ abstract class PdfAnnotBase {
PdfGraphics appearance(
PdfDocument pdfDocument,
PdfAnnotApparence type, {
PdfAnnotAppearance type, {
String? name,
Matrix4? matrix,
PdfRect? boundingBox,
bool selected = false,
}) {
final s = PdfGraphicXObject(pdfDocument, '/Form');
String? n;
switch (type) {
case PdfAnnotApparence.normal:
case PdfAnnotAppearance.normal:
n = '/N';
break;
case PdfAnnotApparence.rollover:
case PdfAnnotAppearance.rollover:
n = '/R';
break;
case PdfAnnotApparence.down:
case PdfAnnotAppearance.down:
n = '/D';
break;
}
... ... @@ -182,6 +185,10 @@ abstract class PdfAnnotBase {
s.params['/BBox'] =
PdfArray.fromNum(<double?>[bbox.x, bbox.y, bbox.width, bbox.height]);
final g = PdfGraphics(s, s.buf);
if (selected && name != null) {
_as = PdfName(name);
}
return g;
}
... ... @@ -223,11 +230,8 @@ abstract class PdfAnnotBase {
if (_appearances.isNotEmpty) {
params['/AP'] = PdfDict(_appearances);
if (_appearances['/N'] is PdfDict) {
final n = _appearances['/N'];
if (n is PdfDict) {
params['/AS'] = PdfName(n.values.keys.first!);
}
if (_as != null) {
params['/AS'] = _as;
}
}
}
... ... @@ -656,7 +660,7 @@ class PdfTextField extends PdfFormField {
class PdfButtonField extends PdfFormField {
PdfButtonField({
required PdfRect rect,
String? fieldName,
required String fieldName,
String? alternateName,
String? mappingName,
PdfBorder? border,
... ... @@ -683,20 +687,20 @@ class PdfButtonField extends PdfFormField {
fieldFlags: fieldFlags,
);
final bool? value;
final String? value;
final bool? defaultValue;
final String? defaultValue;
@override
void build(PdfPage page, PdfObject object, PdfDict params) {
super.build(page, object, params);
if (value != null) {
params['/V'] = value! ? const PdfName('/Yes') : const PdfName('/Off');
params['/V'] = PdfName(value!);
}
if (defaultValue != null) {
params['/DV'] =
defaultValue! ? const PdfName('/Yes') : const PdfName('/Off');
params['/DV'] = PdfName(defaultValue!);
}
}
}
... ...
... ... @@ -290,7 +290,7 @@ class TextField extends Annotation {
Widget? child,
double width = 120,
double height = 13,
String? name,
required String name,
PdfBorder? border,
Set<PdfAnnotFlags>? flags,
DateTime? date,
... ...
... ... @@ -29,7 +29,6 @@ import 'widget.dart';
class Checkbox extends SingleChildWidget {
Checkbox({
required this.value,
this.defaultValue,
this.tristate = false,
this.activeColor = PdfColors.blue,
this.checkColor = PdfColors.white,
... ... @@ -51,8 +50,6 @@ class Checkbox extends SingleChildWidget {
final bool value;
final bool? defaultValue;
final bool tristate;
final PdfColor activeColor;
... ... @@ -69,13 +66,13 @@ class Checkbox extends SingleChildWidget {
final bf = PdfButtonField(
rect: context.localToGlobal(box!),
fieldName: name,
value: value,
defaultValue: value,
value: value ? '/Yes' : null,
defaultValue: value ? '/Yes' : null,
flags: <PdfAnnotFlags>{PdfAnnotFlags.print},
);
final g =
bf.appearance(context.document, PdfAnnotApparence.normal, name: '/Yes');
final g = bf.appearance(context.document, PdfAnnotAppearance.normal,
name: '/Yes', selected: value);
g.drawRect(0, 0, bf.rect.width, bf.rect.height);
g.setFillColor(activeColor);
g.fillPath();
... ... @@ -86,7 +83,8 @@ class Checkbox extends SingleChildWidget {
g.setLineWidth(2);
g.strokePath();
bf.appearance(context.document, PdfAnnotApparence.normal, name: '/Off');
bf.appearance(context.document, PdfAnnotAppearance.normal,
name: '/Off', selected: !value);
PdfAnnot(context.page, bf);
}
... ... @@ -144,12 +142,6 @@ class FlatButton extends SingleChildWidget {
),
);
// final PdfColor textColor;
// final PdfColor color;
// final EdgeInsets padding;
final String name;
final Widget _childDown;
... ... @@ -177,21 +169,21 @@ class FlatButton extends SingleChildWidget {
..translate(box!.x, box!.y);
final cn = context.copyWith(
canvas: bf.appearance(context.document, PdfAnnotApparence.normal,
canvas: bf.appearance(context.document, PdfAnnotAppearance.normal,
matrix: mat, boundingBox: box));
child!.layout(
cn, BoxConstraints.tightFor(width: box!.width, height: box!.height));
child!.paint(cn);
final cd = context.copyWith(
canvas: bf.appearance(context.document, PdfAnnotApparence.down,
canvas: bf.appearance(context.document, PdfAnnotAppearance.down,
matrix: mat, boundingBox: box));
_childDown.layout(
cd, BoxConstraints.tightFor(width: box!.width, height: box!.height));
_childDown.paint(cd);
final cr = context.copyWith(
canvas: bf.appearance(context.document, PdfAnnotApparence.rollover,
canvas: bf.appearance(context.document, PdfAnnotAppearance.rollover,
matrix: mat, boundingBox: box));
_childRollover.layout(
cr, BoxConstraints.tightFor(width: box!.width, height: box!.height));
... ...
... ... @@ -4,7 +4,7 @@ description: A pdf producer for Dart. It can create pdf files for both web or fl
homepage: https://github.com/DavBfr/dart_pdf/tree/master/pdf
repository: https://github.com/DavBfr/dart_pdf
issue_tracker: https://github.com/DavBfr/dart_pdf/issues
version: 3.0.0-nullsafety.1
version: 3.0.0-nullsafety.2
environment:
sdk: ">=2.12.0-0 <3.0.0"
... ...
... ... @@ -118,7 +118,14 @@ void main() {
Checkbox(
name: 'Checkbox',
value: true,
defaultValue: true,
),
//
SizedBox(width: 20, height: 10),
//
Label(label: 'unchecked:', width: 100),
Checkbox(
name: 'Unchecked',
value: false,
),
//
SizedBox(width: double.infinity, height: 10),
... ...