Showing
4 changed files
with
76 additions
and
18 deletions
@@ -111,7 +111,10 @@ class TextStyle { | @@ -111,7 +111,10 @@ class TextStyle { | ||
111 | this.decorationStyle, | 111 | this.decorationStyle, |
112 | this.decorationThickness, | 112 | this.decorationThickness, |
113 | }) : assert(inherit || color != null), | 113 | }) : assert(inherit || color != null), |
114 | - assert(inherit || font != null), | 114 | + assert(inherit || fontNormal != null), |
115 | + assert(inherit || fontBold != null), | ||
116 | + assert(inherit || fontItalic != null), | ||
117 | + assert(inherit || fontBoldItalic != null), | ||
115 | assert(inherit || fontSize != null), | 118 | assert(inherit || fontSize != null), |
116 | assert(inherit || fontWeight != null), | 119 | assert(inherit || fontWeight != null), |
117 | assert(inherit || fontStyle != null), | 120 | assert(inherit || fontStyle != null), |
@@ -120,7 +123,6 @@ class TextStyle { | @@ -120,7 +123,6 @@ class TextStyle { | ||
120 | assert(inherit || lineSpacing != null), | 123 | assert(inherit || lineSpacing != null), |
121 | assert(inherit || height != null), | 124 | assert(inherit || height != null), |
122 | assert(inherit || decoration != null), | 125 | assert(inherit || decoration != null), |
123 | - assert(inherit || decorationColor != null), | ||
124 | assert(inherit || decorationStyle != null), | 126 | assert(inherit || decorationStyle != null), |
125 | assert(inherit || decorationThickness != null), | 127 | assert(inherit || decorationThickness != null), |
126 | fontNormal = fontNormal ?? | 128 | fontNormal = fontNormal ?? |
@@ -142,6 +144,7 @@ class TextStyle { | @@ -142,6 +144,7 @@ class TextStyle { | ||
142 | 144 | ||
143 | factory TextStyle.defaultStyle() { | 145 | factory TextStyle.defaultStyle() { |
144 | return TextStyle( | 146 | return TextStyle( |
147 | + inherit: false, | ||
145 | color: PdfColors.black, | 148 | color: PdfColors.black, |
146 | fontNormal: Font.helvetica(), | 149 | fontNormal: Font.helvetica(), |
147 | fontBold: Font.helveticaBold(), | 150 | fontBold: Font.helveticaBold(), |
@@ -18,7 +18,36 @@ part of widget; | @@ -18,7 +18,36 @@ part of widget; | ||
18 | 18 | ||
19 | @immutable | 19 | @immutable |
20 | class Theme extends Inherited { | 20 | class Theme extends Inherited { |
21 | - const Theme({ | 21 | + factory Theme({ |
22 | + TextStyle defaultTextStyle, | ||
23 | + TextStyle paragraphStyle, | ||
24 | + TextStyle header0, | ||
25 | + TextStyle header1, | ||
26 | + TextStyle header2, | ||
27 | + TextStyle header3, | ||
28 | + TextStyle header4, | ||
29 | + TextStyle header5, | ||
30 | + TextStyle bulletStyle, | ||
31 | + TextStyle tableHeader, | ||
32 | + TextStyle tableCell, | ||
33 | + }) { | ||
34 | + final Theme base = Theme.base(); | ||
35 | + return base.copyWith( | ||
36 | + defaultTextStyle: defaultTextStyle, | ||
37 | + paragraphStyle: paragraphStyle, | ||
38 | + bulletStyle: bulletStyle, | ||
39 | + header0: header0, | ||
40 | + header1: header1, | ||
41 | + header2: header2, | ||
42 | + header3: header3, | ||
43 | + header4: header4, | ||
44 | + header5: header5, | ||
45 | + tableHeader: tableHeader, | ||
46 | + tableCell: tableCell, | ||
47 | + ); | ||
48 | + } | ||
49 | + | ||
50 | + Theme._({ | ||
22 | @required this.defaultTextStyle, | 51 | @required this.defaultTextStyle, |
23 | @required this.paragraphStyle, | 52 | @required this.paragraphStyle, |
24 | @required this.header0, | 53 | @required this.header0, |
@@ -30,7 +59,17 @@ class Theme extends Inherited { | @@ -30,7 +59,17 @@ class Theme extends Inherited { | ||
30 | @required this.bulletStyle, | 59 | @required this.bulletStyle, |
31 | @required this.tableHeader, | 60 | @required this.tableHeader, |
32 | @required this.tableCell, | 61 | @required this.tableCell, |
33 | - }); | 62 | + }) : assert(defaultTextStyle.inherit == false), |
63 | + assert(paragraphStyle.inherit == false), | ||
64 | + assert(header0.inherit == false), | ||
65 | + assert(header1.inherit == false), | ||
66 | + assert(header2.inherit == false), | ||
67 | + assert(header3.inherit == false), | ||
68 | + assert(header4.inherit == false), | ||
69 | + assert(header5.inherit == false), | ||
70 | + assert(bulletStyle.inherit == false), | ||
71 | + assert(tableHeader.inherit == false), | ||
72 | + assert(tableCell.inherit == false); | ||
34 | 73 | ||
35 | factory Theme.withFont({Font base, Font bold, Font italic, Font boldItalic}) { | 74 | factory Theme.withFont({Font base, Font bold, Font italic, Font boldItalic}) { |
36 | final TextStyle defaultStyle = TextStyle.defaultStyle().copyWith( | 75 | final TextStyle defaultStyle = TextStyle.defaultStyle().copyWith( |
@@ -41,7 +80,7 @@ class Theme extends Inherited { | @@ -41,7 +80,7 @@ class Theme extends Inherited { | ||
41 | fontBoldItalic: boldItalic); | 80 | fontBoldItalic: boldItalic); |
42 | final double fontSize = defaultStyle.fontSize; | 81 | final double fontSize = defaultStyle.fontSize; |
43 | 82 | ||
44 | - return Theme( | 83 | + return Theme._( |
45 | defaultTextStyle: defaultStyle, | 84 | defaultTextStyle: defaultStyle, |
46 | paragraphStyle: defaultStyle.copyWith(lineSpacing: 5), | 85 | paragraphStyle: defaultStyle.copyWith(lineSpacing: 5), |
47 | bulletStyle: defaultStyle.copyWith(lineSpacing: 5), | 86 | bulletStyle: defaultStyle.copyWith(lineSpacing: 5), |
@@ -53,7 +92,8 @@ class Theme extends Inherited { | @@ -53,7 +92,8 @@ class Theme extends Inherited { | ||
53 | header5: defaultStyle.copyWith(fontSize: fontSize * 1.1), | 92 | header5: defaultStyle.copyWith(fontSize: fontSize * 1.1), |
54 | tableHeader: defaultStyle.copyWith( | 93 | tableHeader: defaultStyle.copyWith( |
55 | fontSize: fontSize * 0.8, fontWeight: FontWeight.bold), | 94 | fontSize: fontSize * 0.8, fontWeight: FontWeight.bold), |
56 | - tableCell: defaultStyle.copyWith(fontSize: fontSize * 0.8)); | 95 | + tableCell: defaultStyle.copyWith(fontSize: fontSize * 0.8), |
96 | + ); | ||
57 | } | 97 | } |
58 | 98 | ||
59 | factory Theme.base() => Theme.withFont(); | 99 | factory Theme.base() => Theme.withFont(); |
@@ -71,18 +111,19 @@ class Theme extends Inherited { | @@ -71,18 +111,19 @@ class Theme extends Inherited { | ||
71 | TextStyle tableHeader, | 111 | TextStyle tableHeader, |
72 | TextStyle tableCell, | 112 | TextStyle tableCell, |
73 | }) => | 113 | }) => |
74 | - Theme( | ||
75 | - defaultTextStyle: defaultTextStyle ?? this.defaultTextStyle, | ||
76 | - paragraphStyle: paragraphStyle ?? this.paragraphStyle, | ||
77 | - bulletStyle: bulletStyle ?? this.bulletStyle, | ||
78 | - header0: header0 ?? this.header0, | ||
79 | - header1: header1 ?? this.header1, | ||
80 | - header2: header2 ?? this.header2, | ||
81 | - header3: header3 ?? this.header3, | ||
82 | - header4: header4 ?? this.header4, | ||
83 | - header5: header5 ?? this.header5, | ||
84 | - tableHeader: tableHeader ?? this.tableHeader, | ||
85 | - tableCell: tableCell ?? this.tableCell); | 114 | + Theme._( |
115 | + defaultTextStyle: this.defaultTextStyle.merge(defaultTextStyle), | ||
116 | + paragraphStyle: this.paragraphStyle.merge(paragraphStyle), | ||
117 | + bulletStyle: this.bulletStyle.merge(bulletStyle), | ||
118 | + header0: this.header0.merge(header0), | ||
119 | + header1: this.header1.merge(header1), | ||
120 | + header2: this.header2.merge(header2), | ||
121 | + header3: this.header3.merge(header3), | ||
122 | + header4: this.header4.merge(header4), | ||
123 | + header5: this.header5.merge(header5), | ||
124 | + tableHeader: this.tableHeader.merge(tableHeader), | ||
125 | + tableCell: this.tableCell.merge(tableCell), | ||
126 | + ); | ||
86 | 127 | ||
87 | static Theme of(Context context) { | 128 | static Theme of(Context context) { |
88 | return context.inherited[Theme]; | 129 | return context.inherited[Theme]; |
@@ -117,6 +117,19 @@ void main() { | @@ -117,6 +117,19 @@ void main() { | ||
117 | )); | 117 | )); |
118 | }); | 118 | }); |
119 | 119 | ||
120 | + test('Theme Page 4', () { | ||
121 | + pdf.addPage(Page( | ||
122 | + pageFormat: PdfPageFormat.a4, | ||
123 | + orientation: PageOrientation.portrait, | ||
124 | + margin: EdgeInsets.all(8.0), | ||
125 | + theme: Theme( | ||
126 | + defaultTextStyle: TextStyle(font: Font.courier(), fontSize: 10.0), | ||
127 | + ), | ||
128 | + build: (Context context) { | ||
129 | + return Center(child: Text('Text')); | ||
130 | + })); | ||
131 | + }); | ||
132 | + | ||
120 | tearDownAll(() { | 133 | tearDownAll(() { |
121 | final File file = File('widgets-theme.pdf'); | 134 | final File file = File('widgets-theme.pdf'); |
122 | file.writeAsBytesSync(pdf.save()); | 135 | file.writeAsBytesSync(pdf.save()); |
-
Please register or login to post a comment