顾海波

init

Showing 100 changed files with 3533 additions and 0 deletions

Too many changes to show.

To preserve performance only 100 of 100+ files are displayed.

  1 +## 0.7.3
  2 +
  3 +* Add support for flutter 3.27.0
  4 +
  5 +## 0.7.2
  6 +
  7 +* Fix: add missing import to gesture_detector_builder_selectable.dart (#87)
  8 +* Fix: simple null pointer exception (#82)
  9 +* Fix: function node children update (#58)
  10 +
  11 +## 0.7.1
  12 +
  13 +* Update `flutter_svg` dependency
  14 +* Make expressions inside a root selectable
  15 +
  16 +## 0.7.0
  17 +
  18 +* Support for Dart version `3.0.0`.
  19 +* Code cleanups.
  20 +
  21 +## 0.6.3+1
  22 +
  23 +* Updated example app flutter_tex dependency.
  24 +
  25 +## 0.6.3
  26 +
  27 +* Removed unnecessary null-aware operators. Bumped min Flutter version to `3.0.0` and Dart to `2.17.0`.
  28 +
  29 +## 0.6.2
  30 +
  31 +* Added CursorNode
  32 +
  33 +## 0.6.1
  34 +
  35 +* Fixed text selection (`SelectableMath`).
  36 +
  37 +## 0.6.0
  38 +
  39 +* Upgraded `flutter_svg` dependency to `1.0.0` release.
  40 +
  41 +## 0.5.0
  42 +
  43 +* Upgraded `flutter_svg` dependency.
  44 +
  45 +## 0.4.2+2
  46 +
  47 +* Fixed `\sqrt` child positioning.
  48 +
  49 +## 0.4.2+1
  50 +
  51 +* Fixed `aligned` environment.
  52 +
  53 +## 0.4.2
  54 +
  55 +* Added dry layout support.
  56 +
  57 +## 0.4.1
  58 +
  59 +* Fixed styling of umlauts in text mode.
  60 +
  61 +## 0.4.0+1
  62 +
  63 +* Fixed missing implementations compile-time error on `master`.
  64 +
  65 +## 0.4.0
  66 +
  67 +* Bumped `provider` to `^6.0.0`.
  68 +
  69 +## 0.3.3+1
  70 +
  71 +* Fixed breaking change in `TextSelectionControls.buildHandle`.
  72 +
  73 +## 0.3.3
  74 +
  75 +* Fixed all SVG-related bugs on web (`\sqrt`, stretchies, etc.) as `flutter_svg`
  76 + is now supported using both CanvasKit and the HTML renderer.
  77 +
  78 +## 0.3.2+1
  79 +
  80 +* Fixed `\sqrt` not displaying in CanvasKit by forcing platform views for sqrt.
  81 +
  82 +## 0.3.2
  83 +
  84 +* Fixed WebGL crashing by using `flutter_svg` on web when CanvasKit is enabled.
  85 +
  86 +## 0.3.1+1
  87 +
  88 +* Exposed `MacroExpansion` in `package:flutter_math/tex.dart`.
  89 +
  90 +## 0.3.1
  91 +
  92 +* Added support for custom macros by exposing `defineMacro` in `package:flutter_math/tex.dart`.
  93 +
  94 +## 0.3.0+3
  95 +
  96 +* Bump `flutter_svg`.
  97 +
  98 +## 0.3.0+2
  99 +
  100 +* Added missing `userUpdateTextEditingValue` implementation
  101 + to `InternalSelectableMathState`.
  102 +
  103 +## 0.3.0+1
  104 +
  105 +* Fixed font references.
  106 +
  107 +## 0.3.0
  108 +
  109 +* Migrated to Flutter 2.0.
  110 +
  111 +## 0.3.0-nullsafety.0
  112 +
  113 +* Migrate to dart null safety
  114 +* Migrate to new selection theme api
  115 +
  116 +## 0.2.1
  117 +
  118 +* Fix overflow in `cases` environment
  119 +* Fix errors caused by null text colors in `Math` widget.
  120 +
  121 +## 0.2.0+2
  122 +
  123 +* Add support for `TextStyle.color` in widget constructors.
  124 +
  125 +## 0.2.0+1
  126 +
  127 +* Fix `Math.tex` constructor's wrong default value for `MathOptions`.
  128 +
  129 +## 0.2.0
  130 +
  131 +* A new `SelectableMath` widget that supports selection and copy-to-clipboard.
  132 +* A TeX encoder.
  133 +* Various performance boosts.
  134 +* fix a bug where some math functions' lower bound get dropped
  135 +* **Breaking change**: major overhaul on class names.
  136 +* **Breaking change**: `baseSizeMultiplier` is removed.
  137 +* **Breaking change**: parse errors and build errors now have correct types instead of `dynamic`.
  138 + `onErrorFallback`'s signature has changed as a result.
  139 +* **Breaking change**: exports are grouped into `widgets`, `ast`, `tex`.
  140 +
  141 +For detailed information, please see [0.2.0 migration guide](doc/migration.0.2.0.md).
  142 +
  143 +## 0.1.9
  144 +
  145 +* With all 0.2.0 improvements, but excluding those breaking changes.
  146 +
  147 +## 0.1.8+1
  148 +
  149 +* More documentations.
  150 +
  151 +## 0.1.8
  152 +
  153 +* Add support for text-mode accent and unicode accents. (e.g. `ä` and `\text{\v{a}}`)
  154 +* Fix underflow issues of accents and sqrts when their child has too little height.
  155 +
  156 +## 0.1.7
  157 +
  158 +* Remove need for specifying fonts in package Pubspec.
  159 +
  160 +## 0.1.6
  161 +
  162 +* Add support for Flutter Web (DomCanvas backend)
  163 +
  164 +## 0.1.5
  165 +
  166 +* Fix breakings caused by [dart/#40674](https://github.com/dart-lang/sdk/issues/40674)
  167 +* Support Flutter 1.20.
  168 +
  169 +## 0.1.4
  170 +
  171 +* Fix incorrect color for lines in \frac, \overline, \underline, and \rule
  172 +
  173 +## 0.1.3
  174 +
  175 +* Dashed matrix separator will now be rendered correctly
  176 +
  177 +## 0.1.2
  178 +
  179 +* Add support for composite symbols, i.e. \notin \not\lt
  180 +* Add API to indicate font size
  181 +* Fix a problem where some exceptions will not be caught
  182 +
  183 +## 0.1.1
  184 +
  185 +* Add `onErrorFallback` functions for `FlutterMath` widget
  186 +
  187 +## 0.1.0
  188 +
  189 +Fix minor crashes
  190 +
  191 +## 0.0.1+1
  192 +
  193 +* Temporarily fix the problem that pana and dartfmt will crash on this package causing zero pub score
  194 +
  195 +## 0.0.1
  196 +
  197 +Initial release.
  1 +
  2 + Apache License
  3 + Version 2.0, January 2004
  4 + http://www.apache.org/licenses/
  5 +
  6 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
  7 +
  8 + 1. Definitions.
  9 +
  10 + "License" shall mean the terms and conditions for use, reproduction,
  11 + and distribution as defined by Sections 1 through 9 of this document.
  12 +
  13 + "Licensor" shall mean the copyright owner or entity authorized by
  14 + the copyright owner that is granting the License.
  15 +
  16 + "Legal Entity" shall mean the union of the acting entity and all
  17 + other entities that control, are controlled by, or are under common
  18 + control with that entity. For the purposes of this definition,
  19 + "control" means (i) the power, direct or indirect, to cause the
  20 + direction or management of such entity, whether by contract or
  21 + otherwise, or (ii) ownership of fifty percent (50%) or more of the
  22 + outstanding shares, or (iii) beneficial ownership of such entity.
  23 +
  24 + "You" (or "Your") shall mean an individual or Legal Entity
  25 + exercising permissions granted by this License.
  26 +
  27 + "Source" form shall mean the preferred form for making modifications,
  28 + including but not limited to software source code, documentation
  29 + source, and configuration files.
  30 +
  31 + "Object" form shall mean any form resulting from mechanical
  32 + transformation or translation of a Source form, including but
  33 + not limited to compiled object code, generated documentation,
  34 + and conversions to other media types.
  35 +
  36 + "Work" shall mean the work of authorship, whether in Source or
  37 + Object form, made available under the License, as indicated by a
  38 + copyright notice that is included in or attached to the work
  39 + (an example is provided in the Appendix below).
  40 +
  41 + "Derivative Works" shall mean any work, whether in Source or Object
  42 + form, that is based on (or derived from) the Work and for which the
  43 + editorial revisions, annotations, elaborations, or other modifications
  44 + represent, as a whole, an original work of authorship. For the purposes
  45 + of this License, Derivative Works shall not include works that remain
  46 + separable from, or merely link (or bind by name) to the interfaces of,
  47 + the Work and Derivative Works thereof.
  48 +
  49 + "Contribution" shall mean any work of authorship, including
  50 + the original version of the Work and any modifications or additions
  51 + to that Work or Derivative Works thereof, that is intentionally
  52 + submitted to Licensor for inclusion in the Work by the copyright owner
  53 + or by an individual or Legal Entity authorized to submit on behalf of
  54 + the copyright owner. For the purposes of this definition, "submitted"
  55 + means any form of electronic, verbal, or written communication sent
  56 + to the Licensor or its representatives, including but not limited to
  57 + communication on electronic mailing lists, source code control systems,
  58 + and issue tracking systems that are managed by, or on behalf of, the
  59 + Licensor for the purpose of discussing and improving the Work, but
  60 + excluding communication that is conspicuously marked or otherwise
  61 + designated in writing by the copyright owner as "Not a Contribution."
  62 +
  63 + "Contributor" shall mean Licensor and any individual or Legal Entity
  64 + on behalf of whom a Contribution has been received by Licensor and
  65 + subsequently incorporated within the Work.
  66 +
  67 + 2. Grant of Copyright License. Subject to the terms and conditions of
  68 + this License, each Contributor hereby grants to You a perpetual,
  69 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  70 + copyright license to reproduce, prepare Derivative Works of,
  71 + publicly display, publicly perform, sublicense, and distribute the
  72 + Work and such Derivative Works in Source or Object form.
  73 +
  74 + 3. Grant of Patent License. Subject to the terms and conditions of
  75 + this License, each Contributor hereby grants to You a perpetual,
  76 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  77 + (except as stated in this section) patent license to make, have made,
  78 + use, offer to sell, sell, import, and otherwise transfer the Work,
  79 + where such license applies only to those patent claims licensable
  80 + by such Contributor that are necessarily infringed by their
  81 + Contribution(s) alone or by combination of their Contribution(s)
  82 + with the Work to which such Contribution(s) was submitted. If You
  83 + institute patent litigation against any entity (including a
  84 + cross-claim or counterclaim in a lawsuit) alleging that the Work
  85 + or a Contribution incorporated within the Work constitutes direct
  86 + or contributory patent infringement, then any patent licenses
  87 + granted to You under this License for that Work shall terminate
  88 + as of the date such litigation is filed.
  89 +
  90 + 4. Redistribution. You may reproduce and distribute copies of the
  91 + Work or Derivative Works thereof in any medium, with or without
  92 + modifications, and in Source or Object form, provided that You
  93 + meet the following conditions:
  94 +
  95 + (a) You must give any other recipients of the Work or
  96 + Derivative Works a copy of this License; and
  97 +
  98 + (b) You must cause any modified files to carry prominent notices
  99 + stating that You changed the files; and
  100 +
  101 + (c) You must retain, in the Source form of any Derivative Works
  102 + that You distribute, all copyright, patent, trademark, and
  103 + attribution notices from the Source form of the Work,
  104 + excluding those notices that do not pertain to any part of
  105 + the Derivative Works; and
  106 +
  107 + (d) If the Work includes a "NOTICE" text file as part of its
  108 + distribution, then any Derivative Works that You distribute must
  109 + include a readable copy of the attribution notices contained
  110 + within such NOTICE file, excluding those notices that do not
  111 + pertain to any part of the Derivative Works, in at least one
  112 + of the following places: within a NOTICE text file distributed
  113 + as part of the Derivative Works; within the Source form or
  114 + documentation, if provided along with the Derivative Works; or,
  115 + within a display generated by the Derivative Works, if and
  116 + wherever such third-party notices normally appear. The contents
  117 + of the NOTICE file are for informational purposes only and
  118 + do not modify the License. You may add Your own attribution
  119 + notices within Derivative Works that You distribute, alongside
  120 + or as an addendum to the NOTICE text from the Work, provided
  121 + that such additional attribution notices cannot be construed
  122 + as modifying the License.
  123 +
  124 + You may add Your own copyright statement to Your modifications and
  125 + may provide additional or different license terms and conditions
  126 + for use, reproduction, or distribution of Your modifications, or
  127 + for any such Derivative Works as a whole, provided Your use,
  128 + reproduction, and distribution of the Work otherwise complies with
  129 + the conditions stated in this License.
  130 +
  131 + 5. Submission of Contributions. Unless You explicitly state otherwise,
  132 + any Contribution intentionally submitted for inclusion in the Work
  133 + by You to the Licensor shall be under the terms and conditions of
  134 + this License, without any additional terms or conditions.
  135 + Notwithstanding the above, nothing herein shall supersede or modify
  136 + the terms of any separate license agreement you may have executed
  137 + with Licensor regarding such Contributions.
  138 +
  139 + 6. Trademarks. This License does not grant permission to use the trade
  140 + names, trademarks, service marks, or product names of the Licensor,
  141 + except as required for reasonable and customary use in describing the
  142 + origin of the Work and reproducing the content of the NOTICE file.
  143 +
  144 + 7. Disclaimer of Warranty. Unless required by applicable law or
  145 + agreed to in writing, Licensor provides the Work (and each
  146 + Contributor provides its Contributions) on an "AS IS" BASIS,
  147 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  148 + implied, including, without limitation, any warranties or conditions
  149 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
  150 + PARTICULAR PURPOSE. You are solely responsible for determining the
  151 + appropriateness of using or redistributing the Work and assume any
  152 + risks associated with Your exercise of permissions under this License.
  153 +
  154 + 8. Limitation of Liability. In no event and under no legal theory,
  155 + whether in tort (including negligence), contract, or otherwise,
  156 + unless required by applicable law (such as deliberate and grossly
  157 + negligent acts) or agreed to in writing, shall any Contributor be
  158 + liable to You for damages, including any direct, indirect, special,
  159 + incidental, or consequential damages of any character arising as a
  160 + result of this License or out of the use or inability to use the
  161 + Work (including but not limited to damages for loss of goodwill,
  162 + work stoppage, computer failure or malfunction, or any and all
  163 + other commercial damages or losses), even if such Contributor
  164 + has been advised of the possibility of such damages.
  165 +
  166 + 9. Accepting Warranty or Additional Liability. While redistributing
  167 + the Work or Derivative Works thereof, You may choose to offer,
  168 + and charge a fee for, acceptance of support, warranty, indemnity,
  169 + or other liability obligations and/or rights consistent with this
  170 + License. However, in accepting such obligations, You may act only
  171 + on Your own behalf and on Your sole responsibility, not on behalf
  172 + of any other Contributor, and only if You agree to indemnify,
  173 + defend, and hold each Contributor harmless for any liability
  174 + incurred by, or claims asserted against, such Contributor by reason
  175 + of your accepting any such warranty or additional liability.
  176 +
  177 + END OF TERMS AND CONDITIONS
  178 +
  179 + APPENDIX: How to apply the Apache License to your work.
  180 +
  181 + To apply the Apache License to your work, attach the following
  182 + boilerplate notice, with the fields enclosed by brackets "[]"
  183 + replaced with your own identifying information. (Don't include
  184 + the brackets!) The text should be enclosed in the appropriate
  185 + comment syntax for the file format. We also recommend that a
  186 + file or class name and description of purpose be included on the
  187 + same "printed page" as the copyright notice for easier
  188 + identification within third-party archives.
  189 +
  190 + Copyright [yyyy] [name of copyright owner]
  191 +
  192 + Licensed under the Apache License, Version 2.0 (the "License");
  193 + you may not use this file except in compliance with the License.
  194 + You may obtain a copy of the License at
  195 +
  196 + http://www.apache.org/licenses/LICENSE-2.0
  197 +
  198 + Unless required by applicable law or agreed to in writing, software
  199 + distributed under the License is distributed on an "AS IS" BASIS,
  200 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  201 + See the License for the specific language governing permissions and
  202 + limitations under the License.
  1 +# Flutter Math
  2 +
  3 +[![Build Status](https://travis-ci.com/znjameswu/flutter_math.svg?branch=master)](https://travis-ci.com/znjameswu/flutter_math) [![codecov](https://codecov.io/gh/znjameswu/flutter_math/branch/master/graph/badge.svg)](https://codecov.io/gh/znjameswu/flutter_math) [![Pub Version](https://img.shields.io/pub/v/flutter_math_fork)](https://pub.dev/packages/flutter_math_fork)
  4 +
  5 +
  6 +## ⚠ fork
  7 +
  8 +This is a fork of [flutter_math](https://github.com/znjameswu/flutter_math) addressing compatibility
  9 +problems while `flutter_math` is not being maintained.
  10 +
  11 +---
  12 +
  13 +
  14 +
  15 +Math equation rendering in pure Dart & Flutter.
  16 +
  17 +
  18 +This project aims to achieve maximum compatibility and fidelity with regard to the [KaTeX](https://github.com/KaTeX/KaTeX) project, while maintaining the performance advantage of Dart and Flutter. A further [UnicodeMath](https://www.unicode.org/notes/tn28/UTN28-PlainTextMath-v3.1.pdf)-style equation editing support will be experimented in the future.
  19 +
  20 +
  21 +The TeX parser is a Dart port of the KaTeX parser. There are only a few unsupported features and parsing differences compared to the original KaTeX parser. List of some unsupported features can be found [here](doc/unsupported.md).
  22 +
  23 +## [Online Demo](https://znjameswu.github.io/flutter_math_demo/)
  24 +
  25 +## Rendering Samples
  26 +
  27 +`x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}`
  28 +
  29 +![Example1](https://raw.githubusercontent.com/znjameswu/flutter_math/master/doc/img/delta.png)
  30 +
  31 +`i\hbar\frac{\partial}{\partial t}\Psi(\vec x,t) = -\frac{\hbar}{2m}\nabla^2\Psi(\vec x,t)+ V(\vec x)\Psi(\vec x,t)`
  32 +
  33 +![Example2](https://raw.githubusercontent.com/znjameswu/flutter_math/master/doc/img/schrodinger.png)
  34 +
  35 +`\hat f(\xi) = \int_{-\infty}^\infty f(x)e^{- 2\pi i \xi x}\mathrm{d}x`
  36 +
  37 +![Example3](https://raw.githubusercontent.com/znjameswu/flutter_math/master/doc/img/fourier.png)
  38 +
  39 +
  40 +## How to use
  41 +
  42 +Add `flutter_math` to your `pubspec.yaml` dependencies
  43 +
  44 +### Mobile
  45 +Currently only Android platform has been tested. If you encounter any issues with iOS, please file them.
  46 +
  47 +### Web
  48 +Web support is added in v0.1.6. It is tested for DomCanvas backend. In general it should behave largely the same with mobile. It is expected to break with CanvasKit backend. Check out the [Online Demo](https://znjameswu.github.io/flutter_math_demo/)
  49 +
  50 +## API usage (v0.2.0)
  51 +The usage is straightforward. Just `Math.tex(r'\frac a b')`. There is also optional arguments of `TexParserSettings settings`, which corresponds to Settings in KaTeX and support a subset of its features.
  52 +
  53 +Display-style equations:
  54 +```dart
  55 +Math.tex(r'\frac a b', mathStyle: MathStyle.display) // Default
  56 +```
  57 +
  58 +In-line equations
  59 +```dart
  60 +Math.tex(r'\frac a b', mathStyle: MathStyle.text)
  61 +```
  62 +
  63 +The default size of the equation is obtained from the build context. If you wish to specify the size, you can use `textStyle`. Note: this parameter will also change how big 1cm/1pt/1inch is rendered on the screen. If you wish to specify the size of those absolute units, use `logicalPpi`
  64 +
  65 +```dart
  66 +Math.tex(
  67 + r'\frac a b',
  68 + textStyle: TextStyle(fontSize: 42),
  69 + // logicalPpi: MathOptions.defaultLogicalPpiFor(42),
  70 +)
  71 +```
  72 +
  73 +There is also a selectable variant `SelectableMath` that creates selectable and copy-able equations on both mobile and web. (EXPERIMENTAL) Users can select part of the equation and obtain the encoded TeX strings. The usage is similar to Flutter's `SelectableText`.
  74 +
  75 +```dart
  76 +SelectableMath.tex(r'\frac a b', textStyle: TextStyle(fontSize: 42))
  77 +```
  78 +
  79 +If you would like to display custom styled error message, you should use `onErrorFallback` parameter. You can also process the errors in this function. But beware this function is called in build function.
  80 +```dart
  81 +Math.tex(
  82 + r'\garbled $tring',
  83 + textStyle: TextStyle(color: Colors.green),
  84 + onErrorFallback: (err) => Container(
  85 + color: Colors.red,
  86 + child: Text(err.messageWithType, style: TextStyle(color: Colors.yellow)),
  87 + ),
  88 +)
  89 +```
  90 +
  91 +If you wish to have more granularity dealing with equations, you can manually invoke the parser and supply AST into the widget.
  92 +```dart
  93 +SyntaxTree ast;
  94 +try {
  95 + ast = SyntaxTree(greenRoot: TexParser(r'\frac a b', TexParserSettings()).parse());
  96 +} on ParseException catch (e) {
  97 + // Handle my error here
  98 +}
  99 +
  100 +SelectableMath(
  101 + ast: ast,
  102 + mathStyle: MathStyle.text,
  103 + textStyle: TextStyle(fontSize: 42),
  104 +)
  105 +```
  106 +
  107 +## [Line Breaking](doc/line_breaking.md)
  108 +
  109 +## Credits
  110 +This project is possible thanks to the inspirations and resources from [the KaTeX Project](https://katex.org/), [MathJax](www.mathjax.org), [Zefyr](https://github.com/memspace/zefyr), and [CaTeX](https://github.com/simpleclub/CaTeX).
  111 +
  112 +## Goals
  113 +- [x] : TeX math parsing (See [design doc](doc/design.md))
  114 +- [x] : AST rendering in flutter
  115 +- [x] : Selectable widget
  116 +- [x] : TeX output (WIP)
  117 +- [ ] : UnicodeMath parsing and encoding
  118 +- [ ] : [UnicodeMath](https://www.unicode.org/notes/tn28/UTN28-PlainTextMath-v3.1.pdf)-style editing
  119 +- [ ] : Breakable equations
  120 +- [ ] : MathML parsing and encoding
  121 +
  1 +* [ ] Nullability check of required arguments!
  2 +
  3 +* LeftRight should remove 0.12 em nulldelimiter introduced by FracNode.
  4 +
  5 +* | and \u2223 needs extra moderation for the symbol (also in stacked delimiter) (\u2225Parallel & \u2016Vert)
  6 +
  7 +* extract nulldelimiter
  8 +
  9 +* modify symbols.dart to change the render config of surrogate pairs
  10 +
  11 +* equation breaking
  12 +
  13 +* gathered environment
  1 +# Design Rationale
  2 +
  3 +## Priority of design
  4 +1. Consistent editing logic
  5 +2. Faithful rendering of additional features if not conflicting with editing logic.
  6 +3. Fast re-rendering on editing
  7 +4. Good layout on constrained screen sizes
  8 +5. Simple and declarative code
  9 +6. Fast parsing and rendering
  10 +
  11 +## AST
  12 +
  13 +The AST of this project has a very similar structure compared with MathML, the AST of MathJax, with several differences:
  14 +
  15 +- MultiscriptNode do not support extra pairs of postscripts as <mmultiscripts> in MathML does. Extra postscript pairs will conflict with UnicodeMath input syntax.
  16 +- <msubsup> and part of <mmultiscripts> are merged into one single MultiscriptsNode. After removing the support of extra postscript feature, they become largely the same. In current TeX height/depth calculation mechanism, nesting subsups with presubscripts will fail to generate vertically-aligned scripts. We have to merge it into one node anyway.
  17 +
  18 +
  19 +### Rosyln's Reg-Green Tree
  20 +The AST uses Roslyn's immutable Red-Green Tree (without deduplication features) to construct the AST. And the GreenNodes are completely stateless and context-free.
  21 +- In the build process, this ensures a uni-directional data flow. Options down, widgets up.
  22 +- It is simpler to perform widget reusing. As long as the GreenNode and relevant Options stay the same, the entire subtree can be bypassed. And this simple mechanism will cover ALL possible widget reusing scenarios, as the flutter widget tree itself is immutable as well.
  23 +- It is tremendously easier and more robust to revert any editing changes. You just need to find the old root node.
  24 +- Any layout parameters can be safely calculated and stored inside AST nodes.
  25 +
  26 +
  27 +### Text and Math mode AST design Rationale:
  28 +We merge text-mode symbols and math-mode symbols into a single SymbolNode class but separated by their AtomTypes at the parsing time. This distinction of symbols will be preserved throughout any editing. We did not choose the following alternatives:
  29 +- Make a TextNode extend from EquationRowNode and only allow this type to hold TextSymbolNode as children
  30 + - Good for editing experience
  31 + - Horrible nesting of math inside text inside math while editing (which KaTeX supports). Type safety concerns for TextSymbolNode's occurance.
  32 + - We could straightfoward avoid math inside text during parsing. But it requires a complete re-write of the parser.
  33 +- Make a TextNode same as before, but adding a property in Options to change the behavior of child MathSymbolNode
  34 + - Similar as before without type safety concern. However a symbol will behave vastly different in two modes. Some lazy initialization become impossible and inefficient.
  35 +- Add a property in Options, and using a StyleNode to express mode changes
  36 + - Similar to above option. This StyleNode will require extra caution during AST optimization due to its property and all the text style commands beneath it.
  37 +- Use a tree of TextNode inspired by TextSpan
  38 + - How can I nest math inside text?
  39 +
  40 +
  41 +
  42 +## Rendering
  43 +- Tex's height and depth calculations are performed implicitly by the layout process of RenderObjects. The height and depth information is carried by MathOrd widget and propagated during widget composition. I feel this is better and simpler than using widget-layer parameters to override existing everyday render-layer behaviors.
  44 +- Other Tex's font specs are calculated inside AST nodes and passed explicitly into dedicated layout widgets. Incorporating them (e.g. italic) into RenderObject will cause heavy compatibility burdens (as the breakable RenderObject has already caused) with no real benefits, since the AST is already efficient at calculating and reusing these parameters.
  45 +- (WIP) Breakable RenderObjects are made subclasses of RenderBox, which caused huge amount of boilerplate code and exception spots. But we have no choice since we need the interop between RenderBox and breakable ones.
  46 +- A large amount of layouts are expressed by custom IntrinsicLayoutDelegate. This is due to the observation that most math nodes will disregard constraints during layout, and its horizontal resizing does not influence vertical layout, and vice versa. IntrinsicLayoutDelegate is hugely concise and efficient in this scenario.
  47 +
  48 +
  49 +## Symbols and Font
  50 +KaTeX use mode (math/text) to directly map commands depending on context into different replacement atoms + atom types + font family. The atom will first try to use explicit contextual font. If not available, it will fall back to default font provided by atom type and font family. (With the exception of wide chars)
  51 +
  52 +Due to the need of editing and copy/pasting, we need to maintain an independent, Unicode-based character set as AST symbols. We chose a method similar to MathJax. Unicode char + variantForm uniquely define a symbol. Each symbol has its default replacement, types and font settings, but they can only be overrided when they are constructed by the compiler. Likewise, the symbol will first try to use explicit contextual font. If not available, it will fall back. Any chars using a replacement will never be able to override their font family. (with some exceptions on some punctuations which KaTeX choose to use replacement).
  53 +
  54 +variantForm is basically chosen in line with MathJax, for the exception of \u210F(\hbar).
  1 +# Line Breaking
  2 +
  3 +## Standard TeX Style vs. Advanced Display Style
  4 +This library plans to support two types of line breaking: standard TeX style and advanced display style.
  5 +
  6 +Comparison between the two modes.
  7 +
  8 +| Line Breaking | Standard TeX Style | Advanced Display Style |
  9 +|----------------------|---------------------------------------------------------------------|------------------------------------------------------|
  10 +| Status | Done | Planning |
  11 +| Scenario | In-line equations only | Display equations only |
  12 +| Break Point Level | Only the outermost level. E.g., not inside \left \right constructs. | Any nested node as long as in a single-line context |
  13 +| Break Point Position | After `bin` and `rel` atoms | Before `bin` atoms or after `rel` atoms. |
  14 +| API Style | Generate a list of broken-down widgets | A dedicated RenderObject subtype and layout protocol |
  15 +
  16 +## Standard TeX Style Quick Start
  17 + Currently you can try standard TeX-style line breaking through a very simplistic API:
  18 +
  19 +```dart
  20 +final longEq = Math.tex(r'12345678\times 987654321 = 121932631112635269');
  21 +final breakResult = longEq.texBreak();
  22 +final widget = Wrap(
  23 + children: breakResult.parts,
  24 +);
  25 +```
  26 +`Math.texBreak` will break the equation into pieces according to TeX spec **as much as possible** (some exceptions exist when `enforceNoBreak: true`). Then, you can assemble the pieces in whatever way you like. The most simple way is to put the parts inside a `Wrap`.
  27 +
  28 +If you wish to implement a custom line breaking policy to manage the penalties, you can access the penalties in `BreakResult.penalties`. The values in `BreakResult.penalties` represent the line-breaking penalty generated at the right end of each `BreakResult.parts`. Note that `\nobreak` or `\penalty<number>=10000>` are left unbroken by default, you need to supply `enforceNoBreak: false` into `Math.texBreak` to expose those break points and their penalties.
  29 +
  30 +
  31 +## Background
  32 +TeX equation line breaking are documented in TeXBook Chapter 18.6. It reads
  33 +> When you have formulas in a paragraph, TEX may have to
  34 +break them between lines. ... A formula will be broken only after a relation symbol like = or < or →,
  35 +or after a binary operation symbol like + or − or ×, where the relation or binary
  36 +operation is on the “outer level” of the formula (i.e., not enclosed in {...} and
  37 +not part of an ‘\over’ construction).
  38 +
  39 +From other popular equation editing software such as MS Word, we can see that the displayed equations can also be broken. The main difference is that it can line break inside arbitrarily deep nested nodes. Also it breaks before `bin` atoms rather than after.
  40 +
  41 +However, the second style is very hard to achieve with current Flutter Math's design.
  42 +
  43 +For example, the height of left/right delimiters depends on the highest element within the delimiters. In Flutter Math, it is decided that the height/width are calculated by Flutter's layout pipeline rather than precalculating them from AST. So each node has to be wrapped in one single RenderObject to share layout results, which requires a dedicated `RenderObject` subtype and a dedicated layout protocol.
  1 +# v0.2.0 Migration Guide
  2 +
  3 +## Name Changes
  4 +| Old name | New name |
  5 +|------------|-------------------|
  6 +| Options | MathOptions |
  7 +| Settings | TexParserSettings |
  8 +| SizeMode | MathSize |
  9 +| ParseError | ParseException |
  10 +
  11 +## New Widget Variant
  12 +The `FlutterMath` class has been deprecated and becomes a wrapper of `Math` widget. You should use more specific widget variants: `Math` and `SelectableMath`.
  13 +
  14 +`Math` is static, non-selectable. `SelectableMath` is static but selectable. If you wish to avoid extra performance cost brings by selectibility, use `Math`.
  15 +
  16 +The constructor name has also been changed to `Math.tex` and `SelectableMath.tex`.
  17 +
  18 +## TextStyle over Options
  19 +`TextStyle` will be adopted as the parameter in exposed APIs to replace `Options`. Directly supplying `Options` is OK, but is apparently not the best way.
  20 +
  21 +### Use TextStyle to controll the size of your equation
  22 +1. `TextStyle.fontSize` will be the size of any math symbols.
  23 +2. `logicalPpi` will be used to decide the size of absolute units (pt, cm, inch, etc).
  24 +3. If `logicalPpi` is null, then absolute units will resize on different `TextStyle.fontSize` to keep a consistent ratio (Just like current `baseSizeMultiplier`'s behavior).
  25 +4. `baseSizeMultiplier` is deprecated. If you still wish similar behavior, calculate relevant parameters from `MathOptions.defaultFontSize` and `double defaultLogicalPpi(double fontSize)`.
  26 +5. If neither `TextStyle.fontSize` nor `logicalPpi` is supplied, then the widget will use the default `TextStyle` supplied by Flutter's build context.
  27 +
  28 +## Sanitized Error System
  29 +`ParseError` will be renamed to `ParseException`. Also, other throws within the library will be sanitized to throw either `ParseException`, `BuildException`, `EncodeExecption`. All of them extends `FlutterMathException`. As a result, `onErrorFallback` will have a different signature and allows users to handle exceptions with type safety.
  30 +
  31 +Detailed exception variant can be found in their respective API documentations.
  32 +
  33 +The final API will look like
  34 +```
  35 +Math.tex(
  36 + r'\frac a b',
  37 + textStyle: TextStyle(fontSize: 42),
  38 + // settings: TexParserSettings(),
  39 + // logicalPpi: defaultLogicalPpi(42),
  40 + onErrorFallback: (err) => {
  41 + if (error is ParseException)
  42 + return SelectableText('ParseError: ${err.message}');
  43 + return Container(
  44 + color: Colors.red,
  45 + SelectableText(err.toString());
  46 + )
  47 + },
  48 +)
  49 +```
  1 +# References on UnicodeMath input implementation
  2 +
  3 +There are two areas of UnicodeMath input support currently under consideration: user input, or a string input. The plan is to support both by treating string input as raw sequence of AtomNode, performing autocorrect, then performing an exhaustive fold with lowest precedence from the end. (This behavior is not guaranteed by the spec itself, but it seems good.)
  4 +
  5 +## Difference between user input and string input
  6 +### Heuristic operation
  7 +- '\sum a b' input by user will produce '\sum\of(a b)'. But in string input it should be '\sum\of(a) b'
  8 +- same with every operators creating an SlottableNode and moves cursor inside
  9 +
  10 +
  11 +The [UnicodeMath spec](https://www.unicode.org/notes/tn28/UTN28-PlainTextMath-v3.1.pdf) itself proposed a reference parsing algorithm in Appendix A. However there are some conflicts in the UnicodeMath spec.
  12 +
  13 +## Conflicts and Decision
  14 +
  15 +Spec-wise, this reference algorithm deviates from the spec:
  16 +- Handling of the unary operators before and after subsup (*Align with reference*)
  17 + - '+^2', 'a^-2' as subsup? (Spec says no. Reference says yes.)
  18 +- \of \funcapply \naryand
  19 +
  20 +Also, MS Word's implementation deviates from the reference:
  21 +- Handling of the normal operators after div & subsup (*Align with MS Word*)
  22 + - '1/+2', '+1/2' as fraction? (Reference disallows both. MS Word permits the first one.)
  23 +- Differentiation between the unary plus and unary subtract (*Align with MS Word*)
  24 + - 'a^-1' vs 'a^+1' as subsup? (Reference only allows the first. MS Word allows both.)
  25 +- ScriptBase parsing (*Align with MS Word*)
  26 + - 'word^2' as subsup? (Reference says yes. MS Word says no.)
  27 +
  28 +Some quirks in MS Word:
  29 +- `/\of ` folds into `\frac{}{\frac{}{}}`, while `^\of ` leads to an \of on the supscript as expected. (Potentially bug)
  30 +- `/` wins in precedence in the combination `/^`. (*reproduced*)
  31 +- `(1) /2` folds into `\frac{1}{2}`, while `1 /2` folds into `1 \frac{}{2}`. (*reproduced*)
  32 +- `\sum \of \of ` folds into `\sum{}`. (*reproduced*)
  33 +- In `∑^∑_a▒a`, `\of` has a higher precedence than `^`.
  34 +
  35 +Some conflicts between UnicodeMath and TeX:
  36 +- Rendering of subsup scripts when base comprises of multiple elements.
  37 +
  38 +## Parser Scheme
  39 +
  40 +The following parser scheme should be good enough to comply with the spec and mimic reference/MS Word behavior.
  41 +
  42 +Operators will declare
  43 +- Their precedence
  44 +- Whether they need left operand and right operand
  45 +- Their associativity (i.e., '/' and '^' has opposite associativity)
  46 +- Whether they will unwrap parenthesis-enclosed operand (i.e. scriptBase will retain the parenthesis)
  47 +
  48 +Fold operations are specified with precedence and starting pos. A one-time fold will iterate from right to left:
  49 +- Collect if not an operator.
  50 +- If met an operator with lower precedence, abort and return collected nodes. Open-close pairs will not be aborted.
  51 +- If met an operator with higher precedence,
  52 + - If said operator needs left operand, launch an exhaustive fold to collect left operand
  53 + - If left associative, the exhaustive fold will collect the largest block with greater-or-equal precedence.
  54 + - If right associative, it will only allows greater precedence.
  55 + - Give operands to the operand (If needed) and concat the result. Return.
  56 +
  57 +An exhaustive fold with precedence p_start will:
  58 +- Perform a one-time fold. Denote the fold result's internal precedence as p_res. End position has either index = 0 or has a precedence p_end < p_res.
  59 +- At the end position, if p_end > p_start, continue with another exhaustive fold with the same precedence. Results from the previous steps (p_res) will be passed into the fold (p_end) as potential right operand.
  60 +
  61 +Some special points:
  62 +- Some operators may throw an exception (i.e. parenthesis mismatch). This will cause a one-time fold to revert, or the immediate cycle of a exhaustive fold to revert.
  63 +- Many operators will raise their precedence if preceded by fraction operators and script operators.
  64 +- Many operators will be forcefully taken as base if the script operators cannot fetch a left operand as base.
  65 +- The folding of Naryand will only be triggered by \of
  66 +- Some operators will eventually have to rollback due to their non-local ambiguity, such as `|`.
  67 +
  68 +## Unsupported UnicodeMath functions
  69 +The following features are not supported by MS Word and by Flutter Math
  70 +- \lessgtr \gtrless
  71 +- \sqsubseteq \sqsupseteq
  72 +- \ndiv
  73 +
  74 +The following feature are not supported by Flutter Math
  75 +- \sdiv
  76 +- \ldiv
  77 +- Nary
  78 +- Nary limits control
  79 +- prescript ?
  80 +- multiscript with a composite base (render difference)
  81 +- \coint
  82 +- \middle
  83 +
  84 +## Reference algorithm
  85 +- char ← Unicode character
  86 +- space ← ASCII space (U+0020)
  87 +- αASCII ← ASCII A-Z a-z
  88 +- nASCII ← ASCII 0-9
  89 +- αnMath ← Unicode math alphanumeric (U+1D400 – U+1D7FF with some Letterlike symbols U+2102 – U+2134)
  90 +- αnOther ← Unicode alphanumeric not including αnMath nor nASCII
  91 +- αn ← αnMath | αnOther
  92 +---
  93 +- diacritic ← Unicode combining mark
  94 +- opArray ← ‘&’ | VT | ‘■’
  95 +- opClose ← ‘)’ | ‘]’ | ‘}’ | ‘⌍’
  96 +- opCloser ← opClose | “\close”
  97 +- opDecimal ← ‘.’ | ‘,’
  98 +- opHbracket ← Unicode math horizontal bracket
  99 +- opNary ← Unicode integrals, summation, product, and other nary ops
  100 +- opOpen ← ‘(’ | ‘[’ | ‘{’ | ‘⌌’
  101 +- opOpener ← opOpen | “\open”
  102 +- opOver ← ‘/’ | “\atop”
  103 +- opBuildup ← ‘_’ | ‘^’ | ‘√’ | ‘∙’ | ‘√’ | ‘□’ | ‘/’ | ‘|’ | opArray | opOpen | opClose | opNary | opOver | opHbracket | opDecimal
  104 +- other ← char – {αn + nASCII + diacritic + opBuildup + CR}
  105 +---
  106 +- diacriticbase ← αn | nASCII | ‘(’ exp ‘)’
  107 +- diacritics ← diacritic | diacritics diacritic
  108 +- atom ← αn | diacriticbase diacritics
  109 +- atoms ← atom | atoms atom
  110 +- digits ← nASCII | digits nASCII
  111 +- number ← digits | digits opDecimal digits
  112 +---
  113 +- expBracket ← opOpener exp opCloser
  114 + ← ‘||’ exp ‘||’
  115 + ← ‘|’ exp ‘|’
  116 +- word ← αASCII | word αASCII
  117 +- scriptbase ← word | word nASCII | αnMath | number | other | expBracket | opNary
  118 +- soperand ← operand | ‘∞’ | ‘-’ operand | “-∞”
  119 +- expSubsup ← scriptbase ‘_’ soperand ‘^’ soperand | scriptbase ‘^’ soperand ‘_’ soperand
  120 +- expSubscript ← scriptbase ‘_’ soperand
  121 +- expSuperscript ← scriptbase ‘^’ soperand
  122 +- expScript ← expSubsup | expSubscript | expSuperscript
  123 +---
  124 +- entity ← atoms | expBracket | number
  125 +- factor ← entity | entity ‘!’ | entity “!!” | function | expScript
  126 +- operand ← factor | operand factor
  127 +- box ← ‘□’ operand
  128 +- hbrack ← opHbracket operand
  129 +- sqrt ← ‘√’ operand
  130 +- cubert ← ‘∙’ operand
  131 +- fourthrt ← ‘√’ operand
  132 +- nthrt ← “√(” operand ‘&’ operand ‘)’
  133 +- function ← sqrt | cubert | fourthrt | nthrt | box | hbrack
  134 +- numerator ← operand | fraction
  135 +- fraction ← numerator opOver operand
  136 +---
  137 +- row ← exp | row ‘&’ exp
  138 +- rows ← row | rows ‘@’ row
  139 +- array ← “\array(” rows ‘)’
  140 +---
  141 +- element ← fraction | operand | array
  142 +- exp ← element | exp other element
  1 +
  2 +## Won't support functionalities
  3 +- `\href`
  4 +- `\includegraphics`
  5 +- `\lap` and other horizontal lapping command (This will probably be reconsidered in the future)
  6 +- `\mathchoice` and dependent features
  7 +- `\smash`
  8 +- `\overlinesegment`, `\underlinesegment`
  9 +- `\pmb`
  10 +- `\hspace*`
  11 +- Exotic composite symbols: `\Coloneqq, \coloneq, \Coloneq, \Eqqcolon, \Eqcolon, \colonapprox, \Colonapprox, \colonsim, \Colonsim, \simcolon, \simcoloncolon, \approxcolon, \approxcoloncolon`, and also their equivalent `\coloncolonequals` ...
  12 +- `\vcentcolon`
  13 +- `\textcircle` and related `\copyright`, `\registered`, etc.
  14 +
  15 +## Functionalities that will be supported later
  16 +- `gather` environment
  17 +- `Vmatrix` environment
  18 +- `\mathnormal`
  19 +
  20 +## Known parsing differences to KaTeX
  21 +- `\not` can only accept selected characters following it, because it is no longer backed by `\rlap`. (This will probably be revisited).
  22 +- The parsing behavior of `\overbrace` and `\underbase` with sub-sup pairs will be in line with MathJax rather than KaTeX.
  23 +- `\u2258` will be investigated later
  24 +
  25 +## Known rendering differences to KaTeX
  26 +- Math functions with limit-like subscript and superscript will not adapt to sub/sup under/over styles under different styles. This breaks TeX spec. This is due to the design of AST, and is in accordance with UnicodeMath designs.
  27 +- Multiple `\hlines` and `||` column separators for matrices will not be supported, just as MathJax won't either.
  28 +- `aligned` and `alignedat` will have column spacings more similar to an ordinary equation. This should be an improvement to KaTeX and MathJax.
  29 +- `\genfrac`'s delimiters will have a larger spacing with inner node. (This might be fixed in future)
  30 +- `\color` commands inside a block will NOT be applied to right delimiters. This is in line with MathJax rather than KaTeX.
  31 +- `\colon`'s behavior will be in line with MathJax rather than KaTeX.
  32 +- `\mathop` will no longer vertically center single characaters. MathJax doesn't do this either.
  33 +- `\cancel`, `\xcancel`, `\bcancel` will render differently compared to KaTeX. The vertical padding will be more similar to MathJaX.
  34 +- Due to the lack of `\mathchoice`, `\pod`, `\pmod`, `\mod` will have fixed spacing.
  35 +- `\dfrac`, `\tfrac` ... will have slight size deviation from KaTeX and will be in line with MathJax's rendering behavior.
  36 +- `\sqrt` will no longer underflow below the baseline when given a child whose height is too small (e.g. `\sqrt{.}`). This is also different from MathJaX.
  37 +- The size of `\sqrt` symbol might be slightly different. Due to a different style choosing scheme.
  38 +- There will be no automatic thinspace between `\cdots` and right delimiter, (which is odd. MathJax and Tex don't have them either)
  39 +
  40 +
  41 +Any other deviations from KaTeX will be considered as bug.
  1 +# example
  2 +
  3 +A new Flutter project.
  4 +
  5 +## Getting Started
  6 +
  7 +This project is a starting point for a Flutter application.
  8 +
  9 +A few resources to get you started if this is your first Flutter project:
  10 +
  11 +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
  12 +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
  13 +
  14 +For help getting started with Flutter, view our
  15 +[online documentation](https://flutter.dev/docs), which offers tutorials,
  16 +samples, guidance on mobile development, and a full API reference.
  1 +def localProperties = new Properties()
  2 +def localPropertiesFile = rootProject.file('local.properties')
  3 +if (localPropertiesFile.exists()) {
  4 + localPropertiesFile.withReader('UTF-8') { reader ->
  5 + localProperties.load(reader)
  6 + }
  7 +}
  8 +
  9 +def flutterRoot = localProperties.getProperty('flutter.sdk')
  10 +if (flutterRoot == null) {
  11 + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
  12 +}
  13 +
  14 +def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
  15 +if (flutterVersionCode == null) {
  16 + flutterVersionCode = '1'
  17 +}
  18 +
  19 +def flutterVersionName = localProperties.getProperty('flutter.versionName')
  20 +if (flutterVersionName == null) {
  21 + flutterVersionName = '1.0'
  22 +}
  23 +
  24 +apply plugin: 'com.android.application'
  25 +apply plugin: 'kotlin-android'
  26 +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
  27 +
  28 +android {
  29 + compileSdkVersion 28
  30 +
  31 + sourceSets {
  32 + main.java.srcDirs += 'src/main/kotlin'
  33 + }
  34 +
  35 + lintOptions {
  36 + disable 'InvalidPackage'
  37 + }
  38 +
  39 + defaultConfig {
  40 + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
  41 + applicationId "com.example.example"
  42 + minSdkVersion 16
  43 + targetSdkVersion 28
  44 + versionCode flutterVersionCode.toInteger()
  45 + versionName flutterVersionName
  46 + }
  47 +
  48 + buildTypes {
  49 + release {
  50 + // TODO: Add your own signing config for the release build.
  51 + // Signing with the debug keys for now, so `flutter run --release` works.
  52 + signingConfig signingConfigs.debug
  53 + }
  54 + }
  55 +}
  56 +
  57 +flutter {
  58 + source '../..'
  59 +}
  60 +
  61 +dependencies {
  62 + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
  63 +}
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.example.example">
  3 + <!-- Flutter needs it to communicate with the running application
  4 + to allow setting breakpoints, to provide hot reload, etc.
  5 + -->
  6 + <uses-permission android:name="android.permission.INTERNET"/>
  7 +</manifest>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.example.example">
  3 + <!-- io.flutter.app.FlutterApplication is an android.app.Application that
  4 + calls FlutterMain.startInitialization(this); in its onCreate method.
  5 + In most cases you can leave this as-is, but you if you want to provide
  6 + additional functionality it is fine to subclass or reimplement
  7 + FlutterApplication and put your custom class here. -->
  8 + <application
  9 + android:name="io.flutter.app.FlutterApplication"
  10 + android:label="example"
  11 + android:usesCleartextTraffic="true"
  12 + android:icon="@mipmap/ic_launcher">
  13 + <activity
  14 + android:name=".MainActivity"
  15 + android:launchMode="singleTop"
  16 + android:theme="@style/LaunchTheme"
  17 + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
  18 + android:hardwareAccelerated="true"
  19 + android:windowSoftInputMode="adjustResize">
  20 + <!-- Specifies an Android theme to apply to this Activity as soon as
  21 + the Android process has started. This theme is visible to the user
  22 + while the Flutter UI initializes. After that, this theme continues
  23 + to determine the Window background behind the Flutter UI. -->
  24 + <meta-data
  25 + android:name="io.flutter.embedding.android.NormalTheme"
  26 + android:resource="@style/NormalTheme"
  27 + />
  28 + <!-- Displays an Android View that continues showing the launch screen
  29 + Drawable until Flutter paints its first frame, then this splash
  30 + screen fades out. A splash screen is useful to avoid any visual
  31 + gap between the end of Android's launch screen and the painting of
  32 + Flutter's first frame. -->
  33 + <meta-data
  34 + android:name="io.flutter.embedding.android.SplashScreenDrawable"
  35 + android:resource="@drawable/launch_background"
  36 + />
  37 + <intent-filter>
  38 + <action android:name="android.intent.action.MAIN"/>
  39 + <category android:name="android.intent.category.LAUNCHER"/>
  40 + </intent-filter>
  41 + </activity>
  42 + <!-- Don't delete the meta-data below.
  43 + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
  44 + <meta-data
  45 + android:name="flutterEmbedding"
  46 + android:value="2" />
  47 + </application>
  48 + <uses-permission android:name="android.permission.INTERNET" />
  49 + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  50 + <uses-permission android:name="android.permission.WAKE_LOCK" />
  51 +</manifest>
  1 +package com.example.example
  2 +
  3 +import io.flutter.embedding.android.FlutterActivity
  4 +
  5 +class MainActivity: FlutterActivity() {
  6 +}
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Modify this file to customize your launch splash screen -->
  3 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  4 + <item android:drawable="@android:color/white" />
  5 +
  6 + <!-- You can insert your own image assets here -->
  7 + <!-- <item>
  8 + <bitmap
  9 + android:gravity="center"
  10 + android:src="@mipmap/launch_image" />
  11 + </item> -->
  12 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <!-- Theme applied to the Android Window while the process is starting -->
  4 + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
  5 + <!-- Show a splash screen on the activity. Automatically removed when
  6 + Flutter draws its first frame -->
  7 + <item name="android:windowBackground">@drawable/launch_background</item>
  8 + </style>
  9 + <!-- Theme applied to the Android Window as soon as the process has started.
  10 + This theme determines the color of the Android Window while your
  11 + Flutter UI initializes, as well as behind your Flutter UI while its
  12 + running.
  13 +
  14 + This Theme is only used starting with V2 of Flutter's Android embedding. -->
  15 + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
  16 + <item name="android:windowBackground">@android:color/white</item>
  17 + </style>
  18 +</resources>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.example.example">
  3 + <!-- Flutter needs it to communicate with the running application
  4 + to allow setting breakpoints, to provide hot reload, etc.
  5 + -->
  6 + <uses-permission android:name="android.permission.INTERNET"/>
  7 +</manifest>
  1 +buildscript {
  2 + ext.kotlin_version = '1.3.50'
  3 + repositories {
  4 + google()
  5 + jcenter()
  6 + }
  7 +
  8 + dependencies {
  9 + classpath 'com.android.tools.build:gradle:3.5.0'
  10 + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  11 + }
  12 +}
  13 +
  14 +allprojects {
  15 + repositories {
  16 + google()
  17 + jcenter()
  18 + }
  19 +}
  20 +
  21 +rootProject.buildDir = '../build'
  22 +subprojects {
  23 + project.buildDir = "${rootProject.buildDir}/${project.name}"
  24 +}
  25 +subprojects {
  26 + project.evaluationDependsOn(':app')
  27 +}
  28 +
  29 +task clean(type: Delete) {
  30 + delete rootProject.buildDir
  31 +}
  1 +org.gradle.jvmargs=-Xmx1536M
  2 +android.enableR8=true
  3 +android.useAndroidX=true
  4 +android.enableJetifier=true
  1 +#Fri Jun 23 08:50:38 CEST 2017
  2 +distributionBase=GRADLE_USER_HOME
  3 +distributionPath=wrapper/dists
  4 +zipStoreBase=GRADLE_USER_HOME
  5 +zipStorePath=wrapper/dists
  6 +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
  1 +// Copyright 2014 The Flutter Authors. All rights reserved.
  2 +// Use of this source code is governed by a BSD-style license that can be
  3 +// found in the LICENSE file.
  4 +
  5 +include ':app'
  6 +
  7 +def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
  8 +def properties = new Properties()
  9 +
  10 +assert localPropertiesFile.exists()
  11 +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
  12 +
  13 +def flutterSdkPath = properties.getProperty("flutter.sdk")
  14 +assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
  15 +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>App</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>io.flutter.flutter.app</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>App</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>FMWK</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>1.0</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>1.0</string>
  23 + <key>MinimumOSVersion</key>
  24 + <string>9.0</string>
  25 +</dict>
  26 +</plist>
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +# Uncomment this line to define a global platform for your project
  2 +# platform :ios, '9.0'
  3 +
  4 +# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
  5 +ENV['COCOAPODS_DISABLE_STATS'] = 'true'
  6 +
  7 +project 'Runner', {
  8 + 'Debug' => :debug,
  9 + 'Profile' => :release,
  10 + 'Release' => :release,
  11 +}
  12 +
  13 +def flutter_root
  14 + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
  15 + unless File.exist?(generated_xcode_build_settings_path)
  16 + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
  17 + end
  18 +
  19 + File.foreach(generated_xcode_build_settings_path) do |line|
  20 + matches = line.match(/FLUTTER_ROOT\=(.*)/)
  21 + return matches[1].strip if matches
  22 + end
  23 + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
  24 +end
  25 +
  26 +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
  27 +
  28 +flutter_ios_podfile_setup
  29 +
  30 +target 'Runner' do
  31 + use_frameworks!
  32 + use_modular_headers!
  33 +
  34 + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
  35 +end
  36 +
  37 +post_install do |installer|
  38 + installer.pods_project.targets.each do |target|
  39 + flutter_additional_ios_build_settings(target)
  40 + end
  41 +end
  1 +PODS:
  2 + - Flutter (1.0.0)
  3 + - path_provider (0.0.1):
  4 + - Flutter
  5 + - webview_flutter (0.0.1):
  6 + - Flutter
  7 +
  8 +DEPENDENCIES:
  9 + - Flutter (from `Flutter`)
  10 + - path_provider (from `.symlinks/plugins/path_provider/ios`)
  11 + - webview_flutter (from `.symlinks/plugins/webview_flutter/ios`)
  12 +
  13 +EXTERNAL SOURCES:
  14 + Flutter:
  15 + :path: Flutter
  16 + path_provider:
  17 + :path: ".symlinks/plugins/path_provider/ios"
  18 + webview_flutter:
  19 + :path: ".symlinks/plugins/webview_flutter/ios"
  20 +
  21 +SPEC CHECKSUMS:
  22 + Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
  23 + path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
  24 + webview_flutter: d2b4d6c66968ad042ad94cbb791f5b72b4678a96
  25 +
  26 +PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
  27 +
  28 +COCOAPODS: 1.11.2
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 46;
  7 + objects = {
  8 +
  9 +/* Begin PBXBuildFile section */
  10 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
  11 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
  12 + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
  13 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
  14 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
  15 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
  16 + F48DE973BA1E521434FC1702 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B74710499D2D255F296A080C /* Pods_Runner.framework */; };
  17 +/* End PBXBuildFile section */
  18 +
  19 +/* Begin PBXCopyFilesBuildPhase section */
  20 + 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
  21 + isa = PBXCopyFilesBuildPhase;
  22 + buildActionMask = 2147483647;
  23 + dstPath = "";
  24 + dstSubfolderSpec = 10;
  25 + files = (
  26 + );
  27 + name = "Embed Frameworks";
  28 + runOnlyForDeploymentPostprocessing = 0;
  29 + };
  30 +/* End PBXCopyFilesBuildPhase section */
  31 +
  32 +/* Begin PBXFileReference section */
  33 + 0F368602A01D0A7D23DAB6FB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
  34 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
  35 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
  36 + 2AB79FE5254A85B8BCC05F07 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
  37 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
  38 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
  39 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
  40 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
  41 + 80533411EE60F73FC4167D74 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
  42 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
  43 + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
  44 + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
  45 + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
  46 + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
  47 + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
  48 + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  49 + B74710499D2D255F296A080C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
  50 +/* End PBXFileReference section */
  51 +
  52 +/* Begin PBXFrameworksBuildPhase section */
  53 + 97C146EB1CF9000F007C117D /* Frameworks */ = {
  54 + isa = PBXFrameworksBuildPhase;
  55 + buildActionMask = 2147483647;
  56 + files = (
  57 + F48DE973BA1E521434FC1702 /* Pods_Runner.framework in Frameworks */,
  58 + );
  59 + runOnlyForDeploymentPostprocessing = 0;
  60 + };
  61 +/* End PBXFrameworksBuildPhase section */
  62 +
  63 +/* Begin PBXGroup section */
  64 + 63DF8C8827F3F9A1CCCA99E9 /* Frameworks */ = {
  65 + isa = PBXGroup;
  66 + children = (
  67 + B74710499D2D255F296A080C /* Pods_Runner.framework */,
  68 + );
  69 + name = Frameworks;
  70 + sourceTree = "<group>";
  71 + };
  72 + 9740EEB11CF90186004384FC /* Flutter */ = {
  73 + isa = PBXGroup;
  74 + children = (
  75 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
  76 + 9740EEB21CF90195004384FC /* Debug.xcconfig */,
  77 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
  78 + 9740EEB31CF90195004384FC /* Generated.xcconfig */,
  79 + );
  80 + name = Flutter;
  81 + sourceTree = "<group>";
  82 + };
  83 + 97C146E51CF9000F007C117D = {
  84 + isa = PBXGroup;
  85 + children = (
  86 + 9740EEB11CF90186004384FC /* Flutter */,
  87 + 97C146F01CF9000F007C117D /* Runner */,
  88 + 97C146EF1CF9000F007C117D /* Products */,
  89 + F6DE744E732F52EEDF08ABDC /* Pods */,
  90 + 63DF8C8827F3F9A1CCCA99E9 /* Frameworks */,
  91 + );
  92 + sourceTree = "<group>";
  93 + };
  94 + 97C146EF1CF9000F007C117D /* Products */ = {
  95 + isa = PBXGroup;
  96 + children = (
  97 + 97C146EE1CF9000F007C117D /* Runner.app */,
  98 + );
  99 + name = Products;
  100 + sourceTree = "<group>";
  101 + };
  102 + 97C146F01CF9000F007C117D /* Runner */ = {
  103 + isa = PBXGroup;
  104 + children = (
  105 + 97C146FA1CF9000F007C117D /* Main.storyboard */,
  106 + 97C146FD1CF9000F007C117D /* Assets.xcassets */,
  107 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
  108 + 97C147021CF9000F007C117D /* Info.plist */,
  109 + 97C146F11CF9000F007C117D /* Supporting Files */,
  110 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
  111 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
  112 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
  113 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
  114 + );
  115 + path = Runner;
  116 + sourceTree = "<group>";
  117 + };
  118 + 97C146F11CF9000F007C117D /* Supporting Files */ = {
  119 + isa = PBXGroup;
  120 + children = (
  121 + );
  122 + name = "Supporting Files";
  123 + sourceTree = "<group>";
  124 + };
  125 + F6DE744E732F52EEDF08ABDC /* Pods */ = {
  126 + isa = PBXGroup;
  127 + children = (
  128 + 2AB79FE5254A85B8BCC05F07 /* Pods-Runner.debug.xcconfig */,
  129 + 0F368602A01D0A7D23DAB6FB /* Pods-Runner.release.xcconfig */,
  130 + 80533411EE60F73FC4167D74 /* Pods-Runner.profile.xcconfig */,
  131 + );
  132 + name = Pods;
  133 + path = Pods;
  134 + sourceTree = "<group>";
  135 + };
  136 +/* End PBXGroup section */
  137 +
  138 +/* Begin PBXNativeTarget section */
  139 + 97C146ED1CF9000F007C117D /* Runner */ = {
  140 + isa = PBXNativeTarget;
  141 + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
  142 + buildPhases = (
  143 + 668574B88DFFA288A30855DB /* [CP] Check Pods Manifest.lock */,
  144 + 9740EEB61CF901F6004384FC /* Run Script */,
  145 + 97C146EA1CF9000F007C117D /* Sources */,
  146 + 97C146EB1CF9000F007C117D /* Frameworks */,
  147 + 97C146EC1CF9000F007C117D /* Resources */,
  148 + 9705A1C41CF9048500538489 /* Embed Frameworks */,
  149 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
  150 + 53DA22E0E6FE2F8B9BCD1344 /* [CP] Embed Pods Frameworks */,
  151 + );
  152 + buildRules = (
  153 + );
  154 + dependencies = (
  155 + );
  156 + name = Runner;
  157 + productName = Runner;
  158 + productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
  159 + productType = "com.apple.product-type.application";
  160 + };
  161 +/* End PBXNativeTarget section */
  162 +
  163 +/* Begin PBXProject section */
  164 + 97C146E61CF9000F007C117D /* Project object */ = {
  165 + isa = PBXProject;
  166 + attributes = {
  167 + LastUpgradeCheck = 1020;
  168 + ORGANIZATIONNAME = "";
  169 + TargetAttributes = {
  170 + 97C146ED1CF9000F007C117D = {
  171 + CreatedOnToolsVersion = 7.3.1;
  172 + LastSwiftMigration = 1100;
  173 + };
  174 + };
  175 + };
  176 + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
  177 + compatibilityVersion = "Xcode 9.3";
  178 + developmentRegion = en;
  179 + hasScannedForEncodings = 0;
  180 + knownRegions = (
  181 + en,
  182 + Base,
  183 + );
  184 + mainGroup = 97C146E51CF9000F007C117D;
  185 + productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
  186 + projectDirPath = "";
  187 + projectRoot = "";
  188 + targets = (
  189 + 97C146ED1CF9000F007C117D /* Runner */,
  190 + );
  191 + };
  192 +/* End PBXProject section */
  193 +
  194 +/* Begin PBXResourcesBuildPhase section */
  195 + 97C146EC1CF9000F007C117D /* Resources */ = {
  196 + isa = PBXResourcesBuildPhase;
  197 + buildActionMask = 2147483647;
  198 + files = (
  199 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
  200 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
  201 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
  202 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
  203 + );
  204 + runOnlyForDeploymentPostprocessing = 0;
  205 + };
  206 +/* End PBXResourcesBuildPhase section */
  207 +
  208 +/* Begin PBXShellScriptBuildPhase section */
  209 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
  210 + isa = PBXShellScriptBuildPhase;
  211 + buildActionMask = 2147483647;
  212 + files = (
  213 + );
  214 + inputPaths = (
  215 + );
  216 + name = "Thin Binary";
  217 + outputPaths = (
  218 + );
  219 + runOnlyForDeploymentPostprocessing = 0;
  220 + shellPath = /bin/sh;
  221 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
  222 + };
  223 + 53DA22E0E6FE2F8B9BCD1344 /* [CP] Embed Pods Frameworks */ = {
  224 + isa = PBXShellScriptBuildPhase;
  225 + buildActionMask = 2147483647;
  226 + files = (
  227 + );
  228 + inputFileListPaths = (
  229 + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
  230 + );
  231 + name = "[CP] Embed Pods Frameworks";
  232 + outputFileListPaths = (
  233 + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
  234 + );
  235 + runOnlyForDeploymentPostprocessing = 0;
  236 + shellPath = /bin/sh;
  237 + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
  238 + showEnvVarsInLog = 0;
  239 + };
  240 + 668574B88DFFA288A30855DB /* [CP] Check Pods Manifest.lock */ = {
  241 + isa = PBXShellScriptBuildPhase;
  242 + buildActionMask = 2147483647;
  243 + files = (
  244 + );
  245 + inputFileListPaths = (
  246 + );
  247 + inputPaths = (
  248 + "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
  249 + "${PODS_ROOT}/Manifest.lock",
  250 + );
  251 + name = "[CP] Check Pods Manifest.lock";
  252 + outputFileListPaths = (
  253 + );
  254 + outputPaths = (
  255 + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
  256 + );
  257 + runOnlyForDeploymentPostprocessing = 0;
  258 + shellPath = /bin/sh;
  259 + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
  260 + showEnvVarsInLog = 0;
  261 + };
  262 + 9740EEB61CF901F6004384FC /* Run Script */ = {
  263 + isa = PBXShellScriptBuildPhase;
  264 + buildActionMask = 2147483647;
  265 + files = (
  266 + );
  267 + inputPaths = (
  268 + );
  269 + name = "Run Script";
  270 + outputPaths = (
  271 + );
  272 + runOnlyForDeploymentPostprocessing = 0;
  273 + shellPath = /bin/sh;
  274 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
  275 + };
  276 +/* End PBXShellScriptBuildPhase section */
  277 +
  278 +/* Begin PBXSourcesBuildPhase section */
  279 + 97C146EA1CF9000F007C117D /* Sources */ = {
  280 + isa = PBXSourcesBuildPhase;
  281 + buildActionMask = 2147483647;
  282 + files = (
  283 + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
  284 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
  285 + );
  286 + runOnlyForDeploymentPostprocessing = 0;
  287 + };
  288 +/* End PBXSourcesBuildPhase section */
  289 +
  290 +/* Begin PBXVariantGroup section */
  291 + 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
  292 + isa = PBXVariantGroup;
  293 + children = (
  294 + 97C146FB1CF9000F007C117D /* Base */,
  295 + );
  296 + name = Main.storyboard;
  297 + sourceTree = "<group>";
  298 + };
  299 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
  300 + isa = PBXVariantGroup;
  301 + children = (
  302 + 97C147001CF9000F007C117D /* Base */,
  303 + );
  304 + name = LaunchScreen.storyboard;
  305 + sourceTree = "<group>";
  306 + };
  307 +/* End PBXVariantGroup section */
  308 +
  309 +/* Begin XCBuildConfiguration section */
  310 + 249021D3217E4FDB00AE95B9 /* Profile */ = {
  311 + isa = XCBuildConfiguration;
  312 + buildSettings = {
  313 + ALWAYS_SEARCH_USER_PATHS = NO;
  314 + CLANG_ANALYZER_NONNULL = YES;
  315 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  316 + CLANG_CXX_LIBRARY = "libc++";
  317 + CLANG_ENABLE_MODULES = YES;
  318 + CLANG_ENABLE_OBJC_ARC = YES;
  319 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  320 + CLANG_WARN_BOOL_CONVERSION = YES;
  321 + CLANG_WARN_COMMA = YES;
  322 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  323 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  324 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  325 + CLANG_WARN_EMPTY_BODY = YES;
  326 + CLANG_WARN_ENUM_CONVERSION = YES;
  327 + CLANG_WARN_INFINITE_RECURSION = YES;
  328 + CLANG_WARN_INT_CONVERSION = YES;
  329 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  330 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  331 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  332 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  333 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  334 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  335 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  336 + CLANG_WARN_UNREACHABLE_CODE = YES;
  337 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  338 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  339 + COPY_PHASE_STRIP = NO;
  340 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  341 + ENABLE_NS_ASSERTIONS = NO;
  342 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  343 + GCC_C_LANGUAGE_STANDARD = gnu99;
  344 + GCC_NO_COMMON_BLOCKS = YES;
  345 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  346 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  347 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  348 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  349 + GCC_WARN_UNUSED_FUNCTION = YES;
  350 + GCC_WARN_UNUSED_VARIABLE = YES;
  351 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  352 + MTL_ENABLE_DEBUG_INFO = NO;
  353 + SDKROOT = iphoneos;
  354 + SUPPORTED_PLATFORMS = iphoneos;
  355 + TARGETED_DEVICE_FAMILY = "1,2";
  356 + VALIDATE_PRODUCT = YES;
  357 + };
  358 + name = Profile;
  359 + };
  360 + 249021D4217E4FDB00AE95B9 /* Profile */ = {
  361 + isa = XCBuildConfiguration;
  362 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  363 + buildSettings = {
  364 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  365 + CLANG_ENABLE_MODULES = YES;
  366 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  367 + ENABLE_BITCODE = NO;
  368 + FRAMEWORK_SEARCH_PATHS = (
  369 + "$(inherited)",
  370 + "$(PROJECT_DIR)/Flutter",
  371 + );
  372 + INFOPLIST_FILE = Runner/Info.plist;
  373 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  374 + LIBRARY_SEARCH_PATHS = (
  375 + "$(inherited)",
  376 + "$(PROJECT_DIR)/Flutter",
  377 + );
  378 + PRODUCT_BUNDLE_IDENTIFIER = com.example.example;
  379 + PRODUCT_NAME = "$(TARGET_NAME)";
  380 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  381 + SWIFT_VERSION = 5.0;
  382 + VERSIONING_SYSTEM = "apple-generic";
  383 + };
  384 + name = Profile;
  385 + };
  386 + 97C147031CF9000F007C117D /* Debug */ = {
  387 + isa = XCBuildConfiguration;
  388 + buildSettings = {
  389 + ALWAYS_SEARCH_USER_PATHS = NO;
  390 + CLANG_ANALYZER_NONNULL = YES;
  391 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  392 + CLANG_CXX_LIBRARY = "libc++";
  393 + CLANG_ENABLE_MODULES = YES;
  394 + CLANG_ENABLE_OBJC_ARC = YES;
  395 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  396 + CLANG_WARN_BOOL_CONVERSION = YES;
  397 + CLANG_WARN_COMMA = YES;
  398 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  399 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  400 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  401 + CLANG_WARN_EMPTY_BODY = YES;
  402 + CLANG_WARN_ENUM_CONVERSION = YES;
  403 + CLANG_WARN_INFINITE_RECURSION = YES;
  404 + CLANG_WARN_INT_CONVERSION = YES;
  405 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  406 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  407 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  408 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  409 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  410 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  411 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  412 + CLANG_WARN_UNREACHABLE_CODE = YES;
  413 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  414 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  415 + COPY_PHASE_STRIP = NO;
  416 + DEBUG_INFORMATION_FORMAT = dwarf;
  417 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  418 + ENABLE_TESTABILITY = YES;
  419 + GCC_C_LANGUAGE_STANDARD = gnu99;
  420 + GCC_DYNAMIC_NO_PIC = NO;
  421 + GCC_NO_COMMON_BLOCKS = YES;
  422 + GCC_OPTIMIZATION_LEVEL = 0;
  423 + GCC_PREPROCESSOR_DEFINITIONS = (
  424 + "DEBUG=1",
  425 + "$(inherited)",
  426 + );
  427 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  428 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  429 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  430 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  431 + GCC_WARN_UNUSED_FUNCTION = YES;
  432 + GCC_WARN_UNUSED_VARIABLE = YES;
  433 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  434 + MTL_ENABLE_DEBUG_INFO = YES;
  435 + ONLY_ACTIVE_ARCH = YES;
  436 + SDKROOT = iphoneos;
  437 + TARGETED_DEVICE_FAMILY = "1,2";
  438 + };
  439 + name = Debug;
  440 + };
  441 + 97C147041CF9000F007C117D /* Release */ = {
  442 + isa = XCBuildConfiguration;
  443 + buildSettings = {
  444 + ALWAYS_SEARCH_USER_PATHS = NO;
  445 + CLANG_ANALYZER_NONNULL = YES;
  446 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  447 + CLANG_CXX_LIBRARY = "libc++";
  448 + CLANG_ENABLE_MODULES = YES;
  449 + CLANG_ENABLE_OBJC_ARC = YES;
  450 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  451 + CLANG_WARN_BOOL_CONVERSION = YES;
  452 + CLANG_WARN_COMMA = YES;
  453 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  454 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  455 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  456 + CLANG_WARN_EMPTY_BODY = YES;
  457 + CLANG_WARN_ENUM_CONVERSION = YES;
  458 + CLANG_WARN_INFINITE_RECURSION = YES;
  459 + CLANG_WARN_INT_CONVERSION = YES;
  460 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  461 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  462 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  463 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  464 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  465 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  466 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  467 + CLANG_WARN_UNREACHABLE_CODE = YES;
  468 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  469 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  470 + COPY_PHASE_STRIP = NO;
  471 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  472 + ENABLE_NS_ASSERTIONS = NO;
  473 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  474 + GCC_C_LANGUAGE_STANDARD = gnu99;
  475 + GCC_NO_COMMON_BLOCKS = YES;
  476 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  477 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  478 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  479 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  480 + GCC_WARN_UNUSED_FUNCTION = YES;
  481 + GCC_WARN_UNUSED_VARIABLE = YES;
  482 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  483 + MTL_ENABLE_DEBUG_INFO = NO;
  484 + SDKROOT = iphoneos;
  485 + SUPPORTED_PLATFORMS = iphoneos;
  486 + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
  487 + TARGETED_DEVICE_FAMILY = "1,2";
  488 + VALIDATE_PRODUCT = YES;
  489 + };
  490 + name = Release;
  491 + };
  492 + 97C147061CF9000F007C117D /* Debug */ = {
  493 + isa = XCBuildConfiguration;
  494 + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
  495 + buildSettings = {
  496 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  497 + CLANG_ENABLE_MODULES = YES;
  498 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  499 + ENABLE_BITCODE = NO;
  500 + FRAMEWORK_SEARCH_PATHS = (
  501 + "$(inherited)",
  502 + "$(PROJECT_DIR)/Flutter",
  503 + );
  504 + INFOPLIST_FILE = Runner/Info.plist;
  505 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  506 + LIBRARY_SEARCH_PATHS = (
  507 + "$(inherited)",
  508 + "$(PROJECT_DIR)/Flutter",
  509 + );
  510 + PRODUCT_BUNDLE_IDENTIFIER = com.example.example;
  511 + PRODUCT_NAME = "$(TARGET_NAME)";
  512 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  513 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  514 + SWIFT_VERSION = 5.0;
  515 + VERSIONING_SYSTEM = "apple-generic";
  516 + };
  517 + name = Debug;
  518 + };
  519 + 97C147071CF9000F007C117D /* Release */ = {
  520 + isa = XCBuildConfiguration;
  521 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  522 + buildSettings = {
  523 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  524 + CLANG_ENABLE_MODULES = YES;
  525 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  526 + ENABLE_BITCODE = NO;
  527 + FRAMEWORK_SEARCH_PATHS = (
  528 + "$(inherited)",
  529 + "$(PROJECT_DIR)/Flutter",
  530 + );
  531 + INFOPLIST_FILE = Runner/Info.plist;
  532 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  533 + LIBRARY_SEARCH_PATHS = (
  534 + "$(inherited)",
  535 + "$(PROJECT_DIR)/Flutter",
  536 + );
  537 + PRODUCT_BUNDLE_IDENTIFIER = com.example.example;
  538 + PRODUCT_NAME = "$(TARGET_NAME)";
  539 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  540 + SWIFT_VERSION = 5.0;
  541 + VERSIONING_SYSTEM = "apple-generic";
  542 + };
  543 + name = Release;
  544 + };
  545 +/* End XCBuildConfiguration section */
  546 +
  547 +/* Begin XCConfigurationList section */
  548 + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
  549 + isa = XCConfigurationList;
  550 + buildConfigurations = (
  551 + 97C147031CF9000F007C117D /* Debug */,
  552 + 97C147041CF9000F007C117D /* Release */,
  553 + 249021D3217E4FDB00AE95B9 /* Profile */,
  554 + );
  555 + defaultConfigurationIsVisible = 0;
  556 + defaultConfigurationName = Release;
  557 + };
  558 + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
  559 + isa = XCConfigurationList;
  560 + buildConfigurations = (
  561 + 97C147061CF9000F007C117D /* Debug */,
  562 + 97C147071CF9000F007C117D /* Release */,
  563 + 249021D4217E4FDB00AE95B9 /* Profile */,
  564 + );
  565 + defaultConfigurationIsVisible = 0;
  566 + defaultConfigurationName = Release;
  567 + };
  568 +/* End XCConfigurationList section */
  569 + };
  570 + rootObject = 97C146E61CF9000F007C117D /* Project object */;
  571 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "self:">
  6 + </FileRef>
  7 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Scheme
  3 + LastUpgradeVersion = "1020"
  4 + version = "1.3">
  5 + <BuildAction
  6 + parallelizeBuildables = "YES"
  7 + buildImplicitDependencies = "YES">
  8 + <BuildActionEntries>
  9 + <BuildActionEntry
  10 + buildForTesting = "YES"
  11 + buildForRunning = "YES"
  12 + buildForProfiling = "YES"
  13 + buildForArchiving = "YES"
  14 + buildForAnalyzing = "YES">
  15 + <BuildableReference
  16 + BuildableIdentifier = "primary"
  17 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  18 + BuildableName = "Runner.app"
  19 + BlueprintName = "Runner"
  20 + ReferencedContainer = "container:Runner.xcodeproj">
  21 + </BuildableReference>
  22 + </BuildActionEntry>
  23 + </BuildActionEntries>
  24 + </BuildAction>
  25 + <TestAction
  26 + buildConfiguration = "Debug"
  27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  29 + shouldUseLaunchSchemeArgsEnv = "YES">
  30 + <Testables>
  31 + </Testables>
  32 + <MacroExpansion>
  33 + <BuildableReference
  34 + BuildableIdentifier = "primary"
  35 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  36 + BuildableName = "Runner.app"
  37 + BlueprintName = "Runner"
  38 + ReferencedContainer = "container:Runner.xcodeproj">
  39 + </BuildableReference>
  40 + </MacroExpansion>
  41 + <AdditionalOptions>
  42 + </AdditionalOptions>
  43 + </TestAction>
  44 + <LaunchAction
  45 + buildConfiguration = "Debug"
  46 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  47 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  48 + launchStyle = "0"
  49 + useCustomWorkingDirectory = "NO"
  50 + ignoresPersistentStateOnLaunch = "NO"
  51 + debugDocumentVersioning = "YES"
  52 + debugServiceExtension = "internal"
  53 + allowLocationSimulation = "YES">
  54 + <BuildableProductRunnable
  55 + runnableDebuggingMode = "0">
  56 + <BuildableReference
  57 + BuildableIdentifier = "primary"
  58 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  59 + BuildableName = "Runner.app"
  60 + BlueprintName = "Runner"
  61 + ReferencedContainer = "container:Runner.xcodeproj">
  62 + </BuildableReference>
  63 + </BuildableProductRunnable>
  64 + <AdditionalOptions>
  65 + </AdditionalOptions>
  66 + </LaunchAction>
  67 + <ProfileAction
  68 + buildConfiguration = "Profile"
  69 + shouldUseLaunchSchemeArgsEnv = "YES"
  70 + savedToolIdentifier = ""
  71 + useCustomWorkingDirectory = "NO"
  72 + debugDocumentVersioning = "YES">
  73 + <BuildableProductRunnable
  74 + runnableDebuggingMode = "0">
  75 + <BuildableReference
  76 + BuildableIdentifier = "primary"
  77 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  78 + BuildableName = "Runner.app"
  79 + BlueprintName = "Runner"
  80 + ReferencedContainer = "container:Runner.xcodeproj">
  81 + </BuildableReference>
  82 + </BuildableProductRunnable>
  83 + </ProfileAction>
  84 + <AnalyzeAction
  85 + buildConfiguration = "Debug">
  86 + </AnalyzeAction>
  87 + <ArchiveAction
  88 + buildConfiguration = "Release"
  89 + revealArchiveInOrganizer = "YES">
  90 + </ArchiveAction>
  91 +</Scheme>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:Runner.xcodeproj">
  6 + </FileRef>
  7 + <FileRef
  8 + location = "group:Pods/Pods.xcodeproj">
  9 + </FileRef>
  10 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  1 +import UIKit
  2 +import Flutter
  3 +
  4 +@UIApplicationMain
  5 +@objc class AppDelegate: FlutterAppDelegate {
  6 + override func application(
  7 + _ application: UIApplication,
  8 + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  9 + ) -> Bool {
  10 + GeneratedPluginRegistrant.register(with: self)
  11 + return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  12 + }
  13 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "size" : "20x20",
  5 + "idiom" : "iphone",
  6 + "filename" : "Icon-App-20x20@2x.png",
  7 + "scale" : "2x"
  8 + },
  9 + {
  10 + "size" : "20x20",
  11 + "idiom" : "iphone",
  12 + "filename" : "Icon-App-20x20@3x.png",
  13 + "scale" : "3x"
  14 + },
  15 + {
  16 + "size" : "29x29",
  17 + "idiom" : "iphone",
  18 + "filename" : "Icon-App-29x29@1x.png",
  19 + "scale" : "1x"
  20 + },
  21 + {
  22 + "size" : "29x29",
  23 + "idiom" : "iphone",
  24 + "filename" : "Icon-App-29x29@2x.png",
  25 + "scale" : "2x"
  26 + },
  27 + {
  28 + "size" : "29x29",
  29 + "idiom" : "iphone",
  30 + "filename" : "Icon-App-29x29@3x.png",
  31 + "scale" : "3x"
  32 + },
  33 + {
  34 + "size" : "40x40",
  35 + "idiom" : "iphone",
  36 + "filename" : "Icon-App-40x40@2x.png",
  37 + "scale" : "2x"
  38 + },
  39 + {
  40 + "size" : "40x40",
  41 + "idiom" : "iphone",
  42 + "filename" : "Icon-App-40x40@3x.png",
  43 + "scale" : "3x"
  44 + },
  45 + {
  46 + "size" : "60x60",
  47 + "idiom" : "iphone",
  48 + "filename" : "Icon-App-60x60@2x.png",
  49 + "scale" : "2x"
  50 + },
  51 + {
  52 + "size" : "60x60",
  53 + "idiom" : "iphone",
  54 + "filename" : "Icon-App-60x60@3x.png",
  55 + "scale" : "3x"
  56 + },
  57 + {
  58 + "size" : "20x20",
  59 + "idiom" : "ipad",
  60 + "filename" : "Icon-App-20x20@1x.png",
  61 + "scale" : "1x"
  62 + },
  63 + {
  64 + "size" : "20x20",
  65 + "idiom" : "ipad",
  66 + "filename" : "Icon-App-20x20@2x.png",
  67 + "scale" : "2x"
  68 + },
  69 + {
  70 + "size" : "29x29",
  71 + "idiom" : "ipad",
  72 + "filename" : "Icon-App-29x29@1x.png",
  73 + "scale" : "1x"
  74 + },
  75 + {
  76 + "size" : "29x29",
  77 + "idiom" : "ipad",
  78 + "filename" : "Icon-App-29x29@2x.png",
  79 + "scale" : "2x"
  80 + },
  81 + {
  82 + "size" : "40x40",
  83 + "idiom" : "ipad",
  84 + "filename" : "Icon-App-40x40@1x.png",
  85 + "scale" : "1x"
  86 + },
  87 + {
  88 + "size" : "40x40",
  89 + "idiom" : "ipad",
  90 + "filename" : "Icon-App-40x40@2x.png",
  91 + "scale" : "2x"
  92 + },
  93 + {
  94 + "size" : "76x76",
  95 + "idiom" : "ipad",
  96 + "filename" : "Icon-App-76x76@1x.png",
  97 + "scale" : "1x"
  98 + },
  99 + {
  100 + "size" : "76x76",
  101 + "idiom" : "ipad",
  102 + "filename" : "Icon-App-76x76@2x.png",
  103 + "scale" : "2x"
  104 + },
  105 + {
  106 + "size" : "83.5x83.5",
  107 + "idiom" : "ipad",
  108 + "filename" : "Icon-App-83.5x83.5@2x.png",
  109 + "scale" : "2x"
  110 + },
  111 + {
  112 + "size" : "1024x1024",
  113 + "idiom" : "ios-marketing",
  114 + "filename" : "Icon-App-1024x1024@1x.png",
  115 + "scale" : "1x"
  116 + }
  117 + ],
  118 + "info" : {
  119 + "version" : 1,
  120 + "author" : "xcode"
  121 + }
  122 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "LaunchImage.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "filename" : "LaunchImage@2x.png",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "idiom" : "universal",
  15 + "filename" : "LaunchImage@3x.png",
  16 + "scale" : "3x"
  17 + }
  18 + ],
  19 + "info" : {
  20 + "version" : 1,
  21 + "author" : "xcode"
  22 + }
  23 +}
  1 +# Launch Screen Assets
  2 +
  3 +You can customize the launch screen with your own desired assets by replacing the image files in this directory.
  4 +
  5 +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--View Controller-->
  9 + <scene sceneID="EHf-IW-A2E">
  10 + <objects>
  11 + <viewController id="01J-lp-oVM" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
  14 + <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
  17 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  18 + <subviews>
  19 + <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
  20 + </imageView>
  21 + </subviews>
  22 + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  23 + <constraints>
  24 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
  25 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
  26 + </constraints>
  27 + </view>
  28 + </viewController>
  29 + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
  30 + </objects>
  31 + <point key="canvasLocation" x="53" y="375"/>
  32 + </scene>
  33 + </scenes>
  34 + <resources>
  35 + <image name="LaunchImage" width="168" height="185"/>
  36 + </resources>
  37 +</document>
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--Flutter View Controller-->
  9 + <scene sceneID="tne-QT-ifu">
  10 + <objects>
  11 + <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
  14 + <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
  17 + <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
  18 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  19 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
  20 + </view>
  21 + </viewController>
  22 + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
  23 + </objects>
  24 + </scene>
  25 + </scenes>
  26 +</document>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>$(EXECUTABLE_NAME)</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>example</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>APPL</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>$(FLUTTER_BUILD_NAME)</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>$(FLUTTER_BUILD_NUMBER)</string>
  23 + <key>LSRequiresIPhoneOS</key>
  24 + <true/>
  25 + <key>UILaunchStoryboardName</key>
  26 + <string>LaunchScreen</string>
  27 + <key>UIMainStoryboardFile</key>
  28 + <string>Main</string>
  29 + <key>UISupportedInterfaceOrientations</key>
  30 + <array>
  31 + <string>UIInterfaceOrientationPortrait</string>
  32 + <string>UIInterfaceOrientationLandscapeLeft</string>
  33 + <string>UIInterfaceOrientationLandscapeRight</string>
  34 + </array>
  35 + <key>UISupportedInterfaceOrientations~ipad</key>
  36 + <array>
  37 + <string>UIInterfaceOrientationPortrait</string>
  38 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
  39 + <string>UIInterfaceOrientationLandscapeLeft</string>
  40 + <string>UIInterfaceOrientationLandscapeRight</string>
  41 + </array>
  42 + <key>NSAppTransportSecurity</key>
  43 + <dict>
  44 + <key>NSAllowsArbitraryLoads</key> <true/>
  45 + </dict>
  46 + <key>io.flutter.embedded_views_preview</key> <true/>
  47 +</dict>
  48 +</plist>
  1 +#import "GeneratedPluginRegistrant.h"
  1 +import 'package:flutter/material.dart';
  2 +import 'package:flutter_math_fork/flutter_math.dart';
  3 +import 'package:provider/provider.dart';
  4 +
  5 +class DemoPage extends StatelessWidget {
  6 + @override
  7 + Widget build(BuildContext context) => Center(
  8 + child: Container(
  9 + constraints: BoxConstraints(maxWidth: 800),
  10 + child: ChangeNotifierProvider(
  11 + create: (context) => TextEditingController(),
  12 + child: Column(
  13 + mainAxisSize: MainAxisSize.max,
  14 + crossAxisAlignment: CrossAxisAlignment.stretch,
  15 + children: <Widget>[
  16 + Padding(
  17 + padding: const EdgeInsets.all(10),
  18 + child: Consumer<TextEditingController>(
  19 + builder: (context, controller, _) => TextField(
  20 + controller: controller,
  21 + keyboardType: TextInputType.multiline,
  22 + maxLines: null,
  23 + decoration: InputDecoration(
  24 + border: OutlineInputBorder(),
  25 + labelText: 'Input TeX equation here',
  26 + ),
  27 + ),
  28 + ),
  29 + ),
  30 + Expanded(
  31 + flex: 1,
  32 + child: Padding(
  33 + padding: const EdgeInsets.all(10.0),
  34 + child: Column(
  35 + crossAxisAlignment: CrossAxisAlignment.stretch,
  36 + children: <Widget>[
  37 + Center(
  38 + child: Text(
  39 + "Flutter Math's output",
  40 + style: Theme.of(context).textTheme.titleLarge,
  41 + ),
  42 + ),
  43 + Expanded(
  44 + child: Container(
  45 + decoration: BoxDecoration(
  46 + border: Border.all(width: 1),
  47 + borderRadius: BorderRadius.circular(5.0),
  48 + ),
  49 + alignment: Alignment.topCenter,
  50 + padding: EdgeInsets.all(10),
  51 + child: Consumer<TextEditingController>(
  52 + builder: (context, controller, _) =>
  53 + SelectableMath.tex(
  54 + controller.value.text,
  55 + textStyle: TextStyle(fontSize: 22),
  56 + ),
  57 + ),
  58 + ),
  59 + ),
  60 + ],
  61 + ),
  62 + ),
  63 + ),
  64 + ],
  65 + ),
  66 + ),
  67 + ),
  68 + );
  69 +}
  1 +import 'package:flutter/material.dart';
  2 +import 'package:flutter_math_fork/flutter_math.dart';
  3 +
  4 +class DisplayMath extends StatelessWidget {
  5 + final String expression;
  6 +
  7 + const DisplayMath({
  8 + Key? key,
  9 + required this.expression,
  10 + }) : super(key: key);
  11 +
  12 + @override
  13 + Widget build(BuildContext context) => Card(
  14 + child: Column(
  15 + crossAxisAlignment: CrossAxisAlignment.center,
  16 + mainAxisSize: MainAxisSize.min,
  17 + mainAxisAlignment: MainAxisAlignment.start,
  18 + children: <Widget>[
  19 + Padding(
  20 + padding: const EdgeInsets.all(8.0),
  21 + child: Text(expression, softWrap: true),
  22 + ),
  23 + Divider(
  24 + thickness: 1.0,
  25 + height: 1.0,
  26 + ),
  27 + Expanded(
  28 + child: Center(child: Math.tex(expression)),
  29 + )
  30 + ],
  31 + ),
  32 + );
  33 +}
  1 +import 'package:flutter/material.dart';
  2 +import 'package:flutter_math_fork/flutter_math.dart';
  3 +import 'package:google_fonts/google_fonts.dart';
  4 +
  5 +const equations = [
  6 + ['Solution of quadratic equation', r'x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}'],
  7 + [
  8 + 'Schrodinger\'s equation',
  9 + r'i\hbar\frac{\partial}{\partial t}\Psi(\vec x,t) = -\frac{\hbar}{2m}\nabla^2\Psi(\vec x,t)+ V(\vec x)\Psi(\vec x,t)'
  10 + ],
  11 + [
  12 + 'Fourier transform',
  13 + r'\hat f(\xi) = \int_{-\infty}^\infty {f(x)e^{- 2\pi i \xi x}\mathrm{d}x}'
  14 + ],
  15 + [
  16 + 'Maxwell\'s equations',
  17 + r'''\left\{\begin{array}{l}
  18 + \nabla\cdot\vec{D} = \rho \\
  19 + \nabla\cdot\vec{B} = 0 \\
  20 + \nabla\times\vec{E} = -\frac{\partial\vec{B}}{\partial t} \\
  21 + \nabla\times\vec{H} = \vec{J}_f + \frac{\partial\vec{D}}{\partial t}
  22 +\end{array}\right.'''
  23 + ],
  24 +];
  25 +
  26 +class EquationsPage extends StatelessWidget {
  27 + @override
  28 + Widget build(BuildContext context) => Center(
  29 + child: Container(
  30 + constraints: BoxConstraints(maxWidth: 800),
  31 + child: ListView(
  32 + children: equations
  33 + .map((entry) => Padding(
  34 + padding: const EdgeInsets.all(10),
  35 + child: Card(
  36 + child: Column(
  37 + children: [
  38 + ListTile(
  39 + title: Text(entry[0]),
  40 + subtitle: SelectableText(
  41 + entry[1],
  42 + style: GoogleFonts.robotoMono(),
  43 + ),
  44 + ),
  45 + Container(
  46 + padding: const EdgeInsets.fromLTRB(1, 5, 1, 5),
  47 + child: SelectableMath.tex(
  48 + entry[1],
  49 + textStyle: TextStyle(fontSize: 22),
  50 + ),
  51 + )
  52 + ],
  53 + ),
  54 + ),
  55 + ))
  56 + .toList(),
  57 + ),
  58 + ),
  59 + );
  60 +}
  1 +import 'package:flutter/material.dart';
  2 +
  3 +import 'display.dart';
  4 +import 'supported_data.dart';
  5 +
  6 +const largeSections = {
  7 + 'Delimiter Sizing',
  8 + 'Environment',
  9 + 'Unicode Mathematical Alphanumeric Symbols',
  10 +};
  11 +
  12 +class FeaturePage extends StatelessWidget {
  13 + @override
  14 + Widget build(BuildContext context) {
  15 + final entries = supportedData.entries.toList();
  16 + return ListView.builder(
  17 + itemCount: supportedData.length,
  18 + itemBuilder: (context, i) => Column(
  19 + children: <Widget>[
  20 + Text(
  21 + entries[i].key,
  22 + style: Theme.of(context).textTheme.displaySmall,
  23 + ),
  24 + GridView.builder(
  25 + shrinkWrap: true,
  26 + physics: NeverScrollableScrollPhysics(),
  27 + itemCount: entries[i].value.length,
  28 + gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
  29 + maxCrossAxisExtent:
  30 + largeSections.contains(entries[i].key) ? 250 : 125,
  31 + mainAxisSpacing: 10,
  32 + crossAxisSpacing: 10,
  33 + childAspectRatio: 1,
  34 + ),
  35 + itemBuilder: (BuildContext context, int j) =>
  36 + DisplayMath(expression: entries[i].value[j]),
  37 + ),
  38 + ],
  39 + ),
  40 + );
  41 + }
  42 +}
  1 +import 'package:flutter/material.dart';
  2 +
  3 +import 'demo.dart';
  4 +import 'equations.dart';
  5 +import 'feature.dart';
  6 +
  7 +void main() {
  8 + runApp(MyApp());
  9 +}
  10 +
  11 +class MyApp extends StatelessWidget {
  12 + @override
  13 + Widget build(BuildContext context) => MaterialApp(
  14 + title: 'Flutter Math Demo v0.2.0',
  15 + theme: ThemeData(
  16 + primarySwatch: Colors.blue,
  17 + visualDensity: VisualDensity.adaptivePlatformDensity,
  18 + ),
  19 + home: DefaultTabController(
  20 + length: 3,
  21 + child: Scaffold(
  22 + appBar: AppBar(
  23 + title: Text(
  24 + 'Flutter Math Demo v0.2.0',
  25 + ),
  26 + bottom: TabBar(tabs: [
  27 + Text('Interactive Demo'),
  28 + Text('Equation Samples'),
  29 + Text('Supported Features'),
  30 + ]),
  31 + ),
  32 + body: TabBarView(children: [
  33 + DemoPage(),
  34 + EquationsPage(),
  35 + FeaturePage(),
  36 + ]),
  37 + ),
  38 + ),
  39 + );
  40 +}
  1 +const supportedData = {
  2 + 'Accents': [
  3 + r"a'",
  4 + r'\tilde{a}',
  5 + // r'\mathring{g}',
  6 + r"a''",
  7 + r'\widetilde{ac}',
  8 + // r'\overgroup{AB}',
  9 + r'a^{\prime}',
  10 + r'\utilde{AB}',
  11 + r'\undergroup{AB}',
  12 + r'\acute{a}',
  13 + r'\vec{F}',
  14 + r'\Overrightarrow{AB}',
  15 + r'\bar{y}',
  16 + r'\overleftarrow{AB}',
  17 + r'\overrightarrow{AB}',
  18 + r'\breve{a}',
  19 + r'\underleftarrow{AB}',
  20 + r'\underrightarrow{AB}',
  21 + r'\check{a}',
  22 + r'\overleftharpoon{ac}',
  23 + r'\overrightharpoon{ac}',
  24 + r'\dot{a}',
  25 + r'\overleftrightarrow{AB}',
  26 + r'\overbrace{AB}',
  27 + r'\ddot{a}',
  28 + r'\underleftrightarrow{AB}',
  29 + r'\underbrace{AB}',
  30 + r'\grave{a}',
  31 + r'\overline{AB}',
  32 + // r'\overlinesegment{AB}',
  33 + r'\hat{\theta}',
  34 + r'\underline{AB}',
  35 + // r'\underlinesegment{AB}',
  36 + r'\widehat{ac}',
  37 + r'\widecheck{ac}',
  38 + ],
  39 + // Accent functions inside \\text{…}
  40 +
  41 + 'Delimiters': [
  42 + r'(~)',
  43 + r'\lparen~\rparen',
  44 + r'⌈~⌉',
  45 + r'\lceil~\rceil',
  46 + r'\uparrow',
  47 + r'[~]',
  48 + r'\lbrack~\rbrack',
  49 + r'⌊~⌋',
  50 + r'\lfloor~\rfloor',
  51 + r'\downarrow',
  52 + r'\{ \}',
  53 + r'\lbrace \rbrace',
  54 + r'⎰⎱',
  55 + r'\lmoustache \rmoustache',
  56 + r'\updownarrow',
  57 + r'⟨~⟩',
  58 + r'\langle~\rangle',
  59 + r'⟮~⟯',
  60 + r'\lgroup~\rgroup',
  61 + r'\Uparrow',
  62 + r'\vert',
  63 + r'\vert',
  64 + r'┌ ┐',
  65 + r'\ulcorner \urcorner',
  66 + r'\Downarrow',
  67 + r'\Vert',
  68 + r'\Vert',
  69 + r'└ ┘',
  70 + r'\llcorner \lrcorner',
  71 + r'\Updownarrow',
  72 + r'\lvert~\rvert',
  73 + r'\lVert~\rVert',
  74 + r'\backslash',
  75 + r'\lang~\rang',
  76 + r'\lt~\gt',
  77 + r'⟦~⟧',
  78 + r'\llbracket~\rrbracket',
  79 + r'\lBrace~\rBrace',
  80 + ],
  81 + 'Delimiter Sizing': [
  82 + r'\left(\LARGE{AB}\right)',
  83 + r'( \big( \Big( \bigg( \Bigg(',
  84 + ],
  85 + 'Environment': [
  86 + r'\begin{matrix} a & b \\ c & d \end{matrix}',
  87 + r'\begin{array}{cc}a & b\\c & d\end{array}',
  88 + r'\begin{pmatrix} a & b \\ c & d \end{pmatrix}',
  89 + r'\begin{bmatrix} a & b \\ c & d \end{bmatrix}',
  90 + r'\begin{vmatrix} a & b \\ c & d \end{vmatrix}',
  91 + r'\begin{Vmatrix} a & b \\ c & d \end{Vmatrix}',
  92 + r'\begin{Bmatrix} a & b \\ c & d \end{Bmatrix}',
  93 + // r'\def\arraystretch{1.5}\begin{array}{c:c:c} a & b & c \\ \hline d & e & f \\ \hdashline g & h & i \end{array}',
  94 + r'\begin{array}{c:c:c} a & b & c \\ \hline d & e & f \\ \hdashline g & h & i \end{array}',
  95 + r'\begin{aligned} a&=b+c \\ d+e&=f \end{aligned}',
  96 + r'\begin{alignedat}{2}10&x+&3&y=2\\3&x+&13&y=4\end{alignedat}',
  97 + r'\begin{gathered} a=b \\ e=b+c \end{gathered}',
  98 + r'x = \begin{cases} a &\text{if } b \\ c &\text{if } d \end{cases}',
  99 + r'\begin{smallmatrix} a & b \\ c & d \end{smallmatrix}',
  100 + r'\begin{rcases} a &\text{if } b \\ c &\text{if } d \end{rcases}⇒…',
  101 + ],
  102 +
  103 + // HTML,
  104 +
  105 + 'Greek Letters': [
  106 + r'\Alpha',
  107 + r'\Beta',
  108 + r'\Gamma',
  109 + r'\Delta',
  110 + r'\Epsilon',
  111 + r'\Zeta',
  112 + r'\Eta',
  113 + r'\Theta',
  114 + r'\Iota',
  115 + r'\Kappa',
  116 + r'\Lambda',
  117 + r'\Mu',
  118 + r'\Nu',
  119 + r'\Xi',
  120 + r'\Omicron',
  121 + r'\Pi',
  122 + r'\Rho',
  123 + r'\Sigma',
  124 + r'\Tau',
  125 + r'\Upsilon',
  126 + r'\Phi',
  127 + r'\Chi',
  128 + r'\Psi',
  129 + r'\Omega',
  130 + r'\varGamma',
  131 + r'\varDelta',
  132 + r'\varTheta',
  133 + r'\varLambda',
  134 + r'\varXi',
  135 + r'\varPi',
  136 + r'\varSigma',
  137 + r'\varUpsilon',
  138 + r'\varPhi',
  139 + r'\varPsi',
  140 + r'\varOmega',
  141 + r'\alpha',
  142 + r'\beta',
  143 + r'\gamma',
  144 + r'\delta',
  145 + r'\epsilon',
  146 + r'\zeta',
  147 + r'\eta',
  148 + r'\theta',
  149 + r'\iota',
  150 + r'\kappa',
  151 + r'\lambda',
  152 + r'\mu',
  153 + r'\nu',
  154 + r'\xi',
  155 + r'\omicron',
  156 + r'\pi',
  157 + r'\rho',
  158 + r'\sigma',
  159 + r'\tau',
  160 + r'\upsilon',
  161 + r'\phi',
  162 + r'\chi',
  163 + r'\psi',
  164 + r'\omega',
  165 + r'\varepsilon',
  166 + r'\varkappa',
  167 + r'\vartheta',
  168 + r'\thetasym',
  169 + r'\varpi',
  170 + r'\varrho',
  171 + r'\varsigma',
  172 + r'\varphi',
  173 + r'\digamma ',
  174 + ],
  175 +
  176 + 'Other characters': [
  177 + r'\imath',
  178 + r'\nabla',
  179 + r'\Im',
  180 + r'\Reals',
  181 + r'\text{\OE}',
  182 + r'\jmath',
  183 + r'\partial',
  184 + r'\image',
  185 + r'\wp',
  186 + r'\text{\o}',
  187 + r'\aleph',
  188 + r'\Game',
  189 + r'\Bbbk',
  190 + r'\weierp',
  191 + r'\text{\O}',
  192 + r'\alef',
  193 + r'\Finv',
  194 + r'\N',
  195 + r'\Z',
  196 + r'\text{\ss}',
  197 + r'\alefsym',
  198 + r'\cnums',
  199 + r'\natnums',
  200 + // r'\text{\aa}',
  201 + r'\text{\i}',
  202 + r'\beth',
  203 + r'\Complex',
  204 + r'\R',
  205 + // r'\text{\AA}',
  206 + r'\text{\j}',
  207 + r'\gimel',
  208 + r'\ell',
  209 + r'\Re',
  210 + r'\text{\ae}',
  211 + r'\daleth',
  212 + r'\hbar',
  213 + r'\real',
  214 + r'\text{\AE}',
  215 + r'\eth',
  216 + r'\hslash',
  217 + r'\reals',
  218 + r'\text{\oe}',
  219 + ],
  220 + 'Unicode Mathematical Alphanumeric Symbols': [
  221 + r'\text{𝐀-𝐙 𝐚-𝐳 𝟎-𝟗}',
  222 + r'\text{𝔸-}ℤ\ 𝕜',
  223 + r'\text{𝐴-𝑍 𝑎-𝑧}',
  224 + r'\text{𝖠-𝖹 𝖺-𝗓 𝟢-𝟫}',
  225 + r'\text{𝑨-𝒁 𝒂-𝒛}',
  226 + r'\text{𝗔-𝗭 𝗮-𝘇 𝟬-𝟵}',
  227 + r'\text{𝒜-𝒵}',
  228 + r'\text{𝘈-𝘡 𝘢-𝘻}',
  229 + r'\text{𝔄-}ℨ\text{ 𝔞-𝔷}',
  230 + r'\text{𝙰-𝚉 𝚊-𝚣 𝟶-𝟿}',
  231 + ],
  232 + 'Layout - Annotation': [
  233 + r'\cancel{5}',
  234 + r'\overbrace{a+b+c}^{\text{note}}',
  235 + r'\bcancel{5}',
  236 + r'\underbrace{a+b+c}_{\text{note}}',
  237 + r'\xcancel{ABC}',
  238 + r'\not =',
  239 + r'\sout{abc}',
  240 + r'\boxed{\pi=\frac c d}',
  241 + // r'\tag{hi} x+y^{2x}',
  242 + // r'\tag*{hi} x+y^{2x}',
  243 + ],
  244 + 'Layout - Vertical Layout': [
  245 + r'x_n',
  246 + r'\stackrel{!}{=}',
  247 + r'a \atop b',
  248 + r'e^x',
  249 + r'\overset{!}{=}',
  250 + r'a\raisebox{0.25em}{b}c',
  251 + r'_u^o ',
  252 + r'\underset{!}{=}',
  253 + r'\sum_{\substack{0<i<m\\0<j<n}}',
  254 + ],
  255 + // 'Layout - Overlap and Spacing'
  256 + 'Logic and Set Theory': [
  257 + r'\forall',
  258 + r'\complement',
  259 + r'\therefore',
  260 + r'\emptyset',
  261 + r'\exists',
  262 + r'\subset',
  263 + r'\because',
  264 + r'\empty',
  265 + r'\exist',
  266 + r'\supset',
  267 + r'\mapsto',
  268 + r'\varnothing',
  269 + r'\nexists',
  270 + r'\mid',
  271 + r'\to',
  272 + r'\implies',
  273 + r'\in',
  274 + r'\land',
  275 + r'\gets',
  276 + r'\impliedby',
  277 + r'\isin',
  278 + r'\lor',
  279 + r'\leftrightarrow',
  280 + r'\iff',
  281 + r'\notin',
  282 + r'\ni',
  283 + r'\notni',
  284 + r'\neg',
  285 + ],
  286 + // 'Macros': [
  287 + // r'\def\foo{x^2} \foo + \foo',
  288 + // r'\gdef\bar#1{#1^2} \bar{y} + \bar{y}',
  289 + // ],
  290 + 'Big Operators': [
  291 + r'\sum',
  292 + r'\prod',
  293 + r'\bigotimes',
  294 + r'\bigvee',
  295 + r'\int',
  296 + r'\coprod',
  297 + r'\bigoplus',
  298 + r'\bigwedge',
  299 + r'\iint',
  300 + r'\intop',
  301 + r'\bigodot',
  302 + r'\bigcap',
  303 + r'\iiint',
  304 + r'\smallint',
  305 + r'\biguplus',
  306 + r'\bigcup',
  307 + r'\oint',
  308 + r'\oiint',
  309 + r'\oiiint',
  310 + r'\bigsqcup',
  311 + ],
  312 +
  313 + 'Binary Operator': [
  314 + r'+',
  315 + r'\cdot',
  316 + r'\gtrdot',
  317 + r'x \pmod a',
  318 + r'-',
  319 + r'\cdotp',
  320 + r'\intercal',
  321 + r'x \pod a',
  322 + r'/',
  323 + r'\centerdot',
  324 + r'\land',
  325 + r'\rhd',
  326 + r'*',
  327 + r'\circ',
  328 + r'\leftthreetimes',
  329 + r'\rightthreetimes',
  330 + r'\amalg',
  331 + r'\circledast',
  332 + r'\ldotp',
  333 + r'\rtimes',
  334 + r'\And',
  335 + r'\circledcirc',
  336 + r'\lor',
  337 + r'\setminus',
  338 + r'\ast',
  339 + r'\circleddash',
  340 + r'\lessdot',
  341 + r'\smallsetminus',
  342 + r'\barwedge',
  343 + r'\Cup',
  344 + r'\lhd',
  345 + r'\sqcap',
  346 + r'\bigcirc',
  347 + r'\cup',
  348 + r'\ltimes',
  349 + r'\sqcup',
  350 + r'\bmod',
  351 + r'\curlyvee',
  352 + r'x \mod a',
  353 + r'\times',
  354 + r'\boxdot',
  355 + r'\curlywedge',
  356 + r'\mp',
  357 + r'\unlhd',
  358 + r'\boxminus',
  359 + r'\div',
  360 + r'\odot',
  361 + r'\unrhd',
  362 + r'\boxplus',
  363 + r'\divideontimes',
  364 + r'\ominus',
  365 + r'\uplus',
  366 + r'\boxtimes',
  367 + r'\dotplus',
  368 + r'\oplus',
  369 + r'\vee',
  370 + r'\bullet',
  371 + r'\doublebarwedge',
  372 + r'\otimes',
  373 + r'\veebar',
  374 + r'\Cap',
  375 + r'\doublecap',
  376 + r'\oslash',
  377 + r'\wedge',
  378 + r'\cap',
  379 + r'\doublecup',
  380 + r'\pm',
  381 + r'\wr',
  382 + ],
  383 + 'Fractions and Binomials': [
  384 + r'\frac{a}{b}',
  385 + r'\tfrac{a}{b}',
  386 + r'\genfrac ( ] {2pt}{1}a{a+1}',
  387 + r'{a \over b}',
  388 + r'\dfrac{a}{b}',
  389 + r'{a \above{2pt} b+1}',
  390 + r'a/b',
  391 + r'\cfrac{a}{1 + \cfrac{1}{b}}',
  392 + r'\binom{n}{k}',
  393 + r'\dbinom{n}{k}',
  394 + r'{n\brace k}',
  395 + r'{n \choose k}',
  396 + r'\tbinom{n}{k}',
  397 + r'{n\brack k}',
  398 + ],
  399 + 'Math Operators': [
  400 + r'\arcsin',
  401 + r'\cotg',
  402 + r'\ln',
  403 + r'\det',
  404 + r'\arccos',
  405 + r'\coth',
  406 + r'\log',
  407 + r'\gcd',
  408 + r'\arctan',
  409 + r'\csc',
  410 + r'\sec',
  411 + r'\inf',
  412 + r'\arctg',
  413 + r'\ctg',
  414 + r'\sin',
  415 + r'\lim',
  416 + r'\arcctg',
  417 + r'\cth',
  418 + r'\sinh',
  419 + r'\liminf',
  420 + r'\arg',
  421 + r'\deg',
  422 + r'\sh',
  423 + r'\limsup',
  424 + r'\ch',
  425 + r'\dim',
  426 + r'\tan',
  427 + r'\max',
  428 + r'\cos',
  429 + r'\exp',
  430 + r'\tanh',
  431 + r'\min',
  432 + r'\cosec',
  433 + r'\hom',
  434 + r'\tg',
  435 + r'\Pr',
  436 + r'\cosh',
  437 + r'\ker',
  438 + r'\th',
  439 + r'\sup',
  440 + r'\cot',
  441 + r'\lg',
  442 + r'\argmax',
  443 + r'\argmin',
  444 + r'\plim',
  445 + r'\operatorname{f}',
  446 + r'\operatorname*{f}',
  447 + r'\sqrt{x}',
  448 + r'\sqrt[3]{x}',
  449 + ],
  450 +
  451 + 'Relations': [
  452 + r'=',
  453 + r'\eqcirc',
  454 + r'\lesseqgtr',
  455 + r'\sqsupset',
  456 + r'<',
  457 + r'\eqcolon',
  458 + r'\lesseqqgtr',
  459 + r'\sqsupseteq',
  460 + r'>',
  461 + // r'\Eqcolon',
  462 + r'\lessgtr',
  463 + r'\Subset',
  464 + r':',
  465 + r'\eqqcolon',
  466 + r'\lesssim',
  467 + r'\subset',
  468 + r'\approx',
  469 + // r'\Eqqcolon',
  470 + r'\ll',
  471 + r'\subseteq',
  472 + r'\approxeq',
  473 + r'\eqsim',
  474 + r'\lll',
  475 + r'\subseteqq',
  476 + r'\asymp',
  477 + r'\eqslantgtr',
  478 + r'\llless',
  479 + r'\succ',
  480 + r'\backepsilon',
  481 + r'\eqslantless',
  482 + r'\lt',
  483 + r'\succapprox',
  484 + r'\backsim',
  485 + r'\equiv',
  486 + r'\mid',
  487 + r'\succcurlyeq',
  488 + r'\backsimeq',
  489 + r'\fallingdotseq',
  490 + r'\models',
  491 + r'\succeq',
  492 + r'\between',
  493 + r'\frown',
  494 + r'\multimap',
  495 + r'\succsim',
  496 + r'\bowtie',
  497 + r'\ge',
  498 + r'\owns',
  499 + r'\Supset',
  500 + r'\bumpeq',
  501 + r'\geq',
  502 + r'\parallel',
  503 + r'\supset',
  504 + r'\Bumpeq',
  505 + r'\geqq',
  506 + r'\perp',
  507 + r'\supseteq',
  508 + r'\circeq',
  509 + r'\geqslant',
  510 + r'\pitchfork',
  511 + r'\supseteqq',
  512 + // r'\colonapprox',
  513 + r'\gg',
  514 + r'\prec',
  515 + r'\thickapprox',
  516 + // r'\Colonapprox',
  517 + r'\ggg',
  518 + r'\precapprox',
  519 + r'\thicksim',
  520 + // r'\coloneq',
  521 + r'\gggtr',
  522 + r'\preccurlyeq',
  523 + r'\trianglelefteq',
  524 + // r'\Coloneq',
  525 + r'\gt',
  526 + r'\preceq',
  527 + r'\triangleq',
  528 + r'\coloneqq',
  529 + r'\gtrapprox',
  530 + r'\precsim',
  531 + r'\trianglerighteq',
  532 + // r'\Coloneqq',
  533 + r'\gtreqless',
  534 + r'\propto',
  535 + r'\varpropto',
  536 + // r'\colonsim',
  537 + r'\gtreqqless',
  538 + r'\risingdotseq',
  539 + r'\vartriangle',
  540 + // r'\Colonsim',
  541 + r'\gtrless',
  542 + r'\shortmid',
  543 + r'\vartriangleleft',
  544 + r'\cong',
  545 + r'\gtrsim',
  546 + r'\shortparallel',
  547 + r'\vartriangleright',
  548 + r'\curlyeqprec',
  549 + r'\in',
  550 + r'\sim',
  551 + r'\vcentcolon',
  552 + r'\curlyeqsucc',
  553 + r'\Join',
  554 + r'\simeq',
  555 + r'\vdash',
  556 + r'\dashv',
  557 + r'\le',
  558 + r'\smallfrown',
  559 + r'\vDash',
  560 + r'\dblcolon',
  561 + r'\leq',
  562 + r'\smallsmile',
  563 + r'\Vdash',
  564 + r'\doteq',
  565 + r'\leqq',
  566 + r'\smile',
  567 + r'\Vvdash',
  568 + r'\Doteq',
  569 + r'\leqslant',
  570 + r'\sqsubset',
  571 + r'\doteqdot',
  572 + r'\lessapprox',
  573 + r'\sqsubseteq',
  574 + ],
  575 +
  576 + 'Negated Relations': [
  577 + r'\gnapprox',
  578 + r'\ngeqslant',
  579 + r'\nsubseteq',
  580 + r'\precneqq',
  581 + r'\gneq',
  582 + r'\ngtr',
  583 + r'\nsubseteqq',
  584 + r'\precnsim',
  585 + r'\gneqq',
  586 + r'\nleq',
  587 + r'\nsucc',
  588 + r'\subsetneq',
  589 + r'\gnsim',
  590 + r'\nleqq',
  591 + r'\nsucceq',
  592 + r'\subsetneqq',
  593 + r'\gvertneqq',
  594 + r'\nleqslant',
  595 + r'\nsupseteq',
  596 + r'\succnapprox',
  597 + r'\lnapprox',
  598 + r'\nless',
  599 + r'\nsupseteqq',
  600 + r'\succneqq',
  601 + r'\lneq',
  602 + r'\nmid',
  603 + r'\ntriangleleft',
  604 + r'\succnsim',
  605 + r'\lneqq',
  606 + r'\notin',
  607 + r'\ntrianglelefteq',
  608 + r'\supsetneq',
  609 + r'\lnsim',
  610 + r'\notni',
  611 + r'\ntriangleright',
  612 + r'\supsetneqq',
  613 + r'\lvertneqq',
  614 + r'\nparallel',
  615 + r'\ntrianglerighteq',
  616 + r'\varsubsetneq',
  617 + r'\ncong',
  618 + r'\nprec',
  619 + r'\nvdash',
  620 + r'\varsubsetneqq',
  621 + r'\ne',
  622 + r'\npreceq',
  623 + r'\nvDash',
  624 + r'\varsupsetneq',
  625 + r'\neq',
  626 + r'\nshortmid',
  627 + r'\nVDash',
  628 + r'\varsupsetneqq',
  629 + r'\ngeq',
  630 + r'\nshortparallel',
  631 + r'\nVdash',
  632 + r'\ngeqq',
  633 + r'\nsim',
  634 + r'\precnapprox',
  635 + ],
  636 +
  637 + 'Arrows': [
  638 + r'\circlearrowleft',
  639 + r'\leftharpoonup',
  640 + r'\rArr',
  641 + r'\circlearrowright',
  642 + r'\leftleftarrows',
  643 + r'\rarr',
  644 + r'\curvearrowleft',
  645 + r'\leftrightarrow',
  646 + r'\restriction',
  647 + r'\curvearrowright',
  648 + r'\Leftrightarrow',
  649 + r'\rightarrow',
  650 + r'\Darr',
  651 + r'\leftrightarrows',
  652 + r'\Rightarrow',
  653 + r'\dArr',
  654 + r'\leftrightharpoons',
  655 + r'\rightarrowtail',
  656 + r'\darr',
  657 + r'\leftrightsquigarrow',
  658 + r'\rightharpoondown',
  659 + r'\dashleftarrow',
  660 + r'\Lleftarrow',
  661 + r'\rightharpoonup',
  662 + r'\dashrightarrow',
  663 + r'\longleftarrow',
  664 + r'\rightleftarrows',
  665 + r'\downarrow',
  666 + r'\Longleftarrow',
  667 + r'\rightleftharpoons',
  668 + r'\Downarrow',
  669 + r'\longleftrightarrow',
  670 + r'\rightrightarrows',
  671 + r'\downdownarrows',
  672 + r'\Longleftrightarrow',
  673 + r'\rightsquigarrow',
  674 + r'\downharpoonleft',
  675 + r'\longmapsto',
  676 + r'\Rrightarrow',
  677 + r'\downharpoonright',
  678 + r'\longrightarrow',
  679 + r'\Rsh',
  680 + r'\gets',
  681 + r'\Longrightarrow',
  682 + r'\searrow',
  683 + r'\Harr',
  684 + r'\looparrowleft',
  685 + r'\swarrow',
  686 + r'\hArr',
  687 + r'\looparrowright',
  688 + r'\to',
  689 + r'\harr',
  690 + r'\Lrarr',
  691 + r'\twoheadleftarrow',
  692 + r'\hookleftarrow',
  693 + r'\lrArr',
  694 + r'\twoheadrightarrow',
  695 + r'\hookrightarrow',
  696 + r'\lrarr',
  697 + r'\Uarr',
  698 + r'\iff',
  699 + r'\Lsh',
  700 + r'\uArr',
  701 + r'\impliedby',
  702 + r'\mapsto',
  703 + r'\uarr',
  704 + r'\implies',
  705 + r'\nearrow',
  706 + r'\uparrow',
  707 + r'\Larr',
  708 + r'\nleftarrow',
  709 + r'\Uparrow',
  710 + r'\lArr',
  711 + r'\nLeftarrow',
  712 + r'\updownarrow',
  713 + r'\larr',
  714 + r'\nleftrightarrow',
  715 + r'\Updownarrow',
  716 + r'\leadsto',
  717 + r'\nLeftrightarrow',
  718 + r'\upharpoonleft',
  719 + r'\leftarrow',
  720 + r'\nrightarrow',
  721 + r'\upharpoonright',
  722 + r'\Leftarrow',
  723 + r'\nRightarrow',
  724 + r'\upuparrows',
  725 + r'\leftarrowtail',
  726 + r'\nwarrow',
  727 + r'\leftharpoondown',
  728 + r'\Rarr',
  729 + ],
  730 + 'Extensible Arrows': [
  731 + r'\xleftarrow{abc}',
  732 + r'\xrightarrow[under]{over}',
  733 + r'\xLeftarrow{abc}',
  734 + r'\xRightarrow{abc}',
  735 + r'\xleftrightarrow{abc}',
  736 + r'\xLeftrightarrow{abc}',
  737 + r'\xhookleftarrow{abc}',
  738 + r'\xhookrightarrow{abc}',
  739 + r'\xtwoheadleftarrow{abc}',
  740 + r'\xtwoheadrightarrow{abc}',
  741 + r'\xleftharpoonup{abc}',
  742 + r'\xrightharpoonup{abc}',
  743 + r'\xleftharpoondown{abc}',
  744 + r'\xrightharpoondown{abc}',
  745 + r'\xleftrightharpoons{abc}',
  746 + r'\xrightleftharpoons{abc}',
  747 + r'\xtofrom{abc}',
  748 + r'\xmapsto{abc}',
  749 + r'\xlongequal{abc}',
  750 + ],
  751 + 'Special Notation': [
  752 + r'\bra{\phi}',
  753 + r'\ket{\psi}',
  754 + r'\braket{\phi\vert\psi}',
  755 + r'\Bra{\phi}',
  756 + r'\Ket{\psi}',
  757 + ],
  758 +
  759 + // Class Assignment
  760 +
  761 + 'Color': [
  762 + r'\color{blue} F=ma',
  763 + r'\textcolor{blue}{F=ma}',
  764 + r'\textcolor{#228B22}{F=ma}',
  765 + r'\colorbox{aqua}{A}',
  766 + r'\fcolorbox{red}{aqua}{A}',
  767 + ],
  768 + 'Font': [
  769 + r'\mathrm{Ab0}',
  770 + r'\mathbf{Ab0}',
  771 + r'\mathit{Ab0}',
  772 + // r'\mathnormal{Ab0}',
  773 + r'\textbf{Ab0}',
  774 + r'\textit{Ab0}',
  775 + r'\textrm{Ab0}',
  776 + r'\bf Ab0',
  777 + r'\it Ab0',
  778 + r'\rm Ab0',
  779 + r'\bold{Ab0}',
  780 + r'\textup{Ab0}',
  781 + r'\textnormal{Ab0}',
  782 + r'\boldsymbol{Ab0}',
  783 + r'\Bbb{AB}',
  784 + r'\text{Ab0}',
  785 + r'\bm{Ab0}',
  786 + r'\mathbb{AB}',
  787 + r'\mathsf{Ab0}',
  788 + r'\textmd{Ab0}',
  789 + r'\frak{Ab0}',
  790 + r'\textsf{Ab0}',
  791 + r'\mathtt{Ab0}',
  792 + r'\mathfrak{Ab0}',
  793 + r'\sf Ab0',
  794 + r'\texttt{Ab0}',
  795 + r'\mathcal{AB0}',
  796 + r'\tt Ab0',
  797 + r'\cal AB0',
  798 + r'\mathscr{AB}',
  799 + ],
  800 + 'Size': [
  801 + r'\Huge AB',
  802 + r'\normalsize AB',
  803 + r'\huge AB',
  804 + r'\small AB',
  805 + r'\LARGE AB',
  806 + r'\footnotesize AB',
  807 + r'\Large AB',
  808 + r'\scriptsize AB',
  809 + r'\large AB',
  810 + r'\tiny AB',
  811 + ],
  812 +
  813 + 'Style': [
  814 + r'\displaystyle\sum_{i=1}^n',
  815 + r'\textstyle\sum_{i=1}^n',
  816 + r'\scriptstyle x',
  817 + r'\scriptscriptstyle x',
  818 + r'\lim\limits_x',
  819 + r'\lim\nolimits_x',
  820 + r'\verb!x^2!',
  821 + ],
  822 +
  823 + '': [
  824 + r'\dots',
  825 + r'\KaTeX',
  826 + r'\%',
  827 + r'\cdots',
  828 + r'\LaTeX',
  829 + r'\#',
  830 + r'\ddots',
  831 + r'\TeX',
  832 + r'\&',
  833 + r'\ldots',
  834 + r'\nabla',
  835 + r'\_',
  836 + r'\vdots',
  837 + r'\infty',
  838 + r'\text{\textunderscore}',
  839 + r'\dotsb',
  840 + r'\infin',
  841 + r'\text{--}',
  842 + r'\dotsc',
  843 + r'\checkmark',
  844 + r'\text{\textendash}',
  845 + r'\dotsi',
  846 + r'\dag',
  847 + r'\text{---}',
  848 + r'\dotsm',
  849 + r'\dagger',
  850 + r'\text{\textemdash}',
  851 + r'\dotso',
  852 + r'\text{\textdagger}',
  853 + r'\text{\textasciitilde}',
  854 + r'\sdot',
  855 + r'\ddag',
  856 + r'\text{\textasciicircum}',
  857 + r'\mathellipsis',
  858 + r'\ddagger',
  859 + r'`',
  860 + r'\text{\textellipsis}',
  861 + r'\text{\textdaggerdbl}',
  862 + r'\text{\textquoteleft}',
  863 + r'\Box',
  864 + r'\Dagger',
  865 + r'\lq',
  866 + r'\square',
  867 + r'\angle',
  868 + r'\text{\textquoteright}',
  869 + r'\blacksquare',
  870 + r'\measuredangle',
  871 + r'\rq',
  872 + r'\triangle',
  873 + r'\sphericalangle',
  874 + r'\text{\textquotedblleft}',
  875 + r'\triangledown',
  876 + r'\top',
  877 + r'"',
  878 + r'\triangleleft',
  879 + r'\bot',
  880 + r'\text{\textquotedblright}',
  881 + r'\triangleright',
  882 + r'\$',
  883 + r'\colon',
  884 + r'\bigtriangledown',
  885 + r'\text{\textdollar}',
  886 + r'\backprime',
  887 + r'\bigtriangleup',
  888 + r'\pounds',
  889 + r'\prime',
  890 + r'\blacktriangle',
  891 + r'\mathsterling',
  892 + r'\text{\textless}',
  893 + r'\blacktriangledown',
  894 + r'\text{\textsterling}',
  895 + r'\text{\textgreater}',
  896 + r'\blacktriangleleft',
  897 + r'\yen',
  898 + r'\text{\textbar}',
  899 + r'\blacktriangleright',
  900 + r'\surd',
  901 + r'\text{\textbardbl}',
  902 + r'\diamond',
  903 + r'\degree',
  904 + r'\text{\textbraceleft}',
  905 + r'\Diamond',
  906 + r'\text{\textdegree}',
  907 + r'\text{\textbraceright}',
  908 + r'\lozenge',
  909 + r'\mho',
  910 + r'\text{\textbackslash}',
  911 + r'\blacklozenge',
  912 + r'\diagdown',
  913 + r'\text{\P}',
  914 + r'\star',
  915 + r'\diagup',
  916 + r'\text{\S}',
  917 + r'\bigstar',
  918 + r'\flat',
  919 + r'\text{\sect}',
  920 + r'\clubsuit',
  921 + r'\natural',
  922 + // r'\copyright',
  923 + r'\clubs',
  924 + r'\sharp',
  925 + r'\circledR',
  926 + r'\diamondsuit',
  927 + r'\heartsuit',
  928 + // r'\text{\textregistered}',
  929 + r'\diamonds',
  930 + r'\hearts',
  931 + r'\circledS',
  932 + r'\spadesuit',
  933 + r'\spades',
  934 + // r'\text{\textcircled a}',
  935 + r'\maltese',
  936 + ],
  937 + 'Units': [
  938 + r'\rule{1em}{1em}',
  939 + r'\scriptscriptstyle\rule{1em}{1em}',
  940 + r'\huge\rule{1em}{1em}',
  941 + r'\rule{18mu}{18mu}',
  942 + r'\scriptscriptstyle\rule{18mu}{18mu}',
  943 + r'\huge\rule{18mu}{18mu}',
  944 + r'\rule{10pt}{10pt}',
  945 + r'\scriptscriptstyle\rule{10pt}{10pt}',
  946 + r'\huge\rule{10pt}{10pt}',
  947 + ]
  948 +};
  1 +name: flutter_math_fork_example
  2 +description: A Flutter Package (Demo) to render LaTeX with pure Flutter.
  3 +
  4 +# The following line prevents the package from being accidentally published to
  5 +# pub.dev using `pub publish`. This is preferred for private packages.
  6 +publish_to: 'none' # Remove this line if you wish to publish to pub.dev
  7 +version: 1.0.0+1
  8 +
  9 +environment:
  10 + sdk: ">=2.12.0 <3.0.0"
  11 +
  12 +dependencies:
  13 + flutter:
  14 + sdk: flutter
  15 +
  16 + flutter_math_fork:
  17 + path: ../
  18 +
  19 + provider: any
  20 + flutter_tex: ^4.0.3+4
  21 + google_fonts: ^4.0.4
  22 +
  23 +dev_dependencies:
  24 + flutter_test:
  25 + sdk: flutter
  26 +
  27 +flutter:
  28 + uses-material-design: true
  1 +<!DOCTYPE html>
  2 +<html>
  3 +<head>
  4 + <meta charset="UTF-8">
  5 + <meta content="IE=Edge" http-equiv="X-UA-Compatible">
  6 + <meta name="description" content="A new Flutter project.">
  7 +
  8 + <!-- iOS meta tags & icons -->
  9 + <meta name="apple-mobile-web-app-capable" content="yes">
  10 + <meta name="apple-mobile-web-app-status-bar-style" content="black">
  11 + <meta name="apple-mobile-web-app-title" content="example">
  12 + <link rel="apple-touch-icon" href="icons/Icon-192.png">
  13 +
  14 + <!-- Favicon -->
  15 + <link rel="shortcut icon" type="image/png" href="favicon.png"/>
  16 +
  17 + <title>Flutter Math Demo</title>
  18 + <script src="assets/packages/flutter_tex/js/flutter_tex.js"></script>
  19 + <link rel="manifest" href="manifest.json">
  20 +</head>
  21 +<body>
  22 + <!-- This script installs service_worker.js to provide PWA functionality to
  23 + application. For more information, see:
  24 + https://developers.google.com/web/fundamentals/primers/service-workers -->
  25 + <script>
  26 + if ('serviceWorker' in navigator) {
  27 + window.addEventListener('load', function () {
  28 + navigator.serviceWorker.register('flutter_service_worker.js');
  29 + });
  30 + }
  31 + </script>
  32 + <script src="main.dart.js" type="application/javascript"></script>
  33 +</body>
  34 +</html>
  1 +{
  2 + "name": "example",
  3 + "short_name": "example",
  4 + "start_url": ".",
  5 + "display": "standalone",
  6 + "background_color": "#0175C2",
  7 + "theme_color": "#0175C2",
  8 + "description": "A new Flutter project.",
  9 + "orientation": "portrait-primary",
  10 + "prefer_related_applications": false,
  11 + "icons": [
  12 + {
  13 + "src": "icons/Icon-192.png",
  14 + "sizes": "192x192",
  15 + "type": "image/png"
  16 + },
  17 + {
  18 + "src": "icons/Icon-512.png",
  19 + "sizes": "512x512",
  20 + "type": "image/png"
  21 + }
  22 + ]
  23 +}
  1 +/// Utilities to manipulate Flutter Math's ASTs
  2 +///
  3 +/// See also:
  4 +///
  5 +/// * [GreenNode]
  6 +/// * [SyntaxNode]
  7 +/// * [SyntaxTree]
  8 +library ast;
  9 +
  10 +import 'src/ast/syntax_tree.dart';
  11 +
  12 +export 'src/ast/nodes/accent.dart';
  13 +export 'src/ast/nodes/accent_under.dart';
  14 +export 'src/ast/nodes/enclosure.dart' show EnclosureNode;
  15 +export 'src/ast/nodes/equation_array.dart';
  16 +export 'src/ast/nodes/frac.dart' show FracNode;
  17 +export 'src/ast/nodes/function.dart';
  18 +export 'src/ast/nodes/left_right.dart' show LeftRightNode;
  19 +export 'src/ast/nodes/matrix.dart';
  20 +export 'src/ast/nodes/multiscripts.dart';
  21 +export 'src/ast/nodes/nary_op.dart';
  22 +export 'src/ast/nodes/over.dart';
  23 +export 'src/ast/nodes/phantom.dart';
  24 +export 'src/ast/nodes/raise_box.dart';
  25 +export 'src/ast/nodes/space.dart';
  26 +export 'src/ast/nodes/sqrt.dart' show SqrtNode;
  27 +export 'src/ast/nodes/stretchy_op.dart' show StretchyOpNode;
  28 +export 'src/ast/nodes/style.dart';
  29 +export 'src/ast/nodes/symbol.dart' show SymbolNode;
  30 +export 'src/ast/nodes/under.dart';
  31 +export 'src/ast/options.dart';
  32 +export 'src/ast/size.dart';
  33 +export 'src/ast/style.dart';
  34 +export 'src/ast/syntax_tree.dart'
  35 + hide TemporaryNode, BuildResult, PositionDependentMixin;
  36 +export 'src/ast/tex_break.dart' hide BreakResult;
  37 +export 'src/ast/types.dart';
  1 +/// Basic utilities to render math equations.
  2 +///
  3 +/// Please refer to README for usage.
  4 +library flutter_math_fork;
  5 +
  6 +export 'src/ast/options.dart' show MathOptions, FontOptions;
  7 +export 'src/ast/size.dart' show MathSize;
  8 +export 'src/ast/style.dart' show MathStyle;
  9 +export 'src/encoder/exception.dart';
  10 +export 'src/parser/tex/parse_error.dart';
  11 +export 'src/parser/tex/settings.dart';
  12 +export 'src/widgets/exception.dart';
  13 +export 'src/widgets/math.dart';
  14 +export 'src/widgets/selectable.dart' show SelectableMath;
  1 +The MIT License (MIT)
  2 +
  3 +Copyright (c) 2018 Khan Academy
  4 +
  5 +Permission is hereby granted, free of charge, to any person obtaining a copy
  6 +of this software and associated documentation files (the "Software"), to deal
  7 +in the Software without restriction, including without limitation the rights
  8 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9 +copies of the Software, and to permit persons to whom the Software is
  10 +furnished to do so, subject to the following conditions:
  11 +
  12 +The above copyright notice and this permission notice shall be included in all
  13 +copies or substantial portions of the Software.
  14 +
  15 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  21 +SOFTWARE.
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type