David PHAM-VAN

Add some documentation

@@ -88,6 +88,42 @@ class _MultiPageInstance { @@ -88,6 +88,42 @@ class _MultiPageInstance {
88 final List<_MultiPageWidget> widgets = <_MultiPageWidget>[]; 88 final List<_MultiPageWidget> widgets = <_MultiPageWidget>[];
89 } 89 }
90 90
  91 +/// Create a mult-page section, with automatic overflow from one page to another
  92 +///
  93 +/// ```dart
  94 +/// final pdf = Document();
  95 +/// pdf.addPage(MultiPage(build: (context) {
  96 +/// return [
  97 +/// Text('Hello'),
  98 +/// Text('World'),
  99 +/// ];
  100 +/// }));
  101 +///
  102 +/// An inner widget tree cannot be bigger than a page: A [Widget] cannot be drawn
  103 +/// partially on one page and the remaining on another page: It's insecable.
  104 +///
  105 +/// A small set of [Widget] can automatically span over multiple pages, and can
  106 +/// be used as a direct child of the build method: [Flex], [Partition], [Table], [Wrap],
  107 +/// [GridView], and [Column].
  108 +///
  109 +/// ```dart
  110 +/// final pdf = Document();
  111 +/// pdf.addPage(MultiPage(build: (context) {
  112 +/// return [
  113 +/// Text('Hello'),
  114 +/// Wrap(
  115 +/// children: [
  116 +/// Text('One'),
  117 +/// Text('Two'),
  118 +/// Text('Three'),
  119 +/// ]
  120 +/// ),
  121 +/// ];
  122 +/// }));
  123 +/// ```
  124 +///
  125 +/// The [Wrap] [Widget] here is able to rearrange its children to span them across
  126 +/// multiple pages. But a child of [Wrap] must fit in a page, or an error will raise.
91 class MultiPage extends Page { 127 class MultiPage extends Page {
92 MultiPage({ 128 MultiPage({
93 PageTheme? pageTheme, 129 PageTheme? pageTheme,
@@ -116,16 +152,22 @@ class MultiPage extends Page { @@ -116,16 +152,22 @@ class MultiPage extends Page {
116 152
117 final BuildListCallback _buildList; 153 final BuildListCallback _buildList;
118 154
  155 + /// How the children should be placed along the cross axis.
119 final CrossAxisAlignment crossAxisAlignment; 156 final CrossAxisAlignment crossAxisAlignment;
120 157
  158 + /// A builder for the page header.
121 final BuildCallback? header; 159 final BuildCallback? header;
122 160
  161 + /// A builder for the page footer.
123 final BuildCallback? footer; 162 final BuildCallback? footer;
124 163
  164 + /// How the children should be placed along the main axis.
125 final MainAxisAlignment mainAxisAlignment; 165 final MainAxisAlignment mainAxisAlignment;
126 166
127 final List<_MultiPageInstance> _pages = <_MultiPageInstance>[]; 167 final List<_MultiPageInstance> _pages = <_MultiPageInstance>[];
128 168
  169 + /// The maximum number of pages allowed before raising an error.
  170 + /// This is not checked with a Release build.
129 final int maxPages; 171 final int maxPages;
130 172
131 void _paintChild( 173 void _paintChild(
@@ -196,7 +238,7 @@ class MultiPage extends Page { @@ -196,7 +238,7 @@ class MultiPage extends Page {
196 // Detect too big widgets 238 // Detect too big widgets
197 if (sameCount++ > maxPages) { 239 if (sameCount++ > maxPages) {
198 throw Exception( 240 throw Exception(
199 - 'This widget created more than $maxPages pages. This may be an issue in the widget or the document.'); 241 + 'This widget created more than $maxPages pages. This may be an issue in the widget or the document. See https://pub.dev/documentation/pdf/latest/widgets/MultiPage-class.html');
200 } 242 }
201 return true; 243 return true;
202 }()); 244 }());