David PHAM-VAN

Add textDirection parameter to PageTheme

1 # Changelog 1 # Changelog
2 2
  3 +
  4 +## 1.12.0
  5 +
  6 +- Add textDirection parameter to PageTheme
  7 +
3 ## 1.11.2 8 ## 1.11.2
4 9
5 - Fix Table.fromTextArray vertical alignment 10 - Fix Table.fromTextArray vertical alignment
@@ -88,6 +88,7 @@ class MultiPage extends Page { @@ -88,6 +88,7 @@ class MultiPage extends Page {
88 this.maxPages = 20, 88 this.maxPages = 20,
89 PageOrientation orientation, 89 PageOrientation orientation,
90 EdgeInsets margin, 90 EdgeInsets margin,
  91 + TextDirection textDirection,
91 }) : _buildList = build, 92 }) : _buildList = build,
92 assert(mainAxisAlignment != null), 93 assert(mainAxisAlignment != null),
93 assert(crossAxisAlignment != null), 94 assert(crossAxisAlignment != null),
@@ -97,7 +98,9 @@ class MultiPage extends Page { @@ -97,7 +98,9 @@ class MultiPage extends Page {
97 pageFormat: pageFormat, 98 pageFormat: pageFormat,
98 margin: margin, 99 margin: margin,
99 theme: theme, 100 theme: theme,
100 - orientation: orientation); 101 + orientation: orientation,
  102 + textDirection: textDirection,
  103 + );
