David PHAM-VAN

Improve demos

@@ -545,7 +545,7 @@ String _formatCurrency(double amount) { @@ -545,7 +545,7 @@ String _formatCurrency(double amount) {
545 } 545 }
546 546
547 String _formatDate(DateTime date) { 547 String _formatDate(DateTime date) {
548 - final format = DateFormat.yMMMMd('en_US'); 548 + final format = DateFormat.yMMMd('en_US');
549 return format.format(date); 549 return format.format(date);
550 } 550 }
551 551
@@ -223,7 +223,7 @@ Future<Uint8List> generateReport(PdfPageFormat pageFormat) async { @@ -223,7 +223,7 @@ Future<Uint8List> generateReport(PdfPageFormat pageFormat) async {
223 ), 223 ),
224 ), 224 ),
225 pw.Text( 225 pw.Text(
226 - 'Budget was originally \$1915. A total of \$1990 was spent on the month os January which exceeded the overall budget by \$75', 226 + 'Budget was originally \$1915. A total of \$1990 was spent on the month of January which exceeded the overall budget by \$75',
227 textAlign: pw.TextAlign.justify, 227 textAlign: pw.TextAlign.justify,
228 ) 228 )
229 ], 229 ],
@@ -26,6 +26,7 @@ import 'package:pdf/widgets.dart' as pw; @@ -26,6 +26,7 @@ import 'package:pdf/widgets.dart' as pw;
26 26
27 const PdfColor green = PdfColor.fromInt(0xff9ce5d0); 27 const PdfColor green = PdfColor.fromInt(0xff9ce5d0);
28 const PdfColor lightGreen = PdfColor.fromInt(0xffcdf1e7); 28 const PdfColor lightGreen = PdfColor.fromInt(0xffcdf1e7);
  29 +const sep = 120.0;
29 30
30 Future<Uint8List> generateResume(PdfPageFormat format) async { 31 Future<Uint8List> generateResume(PdfPageFormat format) async {
31 final pw.Document doc = 32 final pw.Document doc =
@@ -38,10 +39,13 @@ Future<Uint8List> generateResume(PdfPageFormat format) async { @@ -38,10 +39,13 @@ Future<Uint8List> generateResume(PdfPageFormat format) async {
38 39
39 final pw.PageTheme pageTheme = await _myPageTheme(format); 40 final pw.PageTheme pageTheme = await _myPageTheme(format);
40 41
41 - doc.addPage(pw.Page( 42 + doc.addPage(
  43 + pw.MultiPage(
42 pageTheme: pageTheme, 44 pageTheme: pageTheme,
43 - build: (pw.Context context) => pw.Row(children: <pw.Widget>[  
44 - pw.Expanded( 45 + build: (pw.Context context) => [
  46 + pw.Partitions(
  47 + children: [
  48 + pw.Partition(
45 child: pw.Column( 49 child: pw.Column(
46 crossAxisAlignment: pw.CrossAxisAlignment.start, 50 crossAxisAlignment: pw.CrossAxisAlignment.start,
47 children: <pw.Widget>[ 51 children: <pw.Widget>[
@@ -58,8 +62,11 @@ Future<Uint8List> generateResume(PdfPageFormat format) async { @@ -58,8 +62,11 @@ Future<Uint8List> generateResume(PdfPageFormat format) async {
58 pw.Padding(padding: const pw.EdgeInsets.only(top: 10)), 62 pw.Padding(padding: const pw.EdgeInsets.only(top: 10)),
59 pw.Text('Electrotyper', 63 pw.Text('Electrotyper',
60 textScaleFactor: 1.2, 64 textScaleFactor: 1.2,
61 - style: pw.Theme.of(context).defaultTextStyle.copyWith(  
62 - fontWeight: pw.FontWeight.bold, color: green)), 65 + style: pw.Theme.of(context)
  66 + .defaultTextStyle
  67 + .copyWith(
  68 + fontWeight: pw.FontWeight.bold,
  69 + color: green)),
63 pw.Padding(padding: const pw.EdgeInsets.only(top: 20)), 70 pw.Padding(padding: const pw.EdgeInsets.only(top: 20)),
64 pw.Row( 71 pw.Row(
65 crossAxisAlignment: pw.CrossAxisAlignment.start, 72 crossAxisAlignment: pw.CrossAxisAlignment.start,
@@ -71,34 +78,44 @@ Future<Uint8List> generateResume(PdfPageFormat format) async { @@ -71,34 +78,44 @@ Future<Uint8List> generateResume(PdfPageFormat format) async {
71 pw.Text('568 Port Washington Road'), 78 pw.Text('568 Port Washington Road'),
72 pw.Text('Nordegg, AB T0M 2H0'), 79 pw.Text('Nordegg, AB T0M 2H0'),
73 pw.Text('Canada, ON'), 80 pw.Text('Canada, ON'),
74 - ]), 81 + ],
  82 + ),
75 pw.Column( 83 pw.Column(
76 crossAxisAlignment: pw.CrossAxisAlignment.start, 84 crossAxisAlignment: pw.CrossAxisAlignment.start,
77 children: <pw.Widget>[ 85 children: <pw.Widget>[
78 pw.Text('+1 403-721-6898'), 86 pw.Text('+1 403-721-6898'),
79 _UrlText('p.charlesbois@yahoo.com', 87 _UrlText('p.charlesbois@yahoo.com',
80 'mailto:p.charlesbois@yahoo.com'), 88 'mailto:p.charlesbois@yahoo.com'),
81 - _UrlText('wholeprices.ca',  
82 - 'https://wholeprices.ca'),  
83 - ]), 89 + _UrlText(
  90 + 'wholeprices.ca', 'https://wholeprices.ca'),
  91 + ],
  92 + ),
84 pw.Padding(padding: pw.EdgeInsets.zero) 93 pw.Padding(padding: pw.EdgeInsets.zero)
85 - ]),  
86 - ])), 94 + ],
  95 + ),
  96 + ],
  97 + ),
  98 + ),
87 _Category(title: 'Work Experience'), 99 _Category(title: 'Work Experience'),
88 _Block(title: 'Tour bus driver'), 100 _Block(title: 'Tour bus driver'),
89 _Block(title: 'Logging equipment operator'), 101 _Block(title: 'Logging equipment operator'),
90 _Block(title: 'Foot doctor'), 102 _Block(title: 'Foot doctor'),
  103 + _Block(title: 'Unicorn trainer'),
  104 + _Block(title: 'Chief chatter'),
  105 + pw.SizedBox(height: 20),
91 _Category(title: 'Education'), 106 _Category(title: 'Education'),
92 _Block(title: 'Bachelor Of Commerce'), 107 _Block(title: 'Bachelor Of Commerce'),
93 _Block(title: 'Bachelor Interior Design'), 108 _Block(title: 'Bachelor Interior Design'),
94 - ])),  
95 - pw.Container(  
96 - height: double.infinity,  
97 - width: 2,  
98 - margin: const pw.EdgeInsets.symmetric(horizontal: 5),  
99 - color: green, 109 + ],
100 ), 110 ),
101 - pw.Column( 111 + ),
  112 + pw.Partition(
  113 + width: sep,
  114 + child: pw.Column(
  115 + children: [
  116 + pw.Container(
  117 + height: pageTheme.pageFormat.availableHeight,
  118 + child: pw.Column(
102 crossAxisAlignment: pw.CrossAxisAlignment.center, 119 crossAxisAlignment: pw.CrossAxisAlignment.center,
103 mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, 120 mainAxisAlignment: pw.MainAxisAlignment.spaceBetween,
104 children: <pw.Widget>[ 121 children: <pw.Widget>[
@@ -112,7 +129,8 @@ Future<Uint8List> generateResume(PdfPageFormat format) async { @@ -112,7 +129,8 @@ Future<Uint8List> generateResume(PdfPageFormat format) async {
112 ), 129 ),
113 pw.Column(children: <pw.Widget>[ 130 pw.Column(children: <pw.Widget>[
114 _Percent(size: 60, value: .7, title: pw.Text('Word')), 131 _Percent(size: 60, value: .7, title: pw.Text('Word')),
115 - _Percent(size: 60, value: .4, title: pw.Text('Excel')), 132 + _Percent(
  133 + size: 60, value: .4, title: pw.Text('Excel')),
116 ]), 134 ]),
117 pw.BarcodeWidget( 135 pw.BarcodeWidget(
118 data: 'Parnella Charlesbois', 136 data: 'Parnella Charlesbois',
@@ -121,19 +139,27 @@ Future<Uint8List> generateResume(PdfPageFormat format) async { @@ -121,19 +139,27 @@ Future<Uint8List> generateResume(PdfPageFormat format) async {
121 barcode: pw.Barcode.qrCode(), 139 barcode: pw.Barcode.qrCode(),
122 ), 140 ),
123 ], 141 ],
  142 + ),
  143 + ),
  144 + ],
  145 + ),
124 ) 146 )
125 - ]),  
126 - )); 147 + ],
  148 + ),
  149 + ],
  150 + ),
  151 + );
