Showing
6 changed files
with
205 additions
and
58 deletions
@@ -4,6 +4,7 @@ | @@ -4,6 +4,7 @@ | ||
4 | * Allow Annotations in TextSpan | 4 | * Allow Annotations in TextSpan |
5 | * Add SizedBox Widget | 5 | * Add SizedBox Widget |
6 | * Fix RichText Widget word spacing | 6 | * Fix RichText Widget word spacing |
7 | +* Improve Theme and TextStyle | ||
7 | 8 | ||
8 | # 1.3.7 | 9 | # 1.3.7 |
9 | * Add Pdf Creation date | 10 | * Add Pdf Creation date |
@@ -67,22 +67,25 @@ class TextSpan { | @@ -67,22 +67,25 @@ class TextSpan { | ||
67 | 67 | ||
68 | String toPlainText() { | 68 | String toPlainText() { |
69 | final StringBuffer buffer = StringBuffer(); | 69 | final StringBuffer buffer = StringBuffer(); |
70 | - visitTextSpan((TextSpan span) { | 70 | + visitTextSpan((TextSpan span, TextStyle style) { |
71 | buffer.write(span.text); | 71 | buffer.write(span.text); |
72 | return true; | 72 | return true; |
73 | - }); | 73 | + }, null); |
74 | return buffer.toString(); | 74 | return buffer.toString(); |
75 | } | 75 | } |
76 | 76 | ||
77 | - bool visitTextSpan(bool visitor(TextSpan span)) { | 77 | + bool visitTextSpan(bool visitor(TextSpan span, TextStyle parentStyle), |
78 | + TextStyle parentStyle) { | ||
79 | + final TextStyle _style = parentStyle?.merge(style); | ||
80 | + | ||
78 | if (text != null) { | 81 | if (text != null) { |
79 | - if (!visitor(this)) { | 82 | + if (!visitor(this, _style)) { |
80 | return false; | 83 | return false; |
81 | } | 84 | } |
82 | } | 85 | } |
83 | if (children != null) { | 86 | if (children != null) { |
84 | for (TextSpan child in children) { | 87 | for (TextSpan child in children) { |
85 | - if (!child.visitTextSpan(visitor)) { | 88 | + if (!child.visitTextSpan(visitor, _style)) { |
86 | return false; | 89 | return false; |
87 | } | 90 | } |
88 | } | 91 | } |
@@ -170,18 +173,17 @@ class RichText extends Widget { | @@ -170,18 +173,17 @@ class RichText extends Widget { | ||
170 | int wCount = 0; | 173 | int wCount = 0; |
171 | int lineStart = 0; | 174 | int lineStart = 0; |
172 | 175 | ||
173 | - text.visitTextSpan((TextSpan span) { | 176 | + text.visitTextSpan((TextSpan span, TextStyle style) { |
174 | if (span.text == null) { | 177 | if (span.text == null) { |
175 | return true; | 178 | return true; |
176 | } | 179 | } |
177 | 180 | ||
178 | - final TextStyle style = span.style ?? defaultstyle; | ||
179 | - final PdfFont font = style.font.getFont(context); | 181 | + final PdfFont font = style.paintFont.getFont(context); |
180 | 182 | ||
181 | final PdfFontMetrics space = | 183 | final PdfFontMetrics space = |
182 | font.stringMetrics(' ') * (style.fontSize * textScaleFactor); | 184 | font.stringMetrics(' ') * (style.fontSize * textScaleFactor); |
183 | 185 | ||
184 | - for (String word in span.text.split(' ')) { | 186 | + for (String word in span.text.split(RegExp(r'\s'))) { |
185 | if (word.isEmpty) { | 187 | if (word.isEmpty) { |
186 | offsetX += space.advanceWidth * style.wordSpacing; | 188 | offsetX += space.advanceWidth * style.wordSpacing; |
187 | continue; | 189 | continue; |
@@ -229,7 +231,7 @@ class RichText extends Widget { | @@ -229,7 +231,7 @@ class RichText extends Widget { | ||
229 | 231 | ||
230 | offsetX -= space.advanceWidth * style.wordSpacing; | 232 | offsetX -= space.advanceWidth * style.wordSpacing; |
231 | return true; | 233 | return true; |
232 | - }); | 234 | + }, defaultstyle); |
233 | 235 | ||
234 | width = math.max( | 236 | width = math.max( |
235 | width, | 237 | width, |
@@ -283,7 +285,7 @@ class RichText extends Widget { | @@ -283,7 +285,7 @@ class RichText extends Widget { | ||
283 | } | 285 | } |
284 | 286 | ||
285 | context.canvas.drawString( | 287 | context.canvas.drawString( |
286 | - currentStyle.font.getFont(context), | 288 | + currentStyle.paintFont.getFont(context), |
287 | currentStyle.fontSize * textScaleFactor, | 289 | currentStyle.fontSize * textScaleFactor, |
288 | word.text, | 290 | word.text, |
289 | box.x + word.offset.x, | 291 | box.x + word.offset.x, |
@@ -16,27 +16,75 @@ | @@ -16,27 +16,75 @@ | ||
16 | 16 | ||
17 | part of widget; | 17 | part of widget; |
18 | 18 | ||
19 | +enum FontWeight { normal, bold } | ||
20 | + | ||
21 | +enum FontStyle { normal, italic } | ||
22 | + | ||
19 | @immutable | 23 | @immutable |
20 | class TextStyle { | 24 | class TextStyle { |
21 | const TextStyle({ | 25 | const TextStyle({ |
22 | - this.color = PdfColors.black, | ||
23 | - @required this.font, | ||
24 | - this.fontSize = _defaultFontSize, | ||
25 | - this.letterSpacing = 1.0, | ||
26 | - this.wordSpacing = 1.0, | ||
27 | - this.lineSpacing = 0.0, | ||
28 | - this.height = 1.0, | 26 | + this.inherit = true, |
27 | + this.color, | ||
28 | + this.font, | ||
29 | + this.fontBold, | ||
30 | + this.fontItalic, | ||
31 | + this.fontBoldItalic, | ||
32 | + this.fontSize, | ||
33 | + this.fontWeight, | ||
34 | + this.fontStyle, | ||
35 | + this.letterSpacing, | ||
36 | + this.wordSpacing, | ||
37 | + this.lineSpacing, | ||
38 | + this.height, | ||
29 | this.background, | 39 | this.background, |
30 | - }) : assert(font != null), | ||
31 | - assert(color != null); | 40 | + }) : assert(inherit || color != null), |
41 | + assert(inherit || font != null), | ||
42 | + assert(inherit || fontSize != null), | ||
43 | + assert(inherit || fontWeight != null), | ||
44 | + assert(inherit || fontStyle != null), | ||
45 | + assert(inherit || letterSpacing != null), | ||
46 | + assert(inherit || wordSpacing != null), | ||
47 | + assert(inherit || lineSpacing != null), | ||
48 | + assert(inherit || height != null); | ||
49 | + | ||
50 | + factory TextStyle.defaultStyle() { | ||
51 | + return TextStyle( | ||
52 | + color: PdfColors.black, | ||
53 | + font: Font.helvetica(), | ||
54 | + fontBold: Font.helveticaBold(), | ||
55 | + fontItalic: Font.helveticaOblique(), | ||
56 | + fontBoldItalic: Font.helveticaBoldOblique(), | ||
57 | + fontSize: _defaultFontSize, | ||
58 | + fontWeight: FontWeight.normal, | ||
59 | + fontStyle: FontStyle.normal, | ||
60 | + letterSpacing: 1.0, | ||
61 | + wordSpacing: 1.0, | ||
62 | + lineSpacing: 0.0, | ||
63 | + height: 1.0, | ||
64 | + ); | ||
65 | + } | ||
66 | + | ||
67 | + final bool inherit; | ||
32 | 68 | ||
33 | final PdfColor color; | 69 | final PdfColor color; |
34 | 70 | ||
35 | final Font font; | 71 | final Font font; |
36 | 72 | ||
73 | + final Font fontBold; | ||
74 | + | ||
75 | + final Font fontItalic; | ||
76 | + | ||
77 | + final Font fontBoldItalic; | ||
78 | + | ||
37 | // font height, in pdf unit | 79 | // font height, in pdf unit |
38 | final double fontSize; | 80 | final double fontSize; |
39 | 81 | ||
82 | + /// The typeface thickness to use when painting the text (e.g., bold). | ||
83 | + final FontWeight fontWeight; | ||
84 | + | ||
85 | + /// The typeface variant to use when drawing the letters (e.g., italics). | ||
86 | + final FontStyle fontStyle; | ||
87 | + | ||
40 | static const double _defaultFontSize = 12.0 * PdfPageFormat.point; | 88 | static const double _defaultFontSize = 12.0 * PdfPageFormat.point; |
41 | 89 | ||
42 | // spacing between letters, 1.0 being natural spacing | 90 | // spacing between letters, 1.0 being natural spacing |
@@ -55,7 +103,12 @@ class TextStyle { | @@ -55,7 +103,12 @@ class TextStyle { | ||
55 | TextStyle copyWith({ | 103 | TextStyle copyWith({ |
56 | PdfColor color, | 104 | PdfColor color, |
57 | Font font, | 105 | Font font, |
106 | + Font fontBold, | ||
107 | + Font fontItalic, | ||
108 | + Font fontBoldItalic, | ||
58 | double fontSize, | 109 | double fontSize, |
110 | + FontWeight fontWeight, | ||
111 | + FontStyle fontStyle, | ||
59 | double letterSpacing, | 112 | double letterSpacing, |
60 | double wordSpacing, | 113 | double wordSpacing, |
61 | double lineSpacing, | 114 | double lineSpacing, |
@@ -63,9 +116,15 @@ class TextStyle { | @@ -63,9 +116,15 @@ class TextStyle { | ||
63 | PdfColor background, | 116 | PdfColor background, |
64 | }) { | 117 | }) { |
65 | return TextStyle( | 118 | return TextStyle( |
119 | + inherit: inherit, | ||
66 | color: color ?? this.color, | 120 | color: color ?? this.color, |
67 | font: font ?? this.font, | 121 | font: font ?? this.font, |
122 | + fontBold: fontBold ?? this.fontBold, | ||
123 | + fontItalic: fontItalic ?? this.fontItalic, | ||
124 | + fontBoldItalic: fontBoldItalic ?? this.fontBoldItalic, | ||
68 | fontSize: fontSize ?? this.fontSize, | 125 | fontSize: fontSize ?? this.fontSize, |
126 | + fontWeight: fontWeight ?? this.fontWeight, | ||
127 | + fontStyle: fontStyle ?? this.fontStyle, | ||
69 | letterSpacing: letterSpacing ?? this.letterSpacing, | 128 | letterSpacing: letterSpacing ?? this.letterSpacing, |
70 | wordSpacing: wordSpacing ?? this.wordSpacing, | 129 | wordSpacing: wordSpacing ?? this.wordSpacing, |
71 | lineSpacing: lineSpacing ?? this.lineSpacing, | 130 | lineSpacing: lineSpacing ?? this.lineSpacing, |
@@ -74,15 +133,79 @@ class TextStyle { | @@ -74,15 +133,79 @@ class TextStyle { | ||
74 | ); | 133 | ); |
75 | } | 134 | } |
76 | 135 | ||
136 | + /// Creates a copy of this text style replacing or altering the specified | ||
137 | + /// properties. | ||
138 | + TextStyle apply({ | ||
139 | + PdfColor color, | ||
140 | + Font font, | ||
141 | + Font fontBold, | ||
142 | + Font fontItalic, | ||
143 | + Font fontBoldItalic, | ||
144 | + double fontSizeFactor = 1.0, | ||
145 | + double fontSizeDelta = 0.0, | ||
146 | + double letterSpacingFactor = 1.0, | ||
147 | + double letterSpacingDelta = 0.0, | ||
148 | + double wordSpacingFactor = 1.0, | ||
149 | + double wordSpacingDelta = 0.0, | ||
150 | + double heightFactor = 1.0, | ||
151 | + double heightDelta = 0.0, | ||
152 | + }) { | ||
153 | + assert(fontSizeFactor != null); | ||
154 | + assert(fontSizeDelta != null); | ||
155 | + assert(fontSize != null || (fontSizeFactor == 1.0 && fontSizeDelta == 0.0)); | ||
156 | + assert(letterSpacingFactor != null); | ||
157 | + assert(letterSpacingDelta != null); | ||
158 | + assert(letterSpacing != null || | ||
159 | + (letterSpacingFactor == 1.0 && letterSpacingDelta == 0.0)); | ||
160 | + assert(wordSpacingFactor != null); | ||
161 | + assert(wordSpacingDelta != null); | ||
162 | + assert(wordSpacing != null || | ||
163 | + (wordSpacingFactor == 1.0 && wordSpacingDelta == 0.0)); | ||
164 | + assert(heightFactor != null); | ||
165 | + assert(heightDelta != null); | ||
166 | + assert(heightFactor != null || (heightFactor == 1.0 && heightDelta == 0.0)); | ||
167 | + | ||
168 | + return TextStyle( | ||
169 | + inherit: inherit, | ||
170 | + color: color ?? this.color, | ||
171 | + font: font ?? this.font, | ||
172 | + fontBold: fontBold ?? this.fontBold, | ||
173 | + fontItalic: fontItalic ?? this.fontItalic, | ||
174 | + fontBoldItalic: fontBoldItalic ?? this.fontBoldItalic, | ||
175 | + fontSize: | ||
176 | + fontSize == null ? null : fontSize * fontSizeFactor + fontSizeDelta, | ||
177 | + fontWeight: fontWeight, | ||
178 | + fontStyle: fontStyle, | ||
179 | + letterSpacing: letterSpacing == null | ||
180 | + ? null | ||
181 | + : letterSpacing * letterSpacingFactor + letterSpacingDelta, | ||
182 | + wordSpacing: wordSpacing == null | ||
183 | + ? null | ||
184 | + : wordSpacing * wordSpacingFactor + wordSpacingDelta, | ||
185 | + height: height == null ? null : height * heightFactor + heightDelta, | ||
186 | + background: background, | ||
187 | + ); | ||
188 | + } | ||
189 | + | ||
190 | + /// Returns a new text style that is a combination of this style and the given | ||
191 | + /// [other] style. | ||
77 | TextStyle merge(TextStyle other) { | 192 | TextStyle merge(TextStyle other) { |
78 | if (other == null) { | 193 | if (other == null) { |
79 | return this; | 194 | return this; |
80 | } | 195 | } |
81 | 196 | ||
197 | + if (!other.inherit) { | ||
198 | + return other; | ||
199 | + } | ||
200 | + | ||
82 | return copyWith( | 201 | return copyWith( |
83 | color: other.color, | 202 | color: other.color, |
84 | font: other.font, | 203 | font: other.font, |
204 | + fontItalic: other.fontItalic, | ||
205 | + fontBoldItalic: other.fontBoldItalic, | ||
85 | fontSize: other.fontSize, | 206 | fontSize: other.fontSize, |
207 | + fontWeight: other.fontWeight, | ||
208 | + fontStyle: other.fontStyle, | ||
86 | letterSpacing: other.letterSpacing, | 209 | letterSpacing: other.letterSpacing, |
87 | wordSpacing: other.wordSpacing, | 210 | wordSpacing: other.wordSpacing, |
88 | lineSpacing: other.lineSpacing, | 211 | lineSpacing: other.lineSpacing, |
@@ -91,16 +214,31 @@ class TextStyle { | @@ -91,16 +214,31 @@ class TextStyle { | ||
91 | ); | 214 | ); |
92 | } | 215 | } |
93 | 216 | ||
217 | + Font get paintFont { | ||
218 | + if (fontWeight == FontWeight.normal) { | ||
219 | + if (fontStyle == FontStyle.normal) { | ||
220 | + return font; | ||
221 | + } else { | ||
222 | + return fontItalic ?? font; | ||
223 | + } | ||
224 | + } else { | ||
225 | + if (fontStyle == FontStyle.normal) { | ||
226 | + return fontBold ?? font; | ||
227 | + } else { | ||
228 | + return fontBoldItalic ?? fontBold ?? fontItalic ?? font; | ||
229 | + } | ||
230 | + } | ||
231 | + } | ||
232 | + | ||
94 | @override | 233 | @override |
95 | String toString() => | 234 | String toString() => |
96 | - 'TextStyle(color:$color font:$font letterSpacing:$letterSpacing wordSpacing:$wordSpacing lineSpacing:$lineSpacing height:$height background:$background)'; | 235 | + 'TextStyle(color:$color font:$paintFont size:$fontSize weight:$fontWeight style:$fontStyle letterSpacing:$letterSpacing wordSpacing:$wordSpacing lineSpacing:$lineSpacing height:$height background:$background)'; |
97 | } | 236 | } |
98 | 237 | ||
99 | @immutable | 238 | @immutable |
100 | class Theme extends Inherited { | 239 | class Theme extends Inherited { |
101 | - Theme({ | 240 | + const Theme({ |
102 | @required this.defaultTextStyle, | 241 | @required this.defaultTextStyle, |
103 | - @required this.defaultTextStyleBold, | ||
104 | @required this.paragraphStyle, | 242 | @required this.paragraphStyle, |
105 | @required this.header0, | 243 | @required this.header0, |
106 | @required this.header1, | 244 | @required this.header1, |
@@ -113,32 +251,33 @@ class Theme extends Inherited { | @@ -113,32 +251,33 @@ class Theme extends Inherited { | ||
113 | @required this.tableCell, | 251 | @required this.tableCell, |
114 | }); | 252 | }); |
115 | 253 | ||
116 | - factory Theme.withFont(Font baseFont, Font baseFontBold) { | ||
117 | - final TextStyle defaultTextStyle = TextStyle(font: baseFont); | ||
118 | - final TextStyle defaultTextStyleBold = TextStyle(font: baseFontBold); | ||
119 | - final double fontSize = defaultTextStyle.fontSize; | 254 | + factory Theme.withFont({Font base, Font bold, Font italic, Font boldItalic}) { |
255 | + final TextStyle defaultStyle = TextStyle.defaultStyle().copyWith( | ||
256 | + font: base, | ||
257 | + fontBold: bold, | ||
258 | + fontItalic: italic, | ||
259 | + fontBoldItalic: boldItalic); | ||
260 | + final double fontSize = defaultStyle.fontSize; | ||
120 | 261 | ||
121 | return Theme( | 262 | return Theme( |
122 | - defaultTextStyle: defaultTextStyle, | ||
123 | - defaultTextStyleBold: defaultTextStyleBold, | ||
124 | - paragraphStyle: defaultTextStyle.copyWith(lineSpacing: 5), | ||
125 | - bulletStyle: defaultTextStyle.copyWith(lineSpacing: 5), | ||
126 | - header0: defaultTextStyleBold.copyWith(fontSize: fontSize * 2.0), | ||
127 | - header1: defaultTextStyleBold.copyWith(fontSize: fontSize * 1.5), | ||
128 | - header2: defaultTextStyleBold.copyWith(fontSize: fontSize * 1.4), | ||
129 | - header3: defaultTextStyleBold.copyWith(fontSize: fontSize * 1.3), | ||
130 | - header4: defaultTextStyleBold.copyWith(fontSize: fontSize * 1.2), | ||
131 | - header5: defaultTextStyleBold.copyWith(fontSize: fontSize * 1.1), | ||
132 | - tableHeader: defaultTextStyleBold, | ||
133 | - tableCell: defaultTextStyle); | 263 | + defaultTextStyle: defaultStyle, |
264 | + paragraphStyle: defaultStyle.copyWith(lineSpacing: 5), | ||
265 | + bulletStyle: defaultStyle.copyWith(lineSpacing: 5), | ||
266 | + header0: defaultStyle.copyWith(fontSize: fontSize * 2.0), | ||
267 | + header1: defaultStyle.copyWith(fontSize: fontSize * 1.5), | ||
268 | + header2: defaultStyle.copyWith(fontSize: fontSize * 1.4), | ||
269 | + header3: defaultStyle.copyWith(fontSize: fontSize * 1.3), | ||
270 | + header4: defaultStyle.copyWith(fontSize: fontSize * 1.2), | ||
271 | + header5: defaultStyle.copyWith(fontSize: fontSize * 1.1), | ||
272 | + tableHeader: defaultStyle.copyWith( | ||
273 | + fontSize: fontSize * 0.8, fontWeight: FontWeight.bold), | ||
274 | + tableCell: defaultStyle.copyWith(fontSize: fontSize * 0.8)); | ||
134 | } | 275 | } |
135 | 276 | ||
136 | - factory Theme.base() => | ||
137 | - Theme.withFont(Font.helvetica(), Font.helveticaBold()); | 277 | + factory Theme.base() => Theme.withFont(); |
138 | 278 | ||
139 | Theme copyWith({ | 279 | Theme copyWith({ |
140 | TextStyle defaultTextStyle, | 280 | TextStyle defaultTextStyle, |
141 | - TextStyle defaultTextStyleBold, | ||
142 | TextStyle paragraphStyle, | 281 | TextStyle paragraphStyle, |
143 | TextStyle header0, | 282 | TextStyle header0, |
144 | TextStyle header1, | 283 | TextStyle header1, |
@@ -152,8 +291,6 @@ class Theme extends Inherited { | @@ -152,8 +291,6 @@ class Theme extends Inherited { | ||
152 | }) => | 291 | }) => |
153 | Theme( | 292 | Theme( |
154 | defaultTextStyle: defaultTextStyle ?? this.defaultTextStyle, | 293 | defaultTextStyle: defaultTextStyle ?? this.defaultTextStyle, |
155 | - defaultTextStyleBold: | ||
156 | - defaultTextStyleBold ?? this.defaultTextStyleBold, | ||
157 | paragraphStyle: paragraphStyle ?? this.paragraphStyle, | 294 | paragraphStyle: paragraphStyle ?? this.paragraphStyle, |
158 | bulletStyle: bulletStyle ?? this.bulletStyle, | 295 | bulletStyle: bulletStyle ?? this.bulletStyle, |
159 | header0: header0 ?? this.header0, | 296 | header0: header0 ?? this.header0, |
@@ -171,8 +308,6 @@ class Theme extends Inherited { | @@ -171,8 +308,6 @@ class Theme extends Inherited { | ||
171 | 308 | ||
172 | final TextStyle defaultTextStyle; | 309 | final TextStyle defaultTextStyle; |
173 | 310 | ||
174 | - final TextStyle defaultTextStyleBold; | ||
175 | - | ||
176 | final TextStyle paragraphStyle; | 311 | final TextStyle paragraphStyle; |
177 | 312 | ||
178 | final TextStyle header0; | 313 | final TextStyle header0; |
@@ -33,8 +33,8 @@ void main() { | @@ -33,8 +33,8 @@ void main() { | ||
33 | final Document pdf = Document( | 33 | final Document pdf = Document( |
34 | title: 'Widgets Test', | 34 | title: 'Widgets Test', |
35 | theme: Theme.withFont( | 35 | theme: Theme.withFont( |
36 | - Font.ttf(defaultFont.buffer.asByteData()), | ||
37 | - Font.ttf(defaultFontBold.buffer.asByteData()), | 36 | + base: Font.ttf(defaultFont.buffer.asByteData()), |
37 | + bold: Font.ttf(defaultFontBold.buffer.asByteData()), | ||
38 | )); | 38 | )); |
39 | 39 | ||
40 | final TextStyle symbol = TextStyle(font: Font.zapfDingbats()); | 40 | final TextStyle symbol = TextStyle(font: Font.zapfDingbats()); |
@@ -175,12 +175,12 @@ void main() { | @@ -175,12 +175,12 @@ void main() { | ||
175 | text: 'Hello ', | 175 | text: 'Hello ', |
176 | style: Theme.of(context).defaultTextStyle, | 176 | style: Theme.of(context).defaultTextStyle, |
177 | children: <TextSpan>[ | 177 | children: <TextSpan>[ |
178 | - TextSpan( | 178 | + const TextSpan( |
179 | text: 'bold', | 179 | text: 'bold', |
180 | - style: Theme.of(context) | ||
181 | - .defaultTextStyleBold | ||
182 | - .copyWith( | ||
183 | - fontSize: 20, color: PdfColors.blue)), | 180 | + style: TextStyle( |
181 | + fontWeight: FontWeight.bold, | ||
182 | + fontSize: 20, | ||
183 | + color: PdfColors.blue)), | ||
184 | const TextSpan( | 184 | const TextSpan( |
185 | text: ' world!', | 185 | text: ' world!', |
186 | ), | 186 | ), |
@@ -71,7 +71,10 @@ class Block extends StatelessWidget { | @@ -71,7 +71,10 @@ class Block extends StatelessWidget { | ||
71 | decoration: | 71 | decoration: |
72 | const BoxDecoration(color: green, shape: BoxShape.circle), | 72 | const BoxDecoration(color: green, shape: BoxShape.circle), |
73 | ), | 73 | ), |
74 | - Text(title, style: Theme.of(context).defaultTextStyleBold), | 74 | + Text(title, |
75 | + style: Theme.of(context) | ||
76 | + .defaultTextStyle | ||
77 | + .copyWith(fontWeight: FontWeight.bold)), | ||
75 | ]), | 78 | ]), |
76 | Container( | 79 | Container( |
77 | decoration: const BoxDecoration( | 80 | decoration: const BoxDecoration( |
@@ -132,13 +135,17 @@ Future<PdfDocument> generateDocument(PdfPageFormat format) async { | @@ -132,13 +135,17 @@ Future<PdfDocument> generateDocument(PdfPageFormat format) async { | ||
132 | children: <Widget>[ | 135 | children: <Widget>[ |
133 | Text('Parnella Charlesbois', | 136 | Text('Parnella Charlesbois', |
134 | textScaleFactor: 2, | 137 | textScaleFactor: 2, |
135 | - style: Theme.of(context).defaultTextStyleBold), | 138 | + style: Theme.of(context) |
139 | + .defaultTextStyle | ||
140 | + .copyWith(fontWeight: FontWeight.bold)), | ||
136 | Padding(padding: const EdgeInsets.only(top: 10)), | 141 | Padding(padding: const EdgeInsets.only(top: 10)), |
137 | Text('Electrotyper', | 142 | Text('Electrotyper', |
138 | textScaleFactor: 1.2, | 143 | textScaleFactor: 1.2, |
139 | style: Theme.of(context) | 144 | style: Theme.of(context) |
140 | - .defaultTextStyleBold | ||
141 | - .copyWith(color: green)), | 145 | + .defaultTextStyle |
146 | + .copyWith( | ||
147 | + fontWeight: FontWeight.bold, | ||
148 | + color: green)), | ||
142 | Padding(padding: const EdgeInsets.only(top: 20)), | 149 | Padding(padding: const EdgeInsets.only(top: 20)), |
143 | Row( | 150 | Row( |
144 | crossAxisAlignment: CrossAxisAlignment.start, | 151 | crossAxisAlignment: CrossAxisAlignment.start, |
-
Please register or login to post a comment