101 104
102 final BuildListCallback _buildList; 105 final BuildListCallback _buildList;
103 106
@@ -168,7 +171,11 @@ class MultiPage extends Page { @@ -168,7 +171,11 @@ class MultiPage extends Page {
168 int index = 0; 171 int index = 0;
169 int sameCount = 0; 172 int sameCount = 0;
170 final Context baseContext = 173 final Context baseContext =
171 - Context(document: document.document).inheritFrom(calculatedTheme); 174 + Context(document: document.document).inheritFromAll(<Inherited>[
  175 + calculatedTheme,
  176 + if (pageTheme.textDirection != null)
  177 + InheritedDirectionality(pageTheme.textDirection),
  178 + ]);
172 final List<Widget> children = _buildList(baseContext); 179 final List<Widget> children = _buildList(baseContext);
173 WidgetContext widgetContext; 180 WidgetContext widgetContext;
174 181
@@ -24,21 +24,23 @@ typedef BuildListCallback = List<Widget> Function(Context context); @@ -24,21 +24,23 @@ typedef BuildListCallback = List<Widget> Function(Context context);
24 enum PageOrientation { natural, landscape, portrait } 24 enum PageOrientation { natural, landscape, portrait }
25 25
26 class Page { 26 class Page {
27 - Page(  
28 - {PageTheme pageTheme, 27 + Page({
  28 + PageTheme pageTheme,
29 PdfPageFormat pageFormat, 29 PdfPageFormat pageFormat,
30 BuildCallback build, 30 BuildCallback build,
31 ThemeData theme, 31 ThemeData theme,
32 PageOrientation orientation, 32 PageOrientation orientation,
33 EdgeInsets margin, 33 EdgeInsets margin,
34 - bool clip = false})  
35 - : assert( 34 + bool clip = false,
  35 + TextDirection textDirection,
  36 + }) : assert(
36 pageTheme == null || 37 pageTheme == null ||
37 (pageFormat == null && 38 (pageFormat == null &&
38 theme == null && 39 theme == null &&
39 orientation == null && 40 orientation == null &&
40 margin == null && 41 margin == null &&
41 - clip == false), 42 + clip == false &&
  43 + textDirection == null),
42 'Don\'t set both pageTheme and other settings'), 44 'Don\'t set both pageTheme and other settings'),
43 pageTheme = pageTheme ?? 45 pageTheme = pageTheme ??
44 PageTheme( 46 PageTheme(
@@ -47,6 +49,7 @@ class Page { @@ -47,6 +49,7 @@ class Page {
47 margin: margin, 49 margin: margin,
48 theme: theme, 50 theme: theme,
49 clip: clip, 51 clip: clip,
  52 + textDirection: textDirection,
50 ), 53 ),
51 _build = build; 54 _build = build;
52 55
@@ -106,7 +109,11 @@ class Page { @@ -106,7 +109,11 @@ class Page {
106 document: document.document, 109 document: document.document,
107 page: _pdfPage, 110 page: _pdfPage,
108 canvas: canvas, 111 canvas: canvas,
109 - ).inheritFrom(calculatedTheme); 112 + ).inheritFromAll(<Inherited>[
  113 + calculatedTheme,
  114 + if (pageTheme.textDirection != null)
  115 + InheritedDirectionality(pageTheme.textDirection),
  116 + ]);
110 117
111 Widget background; 118 Widget background;
112 Widget content; 119 Widget content;
@@ -26,6 +26,7 @@ class PageTheme { @@ -26,6 +26,7 @@ class PageTheme {
26 PageOrientation orientation, 26 PageOrientation orientation,
27 EdgeInsets margin, 27 EdgeInsets margin,
28 this.clip = false, 28 this.clip = false,
  29 + this.textDirection,
29 }) : pageFormat = pageFormat ?? PdfPageFormat.standard, 30 }) : pageFormat = pageFormat ?? PdfPageFormat.standard,
30 orientation = orientation ?? PageOrientation.natural, 31 orientation = orientation ?? PageOrientation.natural,
31 _margin = margin; 32 _margin = margin;
@@ -44,6 +45,8 @@ class PageTheme { @@ -44,6 +45,8 @@ class PageTheme {
44 45
45 final bool clip; 46 final bool clip;
46 47
  48 + final TextDirection textDirection;
  49 +
47 bool get mustRotate => 50 bool get mustRotate =>
48 (orientation == PageOrientation.landscape && 51 (orientation == PageOrientation.landscape &&
49 pageFormat.height > pageFormat.width) || 52 pageFormat.height > pageFormat.width) ||
@@ -77,6 +80,7 @@ class PageTheme { @@ -77,6 +80,7 @@ class PageTheme {
77 PageOrientation orientation, 80 PageOrientation orientation,
78 EdgeInsets margin, 81 EdgeInsets margin,
79 bool clip, 82 bool clip,
  83 + TextDirection textDirection,
80 }) => 84 }) =>
81 PageTheme( 85 PageTheme(
82 pageFormat: pageFormat ?? this.pageFormat, 86 pageFormat: pageFormat ?? this.pageFormat,
@@ -86,5 +90,6 @@ class PageTheme { @@ -86,5 +90,6 @@ class PageTheme {
86 orientation: orientation ?? this.orientation, 90 orientation: orientation ?? this.orientation,
87 margin: margin ?? this.margin, 91 margin: margin ?? this.margin,
88 clip: clip ?? this.clip, 92 clip: clip ?? this.clip,
  93 + textDirection: textDirection ?? this.textDirection,
89 ); 94 );
90 } 95 }
@@ -381,7 +381,14 @@ class TextStyle { @@ -381,7 +381,14 @@ class TextStyle {
381 'TextStyle(color:$color font:$font size:$fontSize weight:$fontWeight style:$fontStyle letterSpacing:$letterSpacing wordSpacing:$wordSpacing lineSpacing:$lineSpacing height:$height background:$background decoration:$decoration decorationColor:$decorationColor decorationStyle:$decorationStyle decorationThickness:$decorationThickness, renderingMode:$renderingMode)'; 381 'TextStyle(color:$color font:$font size:$fontSize weight:$fontWeight style:$fontStyle letterSpacing:$letterSpacing wordSpacing:$wordSpacing lineSpacing:$lineSpacing height:$height background:$background decoration:$decoration decorationColor:$decorationColor decorationStyle:$decorationStyle decorationThickness:$decorationThickness, renderingMode:$renderingMode)';
382 } 382 }
383 383
384 -class Directionality extends StatelessWidget implements Inherited { 384 +class InheritedDirectionality extends Inherited {
  385 + const InheritedDirectionality(this.textDirection);
  386 +
  387 + /// The text direction for this subtree.
  388 + final TextDirection textDirection;
  389 +}
  390 +
  391 +class Directionality extends StatelessWidget {
385 /// Creates a widget that determines the directionality of text and 392 /// Creates a widget that determines the directionality of text and
386 /// text-direction-sensitive render objects. 393 /// text-direction-sensitive render objects.
387 /// 394 ///
@@ -410,15 +417,16 @@ class Directionality extends StatelessWidget implements Inherited { @@ -410,15 +417,16 @@ class Directionality extends StatelessWidget implements Inherited {
410 /// TextDirection textDirection = Directionality.of(context); 417 /// TextDirection textDirection = Directionality.of(context);
411 /// ``` 418 /// ```
412 static TextDirection of(Context context) { 419 static TextDirection of(Context context) {
413 - final Directionality widget = context.inherited[Directionality];  
414 - return widget?.textDirection ?? TextDirection.ltr; 420 + final InheritedDirectionality inherited =
  421 + context.inherited[InheritedDirectionality];
  422 + return inherited?.textDirection ?? TextDirection.ltr;
415 } 423 }
416 424
417 @override 425 @override
418 Widget build(Context context) { 426 Widget build(Context context) {
419 return InheritedWidget( 427 return InheritedWidget(
420 build: (Context context) => child, 428 build: (Context context) => child,
421 - inherited: this, 429 + inherited: InheritedDirectionality(textDirection),
422 ); 430 );
423 } 431 }
424 } 432 }
@@ -68,9 +68,15 @@ class Context { @@ -68,9 +68,15 @@ class Context {
68 } 68 }
69 69
70 Context inheritFrom(Inherited object) { 70 Context inheritFrom(Inherited object) {
  71 + return inheritFromAll(<Inherited>[object]);
  72 + }
  73 +
  74 + Context inheritFromAll(Iterable<Inherited> objects) {
71 final HashMap<Type, Inherited> inherited = 75 final HashMap<Type, Inherited> inherited =
72 HashMap<Type, Inherited>.of(this.inherited); 76 HashMap<Type, Inherited>.of(this.inherited);
  77 + for (final Inherited object in objects) {
73 inherited[object.runtimeType] = object; 78 inherited[object.runtimeType] = object;
  79 + }
74 return copyWith(inherited: inherited); 80 return copyWith(inherited: inherited);
75 } 81 }
76 } 82 }
@@ -4,7 +4,7 @@ description: A pdf producer for Dart. It can create pdf files for both web or fl @@ -4,7 +4,7 @@ description: A pdf producer for Dart. It can create pdf files for both web or fl
4 homepage: https://github.com/DavBfr/dart_pdf/tree/master/pdf 4 homepage: https://github.com/DavBfr/dart_pdf/tree/master/pdf
5 repository: https://github.com/DavBfr/dart_pdf 5 repository: https://github.com/DavBfr/dart_pdf
6 issue_tracker: https://github.com/DavBfr/dart_pdf/issues 6 issue_tracker: https://github.com/DavBfr/dart_pdf/issues
7 -version: 1.11.2 7 +version: 1.12.0
8 8
9 environment: 9 environment:
10 sdk: ">=2.3.0 <3.0.0" 10 sdk: ">=2.3.0 <3.0.0"