Fast math TeX renderer for Flutter written in Dart.

Overview

CaTeX logo

CaTeX on Pub CaTeX Flutter web demo

CaTeX is a Flutter package that outputs TeX equations (like LaTeX, KaTeX, MathJax, etc.) inline using a widget and Flutter only - no plugins, no web views.

On-Hold

Note that this package is currently on-hold.
This is because we are currently primarily engaged with other efforts. Therefore, we cannot ensure active maintenance of the package.

However, there is an alternative that we encourage you to check out in the meantime :)
We worked together with flutter_math to make that package have all the necessary functionality and you should be able to use it in place of CaTeX for the while being.

About CaTeX

Being Dart only, CaTeX renders TeX faster than any other Flutter plugin and is way more flexible. You can view a demo running on the web.

CaTeX is an open source project with the aim of providing a way to render TeX fast in Flutter. This was needed for the simpleclub app, hence, the association. It is also maintained by simpleclub (see the LICENSE file), initially created individually by creativecreatorormaybenot.

Note

CaTeX is pre-v0.1 release and lacks support for some major TeX functionality. You can help and contribute; see the contributing guide.

To benefit from the library right now, we fall back to an alternative when a specific formula is not supported. CaTeX automatically throws appropriate exceptions for handling this.

Usage

In order to manually input TeX equations to CaTeX you should use raw Dart strings (r'<input>' or '''<input>'''):

Widget build(BuildContext context) => CaTeX(r'\epsilon = \frac 2 {3 + 2}');

If you fetch the strings from a database, you can just pass them to CaTeX:

CaTeX(equation);

Unsupported input

If your input is currently not yet supported by CaTeX, you will see proper exceptions thrown for this. See the "Exception handling" section for more on this.

Please create a GitHub issue when you encounter such a case and it is either a bug or a missing feature. You can find issue templates when creating a new issue.

Controlling the font size

You will notice that the CaTeX widget does not have any parameters for styling (for the sake of simplicity). Instead, it uses inherited widgets to grab necessary properties.

The base font size of the rendered output is controlled via Flutter's DefaultTextStyle widget, i.e. the TextStyle.fontSize property.

Widget build(BuildContext context) {
  return DefaultTextStyle.merge(
    style: TextStyle(
      fontSize: 42,
    ),
    child: CaTeX(r'\CaTeX'),
  );
}

Implementation

The implementation is mainly based on The TeXbook by Donald E. Knuth, TeX by Topic by Victor Eijkhout, and the KaTeX JavaScript project.

Remember that CaTeX uses Flutter only! Consequently, all parsing and rendering is done in Dart.

The package basically uses two trees from input to displaying all nodes:

  1. Parsing tree, which consists of nodes storing only information about separation, i.e. the current mode (math or text) and the input for a given node.
    Each node in this tree will have the necessary information to create a render object from itself for the rendering tree.
  2. Rendering tree, which makes use of Flutter's render objects and takes care of sizing and rendering (using a canvas).

Fonts & licenses

The included fonts are taken from the katex-fonts repository and licensed under the SIL Open Font License.
Additionally, some code, e.g. what is used for translating symbols is from KaTeX.
You can find the license for the main KaTeX repo here.

Exception handling

