flutter_tex 3.6.0+1
flutter_tex: ^3.6.0+1 copied to clipboard
A Flutter Package to render Mathematics / Maths, Physics and Chemistry, Statistics / Stats Equations based on LaTeX with full HTML and JavaScript support.
Flutter TeX #

A Flutter Package to render so many types of equations based on LaTeX and TeX, most commonly used are as followings:
-
Mathematics / Maths Equations (Algebra, Calculus, Geometry, Geometry etc...)
-
Physics Equations
-
Signal Processing Equations
-
Chemistry Equations
-
Statistics / Stats Equations
-
It also includes full HTML with JavaScript support.
Rendering of equations depends on mini-mathjax a simplified version of MathJax and Katex JavaScript libraries.
This package mainly depends on webview_flutter plugin.
Use this package as a library in your flutter Application #
1: Add this to your package's pubspec.yaml file:
dependencies:
flutter_tex: ^3.6.0+1
2: You can install packages from the command line:
$ flutter packages get
Alternatively, your editor might support flutter packages get. Check the docs for your editor to learn more.
3: For 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>
and permissions
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
For 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/>
4: Now in your Dart code, you can use:
import 'package:flutter_tex/flutter_tex.dart';
5: Now you can use TeXHTML widget like this.
TeXView(
renderingEngine: TeXViewRenderingEngine.katex(),
children: [
TeXViewContainer(
style: TeXViewStyle(
backgroundColor: Colors.green,
contentColor: Colors.white,
),
children: [
TeXViewTeX(
r"<h3>Quadratic Equation</h3>",
style: TeXViewStyle(
textAlign: TeXViewTextAlign.Center,
backgroundColor: Colors.red,
contentColor: Colors.white,
),
id: "tex_0",
),
TeXViewTeX(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(
"color:white;background-color:light-green"),
id: "tex_1"),
])
],
style: TeXViewStyle(
elevation: 10,
border: TeXViewBorder(
all: TeXViewBorderDecoration(
borderColor: Colors.blue,
borderStyle: TeXViewBorderStyle.Solid,
borderWidth: 5)),
backgroundColor: Colors.white,
),
loadingWidget: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CircularProgressIndicator(),
Text("Rendering with ")
],
),
),
onTap: (childID) {
print("TeXView $childID is tapped.");
})
Use Katex RenderingEngine for fast render and MathJax RenderingEngine for quality render.
Api Changes since flutter_tex:^3.6.0 #
TeXViewChild
removed,TeXViewContainer
child ofTeXView
added andTeXViewTeX
child ofTeXViewChild
added which holdsTeX
data styling.
RenderingEngine
has been replaced withTeXViewRenderingEngine
- Katex Configurations added.
Api Changes since flutter_tex:^3.5.0 #
teXHTML
has been removed from the API and replaced by thechildren
which contains the list ofTeXViewChild
for more information please see the example. For any problem please report the issue.
Api Usage. #
-
children:
A list ofTeXViewContainer
-
TeXViewContainer:
A list ofTeXViewTeX
-
TeXViewTeX
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 javascript code in it.
If you load Network Image in your document you should go like this.<img onload="onTeXViewRenderComplete();" src="https://img.wallpapersafari.com/desktop/1920/1080/84/27/nMWzIB.jpg" />
Do put this
onload="onTeXViewRenderComplete();"
in your img tag, it'll recalculate the height of the page and rerender the page after the image loading completes. -
TeXViewStyle()
You can style each and everything usingTeXViewStyle()
or by using customCSS
code byTeXViewStyle.fromCSS()
where you can pass hard coded String containing CSS code. For more information please check the example. -
renderingEngine:
Render Engine to render TeX (Default is Katex Rendering Engine). -
height:
Fixed Height for TeXView. (Avoid using fixed height for TeXView, let it to adopt the height by itself) -
loadingWidget:
Show a loading widget before rendering completes. -
showLoadingWidget:
Show or hide loadingWidget. -
onTap:
On Tap Callback. -
onRenderFinished:
Callback with the rendered page height, when TEX rendering finishes. -
onPageFinished:
Callback when TeXView loading finishes. -
keepAlive:
Keep widget Alive . (True by default).
Demo app is available on Google Play. #
Screenshots #
Screenshot# 01 | Screenshot# 02 |
---|---|
![]() |
![]() |
Screenshot# 03 | Screenshot# 04 |
---|---|
![]() |
![]() |
To Do: #
Speed Optimizations as it's a bit slow rendering speed. It takes 1-2 seconds to render after application loaded.(Solved by adding Katex Support)- Poor support for Flutter Web, Please don't use that for production.
Cautions: #
- Please avoid using too many TeXViews in a single page, because this is based on webview_flutter a complete web browser. Which may cause slowing down your app.