127 return doc.save(); 152 return doc.save();
128 } 153 }
129 154
130 Future<pw.PageTheme> _myPageTheme(PdfPageFormat format) async { 155 Future<pw.PageTheme> _myPageTheme(PdfPageFormat format) async {
131 - return pw.PageTheme(  
132 - pageFormat: format.applyMargin( 156 + format = format.applyMargin(
133 left: 2.0 * PdfPageFormat.cm, 157 left: 2.0 * PdfPageFormat.cm,
134 top: 4.0 * PdfPageFormat.cm, 158 top: 4.0 * PdfPageFormat.cm,
135 right: 2.0 * PdfPageFormat.cm, 159 right: 2.0 * PdfPageFormat.cm,
136 - bottom: 2.0 * PdfPageFormat.cm), 160 + bottom: 2.0 * PdfPageFormat.cm);
  161 + return pw.PageTheme(
  162 + pageFormat: format,
137 theme: pw.ThemeData.withFont( 163 theme: pw.ThemeData.withFont(
138 base: pw.Font.ttf(await rootBundle.load('assets/open-sans.ttf')), 164 base: pw.Font.ttf(await rootBundle.load('assets/open-sans.ttf')),
139 bold: pw.Font.ttf(await rootBundle.load('assets/open-sans-bold.ttf')), 165 bold: pw.Font.ttf(await rootBundle.load('assets/open-sans-bold.ttf')),
@@ -173,7 +199,14 @@ Future<pw.PageTheme> _myPageTheme(PdfPageFormat format) async { @@ -173,7 +199,14 @@ Future<pw.PageTheme> _myPageTheme(PdfPageFormat format) async {
173 ..moveTo(size.x - 30, 0) 199 ..moveTo(size.x - 30, 0)
174 ..lineTo(size.x - 110, 50) 200 ..lineTo(size.x - 110, 50)
175 ..lineTo(size.x - 150, 0) 201 ..lineTo(size.x - 150, 0)
176 - ..fillPath(); 202 + ..fillPath()
  203 + ..setColor(green)
  204 + ..setLineWidth(2)
  205 + ..moveTo(
  206 + size.x - sep - format.marginRight + 4, format.marginBottom)
  207 + ..lineTo(size.x - sep - format.marginRight + 4,
  208 + size.y - format.marginTop)
  209 + ..strokePath();
177 }, 210 },
178 ), 211 ),
179 ); 212 );