There are three types of exceptions that are commonly thrown by CaTeX:

  1. ParsingException, which will be thrown if CaTeX does not understand your input, i.e. even before it tries to display your input. This will commonly occur when something about your input is wrong, e.g. the wrong number of arguments for a function.
    This type of exception will be shown on the screen by the default CaTeX widget (like a normal Flutter error).
  2. ConfigurationException, which will be thrown when CaTeX fails to display your input, i.e. when something about your input is not quite right (from CaTeX's point of view). Commonly, this means that something is not configured right, e.g. the name of a symbol.
    This type of exception will also be shown on the screen by the default CaTeX widget (like a normal Flutter error).
  3. RenderingException, which will only be thrown when the constraints given to CaTeX to render your input are not sufficient for your input.
    This type of exception is not shown on screen. Instead, CaTeX will only clip the output. However, you can still see the exception reported by Flutter during performLayout() in the logs.

If you want to customize the look of how ParsingExceptions and ConfigurationExceptions are displayed, consider overriding ErrorWidget.builder. If you want to see CaTeX errors in release mode, you will have to override the builder and ensure that any CaTeXException is handled differently than normal. An example override might look like this:

void main() {
  ErrorWidget.builder = (FlutterErrorDetails details) {
    final exception = details.exception;
    if (exception is CaTeXException) {
      return ErrorWidget(exception);
    }

    var message = '';
    // The assert ensures that any exceptions that are not CaTeX exceptions
    // are not shown in release and profile mode. This ensures that no
    // stack traces or other sensitive information (information that the user
    // is in no way interested in) is shown on screen.
    assert(() {
      message = '${details.exception}\n'
          'See also: https://flutter.dev/docs/testing/errors';
      return true;
    }());

    return ErrorWidget.withDetails(
      message: message,
      error: exception is FlutterError ? exception : null,
    );
  };
  runApp(const App());
}

See the example app for more examples.

Expanding supported functionality

This package is far from complete in terms of supporting all TeX functionality.
If you want support for more functions, symbols, macros, etc., we appreciate your contribution!
Please refer to the contributing guide to understand how you can easily add functions and more.

To aid our own prioritization for this project, we conducted some research examining how often particular TeX commands appear in some of simpleclub's content. This should give a rough feeling for what is most commonly used. A CSV file with the list of used functions and the frequency of appearance is maintained in the repo.

Mission

There are already a couple of TeX Flutter plugins out there. So why create another?

Most of those libraries use already existing implementations in other languages, mostly using web views and JavaScript.
This is a valid approach; it is straightforward to implement. You only have to write a wrapper.

However, we believe that utilizing web views is an overhead that makes the applications less portable and performant.
At simpleclub, we recently decided to move from a Flutter-native hybrid to going all-in with Flutter. Now, we need a well-written Flutter TeX library that works on every platform and can display lots of formulas. So we decided to start this open source effort of bringing Dart-native TeX support to Flutter.

A custom TeX parser could potentially also allow us to provide accessibility and screen reader support out of the box.
Here we could build on the work of T.V. Raman, who developed Audio System For Technical Readings (AsTeR) for his PhD.

As this involves a lot of work, we would be happy to work together with the open source for bringing this vision to life together - so everyone can benefit from a pure-Flutter TeX library.

See our contributing guide for more information.

Comments
  • Added \mathbb

    Added \mathbb

    Description

    Added \mathbb{}.

    Related issues

    Checklist

    • [x] I added a PR description.
    • [x] I linked all related issues I could find.
    • [x] If this PR changes anything about the main catex or example package (also README etc.), I created an entry in CHANGELOG.md (## NEXT RELEASE if it is not worth an update).
    • [x] If this PR includes a notable change in the catex package, I updated the version according to Dart's semantic versioning.
    • [x] If this PR adds new functions, I updated the function_prioritization.csv file.
    • [x] I added tests covering all my additions (Golden tests for anything rendering related).
    • [x] All required checks pass.
    cla-signed 
    opened by michaelniedermayr 10
  • version solving

    version solving

    Could you reduce the

    environment: sdk: ">=2.8.4 <3.0.0"

    in pubspec.yaml to

    environment: sdk: ">=2.7.9 <3.0.0"

    in order to allow use with older flutter versions?

    enhancement 
    opened by equisbacon 4
  • Is this package alive?

    Is this package alive?

    Hi thanks for this promising package! I wonder whether it is alive and can be used in production? Seems that it has not been updated for about a year.

    enhancement 
    opened by fzyzcjy 3
  • add \cancel function.

    add \cancel function.

    Description

    This PR adds a single operand function \cancel which draws a slash from the bottom left corner to the top right corner of the child as described by http://tug.ctan.org/tex-archive/macros/latex/contrib/cancel/cancel.pdf

    Checklist

    Remove If [...] items that do not apply to your PR.

    • [x] I have made myself familiar with the CaTeX contributing guide.
    • [X] I added a PR description.
    • [X] If this PR changes anything about the main catex or example package (also README etc.), I created an entry in CHANGELOG.md (## UPCOMING RELEASE if the change on its own is not worth an update).
    • [X] If this PR adds new functions, I updated the function_prioritization.csv file.
    • [x] If there is new functionality in code, I added tests covering all my additions (Golden tests for anything rendering related). - I didn't see any place to add golden tests.
    • [X] All required checks pass.
    cla-signed 
    opened by AlabasterAxe 3
  • I cannot find the document for the available macros and syntaxes

    I cannot find the document for the available macros and syntaxes

    Feature description

    @creativecreatorormaybenot Is there a document where I can find the available syntaxes and macros for CaTeX?

    Right now I am having some troubles with finding the necessary syntaxes so I would appreciate with some clear reference :)

    enhancement 
    opened by ComputelessComputer 3
  • Not supported symbols.

    Not supported symbols.

    Having an error for spacing annotations and mathematical symbols annotation binom and mathrm are not supported.I'll try to get this issue solved from my side but it will take some time.Please consider fixing them soon if possible.

    bug 
    opened by rutvik110 3
  • Feature Request to overflow the text to next line rather than truncating it

    Feature Request to overflow the text to next line rather than truncating it

    I really appreciate the work which you are doing. This is a great plugin which will be really helpful to a lot of people. The current implementation restricts the length of Catex text to the width of the screen. Rest of the text is truncated. There should be some way to overflow this text to next screen. I agree that behaviour is highly undefined in cases of math formulas. But, this will be really helpful in cases where we have a mix of normal text and math formulas together. Please let me know, if there is already a way to achieve this via some workarounds. I couldn't figure out a way to achieve this.

    enhancement 
    opened by avi-yadav 3
  • Update function support list

    Update function support list

    I've checked some top functions if they are supported. Stopped at \leftharpoondown.

    What I've discovered was that there were some functions already supported, but not properly displayed. Some errors/strange behavior I discovered:

    • Displayed italic and not upright. (Examples: \vert, \vee, \forall, \rangle, \langle, \cup, ...)
    • Displayed bold and not slim (Examples: \leq, \forall, ...)
    • Cut off (Examples: \mu, \forall, ...)
    • Char modification displayed, but next to not over char (\bar, \wedge, ...)

    I've also moved {align}/{aligned/ ... to \begin and \end where they are used with.

    cla-signed 
    opened by IchordeDionysos 3
  • Allow GitHub to parse CSV

    Allow GitHub to parse CSV

    I would honestly rather have a slightly incorrect but searchable version of the CSV ๐Ÿ™‚

    I think that this is still mostly valid as you can still find \".

    opened by creativecreatorormaybenot 3
  • Showing Error when using '\' symbol to add space.

    Showing Error when using '\' symbol to add space.

    Bug description

    A clear and concise description of what the bug is. I wanted to show space between the latex code but its not possible as the "" symbol shows error. While other libraries won't. Here is my Latex Code. Latex Code:\begin{aligned}&\text { The greatest integer } k \text { for which } 49^{k}+1 \text { is a factor of the sum }\&49^{125}+49^{124}+\cdots+49^{2}+49+1 \text { is }\end{aligned}

    To Reproduce

    Steps to reproduce the behavior: 0. Use 'Catex()' 0. Run on 'flutter' 0. See an error CaTeXException during configuration: Unknown symbol in CaTeXMode.math, for input: \begin

    Expected behavior

    Want it to read \ symbole to add the space between the latex code. Other latex code readers doesn't through error but CaTeX throws. Can you please look into the matter. I really love is this Library.

    A clear and concise description of what you expected to happen. I want the CaTeX should handle the '' to show space.

    Screenshots Description

    1. Other sites that render Latex can read the Latex Code.
    2. The Error.
    3. My Latex Code.

    Screenshots

    image Annotation 2020-12-18 143910 Annotation 2020-12-18 143930

    If applicable, add screenshots to help explain your problem.

    bug 
    opened by d2207-sahu 2
  • Support for \,

    Support for \,

    Bug description

    \, is unable to be rendered.

    To Reproduce

    Steps to reproduce the behavior:

    Quite simple: try to render a formula containing \,

    Expected behavior

    You should get a nice space between two parts of your formula.

    duplicate enhancement 
    opened by TheOneWithTheBraid 2
  • Catex Widget Overflowing

    Catex Widget Overflowing

    Catex Widget is overflowing & not getting on a new line.

    I am using Catex to render equations in my app. But, I am facing this issue of overflow. I have literally tried everything till now(IntrinsicHeight, SizedBox, Inkwell, etc.), but it is still showing the rendered equations on the same line.

    To Reproduce

    Steps to reproduce the behavior: I have a column & I have added Catex in it as a children

    CaTeX('Q${qIndex + 1}.~' + question.toString().replaceAll('&hellip;', ' ..'))

    Expected behavior

    Catex should show rendered text in multiple lines & should not overflow.

    Screenshots

    IMG_20211115_215311

    Please help. Thank you in advance.

    bug 
    opened by heydc7 1
  • The RenderTree class does not implement

    The RenderTree class does not implement "computeDryLayout"

    Steps to Reproduce

    1. Run flutter create bug.
    2. Update the files as follows:
    import 'package:catex/catex.dart';
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key}) : super(key: key);
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: IntrinsicHeight(
              child: RichText(
                text: TextSpan(
                children: [
                  TextSpan(text: "testing: "),
                  WidgetSpan(
                    alignment: PlaceholderAlignment.middle,
                    child: CaTeX(
                      r"n > 0",
                    ),
                  ),
                ],
              )),
            ),
          ),
        );
      }
    }
    

    pubspec.yaml:

    dependencies:
      flutter:
        sdk: flutter
     catex: ^0.0.1+8
    
    1. Run the app on a simulator.

    Expected results: Render testing: n > 0 in the center of the page.

    Actual results: Error message saying The RenderTree class does not implement "computeDryLayout".

    Logs
    [ +239 ms] Syncing files to device iPhone 7...
    [   +5 ms] <- reset
    [        ] Compiling dart to kernel with 0 updated files
    [   +7 ms] <- recompile package:test_app/main.dart 04bfe32d-68ee-4c54-b69a-97e47992e218
    [        ] <- 04bfe32d-68ee-4c54-b69a-97e47992e218
    [ +111 ms] 
                        โ•โ•โ•ก EXCEPTION CAUGHT BY RENDERING LIBRARY โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
                        The following assertion was thrown during performLayout():
                        The RenderTree class does not implement "computeDryLayout".
                        If you are not writing your own RenderBox subclass, then this is not
                        your fault. Contact support: https://github.com/flutter/flutter/issues/new?template=2_bug.md
                        
                        The relevant error-causing widget was:
                          IntrinsicHeight file:///Users/jonathan/Documents/src/apps/test_app/test_app/lib/main.dart:35:18
                        
                        When the exception was thrown, this was the stack:
                        #0      RenderBox.debugCannotComputeDryLayout.<anonymous closure>
    (package:flutter/src/rendering/box.dart:1918:9)
                        #1      RenderBox.debugCannotComputeDryLayout (package:flutter/src/rendering/box.dart:1922:6)
                        #2      RenderBox.computeDryLayout (package:flutter/src/rendering/box.dart:1878:12)
                        #3      RenderBox._computeDryLayout (package:flutter/src/rendering/box.dart:1835:26)
                        #4      RenderBox.getDryLayout.<anonymous closure> (package:flutter/src/rendering/box.dart:1824:68)
                        #5      _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:311:23)
                        #6      RenderBox.getDryLayout (package:flutter/src/rendering/box.dart:1824:37)
                        #7      RenderProxyBoxMixin.computeDryLayout (package:flutter/src/rendering/proxy_box.dart:110:21)
                        #8      RenderBox._computeDryLayout (package:flutter/src/rendering/box.dart:1835:26)
                        #9      RenderBox.getDryLayout.<anonymous closure> (package:flutter/src/rendering/box.dart:1824:68)
                        #10     _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:311:23)
                        #11     RenderBox.getDryLayout (package:flutter/src/rendering/box.dart:1824:37)
                        #12     RenderParagraph._computeChildrenHeightWithMinIntrinsics
    (package:flutter/src/rendering/paragraph.dart:435:31)
                        #13     RenderParagraph._computeIntrinsicHeight (package:flutter/src/rendering/paragraph.dart:337:5)
                        #14     RenderParagraph.computeMaxIntrinsicHeight
    (package:flutter/src/rendering/paragraph.dart:349:12)
                        #15     RenderBox._computeIntrinsicDimension.<anonymous closure>
    (package:flutter/src/rendering/box.dart:1377:23)
                        #16     _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:311:23)
                        #17     RenderBox._computeIntrinsicDimension (package:flutter/src/rendering/box.dart:1375:42)
                        #18     RenderBox.getMaxIntrinsicHeight (package:flutter/src/rendering/box.dart:1747:12)
                        #19     RenderFlex.computeMaxIntrinsicHeight.<anonymous closure>
    (package:flutter/src/rendering/flex.dart:635:60)
                        #20     RenderFlex._getIntrinsicSize (package:flutter/src/rendering/flex.dart:594:58)
                        #21     RenderFlex.computeMaxIntrinsicHeight (package:flutter/src/rendering/flex.dart:632:12)
                        #22     RenderBox._computeIntrinsicDimension.<anonymous closure>
    (package:flutter/src/rendering/box.dart:1377:23)
                        #23     _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:311:23)
                        #24     RenderBox._computeIntrinsicDimension (package:flutter/src/rendering/box.dart:1375:42)
                        #25     RenderBox.getMaxIntrinsicHeight (package:flutter/src/rendering/box.dart:1747:12)
                        #26     RenderIntrinsicHeight._computeSize (package:flutter/src/rendering/proxy_box.dart:795:38)
                        #27     RenderIntrinsicHeight.performLayout (package:flutter/src/rendering/proxy_box.dart:815:12)
                        #28     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #29     RenderPositionedBox.performLayout (package:flutter/src/rendering/shifted_box.dart:430:14)
                        #30     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #31     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
                        #32     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:925:7)
                        #33     MultiChildLayoutDelegate._callPerformLayout
    (package:flutter/src/rendering/custom_layout.dart:243:7)
                        #34     RenderCustomMultiChildLayoutBox.performLayout
    (package:flutter/src/rendering/custom_layout.dart:407:14)
                        #35     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #36     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #37     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #38     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #39     _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1371:11)
                        #40     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #41     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #42     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #43     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #44     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #45     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #46     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #47     ChildLayoutHelper.layoutChild (package:flutter/src/rendering/layout_helper.dart:54:11)
                        #48     RenderStack._computeSize (package:flutter/src/rendering/stack.dart:570:43)
                        #49     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:597:12)
                        #50     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #51     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #52     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #53     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #54     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #55     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #56     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #57     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #58     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #59     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #60     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #61     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #62     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3362:13)
                        #63     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #64     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #65     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #66     _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:743:15)
                        #67     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #68     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #69     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #70     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #71     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #72     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #73     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #74     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #75     RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:546:11)
                        #76     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #77     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #78     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #79     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:118:14)
                        #80     RenderObject.layout (package:flutter/src/rendering/object.dart:1784:7)
                        #81     RenderView.performLayout (package:flutter/src/rendering/view.dart:153:14)
                        #82     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1641:7)
                        #83     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:884:18)
                        #84     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:453:19)
                        #85     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:874:13)
                        #86     RendererBinding._handlePersistentFrameCallback
    (package:flutter/src/rendering/binding.dart:319:5)
                        #87     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
                        #88     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1082:9)
                        #89     SchedulerBinding.scheduleWarmUpFrame.<anonymous closure>
    (package:flutter/src/scheduler/binding.dart:865:7)
                        (elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
                        
                        The following RenderObject was being processed when the exception was fired:
    RenderIntrinsicHeight#078c9
                        relayoutBoundary=up2 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE:
                          creator: IntrinsicHeight โ† Container โ† Center โ† _BodyBuilder โ† MediaQuery โ†
                            LayoutId-[<_ScaffoldSlot.body>] โ† CustomMultiChildLayout โ† AnimatedBuilder โ† DefaultTextStyle โ†
                            AnimatedDefaultTextStyle โ† _InkFeatures-[GlobalKey#ba4ca ink renderer] โ†
                            NotificationListener<LayoutChangedNotification> โ† โ‹ฏ
                          parentData: offset=Offset(0.0, 0.0) (can use size)
                          constraints: BoxConstraints(0.0<=w<=375.0, 0.0<=h<=667.0)
                          size: MISSING
                        This RenderObject had the following descendants (showing up to depth 5):
                            child: RenderFlex#68de8 NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
                              child 1: RenderParagraph#76c4f NEEDS-LAYOUT NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
                                text: TextSpan
                                  TextSpan
                                    TextSpan
                                    WidgetSpan#bb6a1
                        โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
    [  +30 ms] 
               Another exception was thrown: 'package:flutter/src/rendering/shifted_box.dart': Failed assertion: line 341 pos
    12:
               'child!.hasSize': is not true.
    [ +176 ms] Updating files.
    [        ] DevFS: Sync finished
    [   +3 ms] Syncing files to device iPhone 7... (completed in 333ms)
    [   +1 ms] Synced 0.0MB.
    [   +2 ms] <- accept
    [  +16 ms] Connected to _flutterView/0x7fcda4027620.
    [   +4 ms] Flutter run key commands.
    [   +4 ms] r Hot reload. ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
    [   +3 ms] R Hot restart.
    [        ] h Repeat this help message.
    [        ] d Detach (terminate "flutter run" but leave application running).
    [        ] c Clear the screen
    [        ] q Quit (terminate the application on the device).
    [        ] An Observatory debugger and profiler on iPhone 7 is available at: http://127.0.0.1:62509/wHccPqIjt40=/
    [   +1 ms] 
               Flutter DevTools, a Flutter debugger and profiler, on iPhone 7 is available at:
               http://127.0.0.1:9102?uri=http%3A%2F%2F127.0.0.1%3A62509%2FwHccPqIjt40%3D%2F
    [        ] Running with unsound null safety
    [        ] For more information see https://dart.dev/null-safety/unsound-null-safety
    [  +30 ms] 
               Another exception was thrown: Updated layout information required for RenderFlex#68de8 NEEDS-LAYOUT NEEDS-PAINT
    to
               calculate semantics.
    [ +307 ms] 
                        Another exception was thrown: Bad state: Future already completed
    
    Analyzing test_app...                                                   
    No issues found! (ran in 7.5s)
    
    [โœ“] Flutter (Channel stable, 2.0.2, on Mac OS X 10.15.6 19G2021 darwin-x64, locale fr-FR)
        โ€ข Flutter version 2.0.2 at /Users/jonathan/Documents/src/lib/flutter
        โ€ข Framework revision 8962f6dc68 (il y a 2 semaines), 2021-03-11 13:22:20 -0800
        โ€ข Engine revision 5d8bf811b3
        โ€ข Dart version 2.12.1
    
    [โœ“] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
        โ€ข Android SDK at /Users/jonathan/Library/Android/sdk
        โ€ข Platform android-30, build-tools 30.0.2
        โ€ข Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
        โ€ข Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
        โ€ข All Android licenses accepted.
    
    [โœ“] Xcode - develop for iOS and macOS
        โ€ข Xcode at /Applications/Xcode.app/Contents/Developer
        โ€ข Xcode 12.4, Build version 12D4e
        โ€ข CocoaPods version 1.10.0
    
    [โœ“] Chrome - develop for the web
        โ€ข Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    
    [โœ“] Android Studio (version 4.0)
        โ€ข Android Studio at /Applications/Android Studio.app/Contents
        โ€ข Flutter plugin version 49.0.2
        โ€ข Dart plugin version 193.7547
        โ€ข Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
    
    [โœ“] VS Code (version 1.48.2)
        โ€ข VS Code at /Applications/Visual Studio Code.app/Contents
        โ€ข Flutter extension version 3.14.1
    
    [โœ“] Connected device (2 available)
        โ€ข iPhone 7 (mobile) โ€ข 6408E65B-14DF-4C98-813A-CB237B985CA5 โ€ข ios            โ€ข
          com.apple.CoreSimulator.SimRuntime.iOS-14-4 (simulator)
        โ€ข Chrome (web)      โ€ข chrome                               โ€ข web-javascript โ€ข unknown
    
    โ€ข No issues found!
    
    bug 
    opened by expz 1
  • Support for \left and \right

    Support for \left and \right

    Bug description Use of \left, \right and all other sized brackets are considered as unknown symbols.

    Steps to reproduce the behavior: Use the Catex widget and input any string with \left or \right and any other brackets, it will cause an error that it doesn't know it.

    These symbols are very useful so they should be added. And if they are implemented, then what exactly is the syntax for getting a large bracket in the equation. The LaTeX syntax says that we should use \left and \right for resized brackets.

    bug 
    opened by hemish11 4
  • Support for sin, sec, cot, tan, lim

    Support for sin, sec, cot, tan, lim

    Bug description

    \sin, \sec, \cot, \tan, \lim is an unknown symbol.

    To Reproduce

    Steps to reproduce the behavior:

    1. Use '\sin or \sec or \cot or \tan or \lim'
    2. See error: CaTeXException during configuration: Unknown symbol in CaTeXMode.math, for input: *
    enhancement 
    opened by gowtham-xseed 1
Releases(v0.0.1+6)
Owner
simpleclub
Germany's most popular digital learning platform. Personalised learning, powered by the best content. For 1M+ people.
simpleclub
Simple and fast Entity-Component-System (ECS) library written in Dart.

Fast ECS Simple and fast Entity-Component-System (ECS) library written in Dart. CPU Flame Chart Demonstration of performance for rotation of 1024 enti

Stanislav 8 Nov 16, 2022
Lightweight and blazing fast key-value database written in pure Dart.

Fast, Enjoyable & Secure NoSQL Database Hive is a lightweight and blazing fast key-value database written in pure Dart. Inspired by Bitcask. Documenta

HiveDB 3.4k Dec 30, 2022
Lightweight and blazing fast key-value database written in pure Dart.

Fast, Enjoyable & Secure NoSQL Database Hive is a lightweight and blazing fast key-value database written in pure Dart. Inspired by Bitcask. Documenta

HiveDB 3.4k Dec 30, 2022
A Mobile application developed with Flutter and Dart to do math operations with binary numbers.

Math operations with Binary Numbers Readme PT About this Project Mobile application developed with Flutter and Dart to do math operations as sum, subt

Manoel Ribeiro 3 Nov 3, 2020
This is Math-Puzzle game made in flutter and available on Playstore & AppStore

Math Matrix : Train Your Brain, Improve Math Skill Train Your Brain ยท Report Bug ยท Request Feature Math Matrix is a Math Game that tries improvise you

Jay Savsani 182 Dec 30, 2022
MathCanvas - Graphical Math Equation Editor made by Flutter

Graphical Math Equation Editor made by Flutter. My goal is to provide a keyboard typing experience like a calculator. Test Web Page: https:

GongBJ 3 Jun 3, 2022
Beautiful and accessible math in all browsers

MathJax Beautiful math in all browsers MathJax is an open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all

MathJax 9.2k Jan 9, 2023
A vector math package for 2D and 3D applications

Introduction A Vector math library for 2D and 3D applications. Features 2D, 3D, and 4D vector and matrix types. Quaternion type for animating rotation

Google 261 Dec 21, 2022
MathTraining - A mobile application for training mental math skills

Math Training app A mobile application for training mental math skills. The app

null 34 Oct 5, 2022
A fast, flexible, IoC library for Dart and Flutter

Qinject A fast, flexible, IoC library for Dart and Flutter Qinject helps you easily develop applications using DI (Dependency Injection) and Service L

null 4 Sep 9, 2022
An atomic state management library for dart (and Flutter). Simple, fast and flexible.

nucleus An atomic dependency and state management toolkit. Design goals Simplicity - simple API with no surprises Performance - allow for millions of

Tim 12 Jan 2, 2023
Lucifer is a fast, light-weight web framework in dart.

Lucifer Lightbringer Lucifer is a fast, light-weight web framework in dart. It's built on top of native HttpServer to provide a simple way to fulfill

Salman S 22 Jan 2, 2023
Create dart data classes easily, fast and without writing boilerplate or running code generation.

Dart Data Class Generator Create dart data classes easily, fast and without writing boilerplate or running code generation. Features The generator can

null 186 Feb 28, 2022
Fast and productive web framework provided by Dart

See https://github.com/angulardart for current updates on this project. Packages Source code Published Version angular angular_forms angular_router an

Angular Dart Open Source Packages 1.9k Dec 15, 2022
Fast and idiomatic UUIDs in Dart.

neouuid Fast and idiomatic UUIDs (Universally Unique Identifiers) in Dart. This library decodes and generates UUIDs, 128-bits represented as 32 hexade

Neo Dart 4 Aug 23, 2022
Mysql.dart - MySQL client for Dart written in Dart

Native MySQL client written in Dart for Dart See example directory for examples

null 48 Dec 29, 2022
QR.Flutter is a Flutter library for simple and fast QR code rendering via a Widget or custom painter.

QR.Flutter is a Flutter library for simple and fast QR code rendering via a Widget or custom painter. Need help? Please do not submit an issue for a "

Yakka 614 Jan 8, 2023
Flutter makes it easy and fast to build beautiful apps for mobile and beyond

Flutter is Google's SDK for crafting beautiful, fast user experiences for mobile, web, and desktop from a single codebase. Flutter works with existing

Flutter 148.2k Jan 8, 2023
flutter_thrio makes it easy and fast to add flutter to existing mobile applications, and provide a simple and consistent navigator APIs.

ไธญๆ–‡ๆ–‡ๆกฃ ่‹ฑๆ–‡ๆ–‡ๆกฃ ้—ฎ้ข˜้›† ๅŽŸไป“ๅบ“ไธๅ†็ปดๆŠค๏ผŒไปฃ็ ๅทฒ็ปๅพˆ่€ไบ† ๆœ€่ฟ‘็‰ˆๆœฌๆ›ดๆ–ฐไผšๅพˆๅฟซ๏ผŒไธป่ฆๆ˜ฏๅขžๅŠ ๆ–ฐ็‰นๆ€ง๏ผŒๆถ‰ๅŠๅˆฐๆททๅˆๆ ˆ็š„็จณๅฎšๆ€ง็š„้—ฎ้ข˜ๅบ”่ฏฅไธๅคš๏ผŒๅฏๆ”พๅฟƒๅ‡็บง๏ผŒๅ‘็Žฐ้—ฎ้ข˜ๅŠ  QQ ็พคๅท็ ๏ผš1014085473๏ผŒๆˆ‘ไผšๅฐฝๅฟซ่งฃๅ†ณใ€‚ ไธๆ‰“็ฎ—ๅฅฝๅฅฝ็œ‹็œ‹ๆบ็ ็š„ไฝฟ็”จ่€…ๅฏไปฅๆ”พๅผƒ่ฟ™ไธชๅบ“ไบ†๏ผŒๅ› ไธบๅพˆๅคš่ฎพๅฎšๆ˜ฏๆฏ”่พƒๆญป็š„๏ผŒ่€Œๆˆ‘ๆœฌไบบไธๆ‰“็ฎ—่Šฑๆ—ถ้—ดๅ†™

null 290 Dec 29, 2022