This library is a collection of Flutter widgets for displaying and editing traditional Mongolian vertical text.
Displaying vertical text
MongolText is a vertical text version of Flutter's
Text widget. Left-to-right line wrapping is supported.
MongolText('ᠨᠢᠭᠡ ᠬᠣᠶᠠᠷ ᠭᠤᠷᠪᠠ ᠳᠦᠷᠪᠡ ᠲᠠᠪᠤ ᠵᠢᠷᠭᠤᠭᠠ ᠳᠣᠯᠣᠭᠠ ᠨᠠᠢᠮᠠ ᠶᠢᠰᠦ ᠠᠷᠪᠠ'),
The library supports mobile, web, and desktop.
Emoji and CJK characters
The library rotates emoji and CJK (Chinese, Japanese, and Korean) characters for proper orientation.
You add styling using
TextStyle, just as you would for a
MongolText.rich( textSpan, textScaleFactor: 2.5, ),
textSpan is defined like so:
const textSpan = TextSpan( style: TextStyle(fontSize: 30, color: Colors.black), children: [ TextSpan(text: 'ᠨᠢᠭᠡ\n', style: TextStyle(fontSize: 40)), TextSpan(text: 'ᠬᠣᠶᠠᠷ', style: TextStyle(backgroundColor: Colors.yellow)), TextSpan( text: ' ᠭᠤᠷᠪᠠ ', style: TextStyle(shadows: [ Shadow( blurRadius: 3.0, color: Colors.lightGreen, offset: Offset(3.0, -3.0), ), ]), ), TextSpan(text: 'ᠳᠦᠷ'), TextSpan(text: 'ᠪᠡ ᠲᠠᠪᠤ ᠵᠢᠷᠭᠤ', style: TextStyle(color: Colors.blue)), TextSpan(text: 'ᠭᠠ ᠨᠠᠢᠮᠠ '), TextSpan(text: 'ᠶᠢᠰᠦ ', style: TextStyle(fontSize: 20)), TextSpan( text: 'ᠠᠷᠪᠠ', style: TextStyle(fontFamily: 'MenksoftAmuguleng', color: Colors.purple)), ], );
This all assumes you've added one or more Mongolian fonts to your app assets.
Adding a Mongolian font
The library does not include a Mongolian font. This allows the library to be smaller and also gives developers the freedom to choose any Mongolian font they like.
Since it's likely that some of your users' devices won't have a Mongolian font installed, you should include at least one Mongolian font with your project. Here is what you need to do:
1. Get a font
You can find a font from the following companies:
2. Add the font to your project
Basically you just need to create an assets/fonts folder for it and then declare the font in pubspec.yaml like this:
flutter: fonts: - family: MenksoftQagan fonts: - asset: assets/fonts/MQG8F02.ttf
You can call the family name whatever you want, but this string is what you will use in the next step.
3. Set the default Mongolian font for your app
main.dart file, set the
fontFamily for the app theme.
MaterialApp( title: 'My App', theme: ThemeData(fontFamily: 'MenksoftQagan'), home: MyHomePage(), );
Now you won't have to manually set the font for every Mongolian text widget. If you want to use a different font for some widgets, though, you can still set the
fontFamily as you normally would inside
You may also consider using mongol_code with a Menksoft font if your users have devices that don't support OpenType Unicode font rendering.
mongol_code converts Unicode to Menksoft code, which a Menksoft font can display without any special rendering requirements.
Editing vertical text
You can use
MongolTextField to receive and edit text from the system keyboard. This widget includes most of the functionality of the standard Flutter
Here is it on iOS and Android interacting with a system keyboard:
There are a few known issues with
- The cursor shows up on the right side of hint text.
- The gesture detection region for the left text selection handle does not appear directly on the handle.
- Some of the features are untested.
If you discover any other problems please open an issue. And if you have time to find the source of the known issues, that would be very helpful.
This alert dialog works mostly the same as the Flutter
This are not part of
mongol library yet, but you can see an example of how to make a custom in-app keyboard in the example app that's included with this library. Here is a screenshot from the demo app:
- Improve keyboard
- Various other text based widgets
- Add missing tests (currently commented out)
- For MongolTextAlign.bottom don't count final space in line height