flutter_tex 4.1.3 copy "flutter_tex: ^4.1.3" to clipboard
flutter_tex: ^4.1.3 copied to clipboard

A Flutter Package to render Maths, Physics Chemistry, Statistics Equations and expressions based on LaTeX, TeX, and MathML with HTML and JavaScript support.

flutter_tex #

GitHub stars pub package

Contents #

About #

A Flutter Package, to render fully offline all types of equations and expressions based on LaTeX , TeX and MathML, most commonly used are as followings:

  • Mathematics / Maths Equations and expressions (Algebra, Calculus, Geometry, Geometry etc...)

  • Physics Equations and expressions

  • Signal Processing Equations and expressions

  • Chemistry Equations and expressions

  • Statistics / Stats Equations and expressions

  • It also includes full HTML with JavaScript support.

How it works? #

Flutter TeX is a port to a powerful JavaScript library MathJax which render the equations in webview_flutter_plus. All credits goes to MathJax developers.

Demo Video #

Screenshots #

Fonts Sample Quiz Sample TeX Document
TeX Document Image & Video InkWell

How to setup? #

Minmum flutter SDK requirement is 3.27.x

1: Add flutter_tex latest pub package version under dependencies to your package's pubspec.yaml file.

dependencies:
  flutter_tex: ^4.1.3
copied to clipboard

2: You can install packages from the command line:

$ flutter packages get
copied to clipboard

Alternatively, your editor might support flutter packages get. Check the docs for your editor to learn more.

3: Now you need to put the following implementations in Android, iOS, and Web respectively.

Android #

Make sure to add this line android:usesCleartextTraffic="true" in your <project-directory>/android/app/src/main/AndroidManifest.xml under application like this.

<application
       ...
       ...
       android:usesCleartextTraffic="true">
</application>
copied to clipboard

It completely works offline, without internet connection, but these are required permissions to work properly:

    <uses-permission android:name="android.permission.INTERNET" />
copied to clipboard

and intents in queries block:

<queries>
  ...
  ...
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="https" />
    </intent>

    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="sms" />
    </intent>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="tel" />
    </intent>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="mailto" />
    </intent>
    <intent>
        <action android:name="android.support.customtabs.action.CustomTabsService" />
    </intent>
</queries>
copied to clipboard

It'll still work in debug mode without permissions, but it won't work in release application without mentioned permissions.

iOS #

Add following code in your <project-directory>/ios/Runner/Info.plist

<key>NSAppTransportSecurity</key>
  <dict>
    <key>NSAllowsArbitraryLoads</key> <true/>
  </dict>
<key>io.flutter.embedded_views_preview</key> <true/> 
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>https</string>
    <string>http</string>
    <string>tel</string>
    <string>mailto</string>
</array> 

copied to clipboard

Web #

For Web support you need to put <script src="assets/packages/flutter_tex/js/flutter_tex.js"></script> and <script type="text/javascript">window.flutterWebRenderer = "canvaskit";</script> in <head> tag of your <project-directory>/web/index.html like this.

<head>
    ...
    ...
    <script src="assets/packages/flutter_tex/js/flutter_tex.js"></script>
</head>
copied to clipboard

How to use? #

In your Dart code, you can use like:

import 'package:flutter_tex/flutter_tex.dart'; 
copied to clipboard

Make sure to setup TeXRederingServer before rendering TeX:

main() async {

  if (!kIsWeb) {
    await TeXRenderingServer.start();
  }

  runApp(...);
}
copied to clipboard

Now you can use TeXView as a widget:

Examples #

Quick Example #

TeXView(
    child: TeXViewColumn(children: [
      TeXViewInkWell(
        id: "id_0",
        child: TeXViewColumn(children: [
          TeXViewDocument(r"""<h2>Flutter \( \rm\\TeX \)</h2>""",
              style: TeXViewStyle(textAlign: TeXViewTextAlign.center)),
          TeXViewContainer(
            child: TeXViewImage.network(
                'https://raw.githubusercontent.com/Shahxad-Akram/flutter_tex/master/example/assets/flutter_tex_banner.png'),
            style: TeXViewStyle(
              margin: TeXViewMargin.all(10),
              borderRadius: TeXViewBorderRadius.all(20),
            ),
          ),
          TeXViewDocument(r"""<p>                                
                       When \(a \ne 0 \), there are two solutions to \(ax^2 + bx + c = 0\) and they are
                       $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$</p>""",
              style: TeXViewStyle.fromCSS(
                  'padding: 15px; color: white; background: green'))
        ]),
      )
    ]),
    style: TeXViewStyle(
      elevation: 10,
      borderRadius: TeXViewBorderRadius.all(25),
      border: TeXViewBorder.all(TeXViewBorderDecoration(
          borderColor: Colors.blue,
          borderStyle: TeXViewBorderStyle.solid,
          borderWidth: 5)),
      backgroundColor: Colors.white,
    ),
   );
copied to clipboard

TeXView Document Example #

TeXView Document Example

TeXView Markdown Example #

TeXView Markdown Example

TeXView Quiz Example #

TeXView Quiz Example

TeXView Custom Fonts Example #

TeXView Custom Fonts Example

TeXView Image and Video Example #

TeXView Image and Video Example

TeXView InkWell Example #

TeXView InkWell Example

Complete Example #

Complete Example Code

Application Demo: #

Get it on Google Play

Demo Source

Web Demo: #

You can find web demo at https://flutter-tex.web.app

Api Changes: #

Api Usage: #

  • children: A list of TeXViewWidget

  • TeXViewWidget

    • TeXViewDocument Holds TeX data by using a raw string e.g. r"""$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$<br> """ You can also put HTML and Javascript code in it.
    • TeXViewMarkdown Holds markdown data.
    • TeXViewContainer Holds a single TeXViewWidget with styling.
    • TeXViewImage renders image from assets or network.
    • TeXViewColumn holds a list of TeXViewWidget vertically.
    • TeXViewInkWell for listening tap events. Its child and id is mandatory.
    • TeXViewGroup a group of TeXViewGroupItem usually used to create quiz layout.
    • TeXViewDetails like html <details>.
  • TeXViewStyle() You can style each and everything using TeXViewStyle() or by using custom CSS code by TeXViewStyle.fromCSS() where you can pass hard coded String containing CSS code. For more information please check the example.

  • loadingWidgetBuilder: Show a loading widget before rendering completes.

  • onRenderFinished: Callback with the rendered page height, when TEX rendering finishes.

For more please see the Example.

ToDo #

  • MathJax configurations from Flutter.

Limitations: #

  • Please avoid using too many TeXViews in a single page, because this is based on webview_flutter_plus a complete web browser. Which may cause slowing down your app. I am trying to add all necessary widgets within TeXView, So please prefer to use TeXViewWidget. You can check example folder for details. If you find any problem you can report an issue.
314
likes
160
points
5.09k
downloads

Publisher

verified publishershahxad.com

Weekly Downloads

2024.09.22 - 2025.04.06

A Flutter Package to render Maths, Physics Chemistry, Statistics Equations and expressions based on LaTeX, TeX, and MathML with HTML and JavaScript support.

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

flutter, markdown, url_launcher, web, webview_flutter_plus

More

Packages that depend on flutter_tex