Mongolian vertical script widgets for Flutter apps

Related tags

Example Apps mongol
Overview

mongol

This library is a collection of Flutter widgets for displaying traditional Mongolian vertical text.

The primary widgets include:

  • MongolText: vertical version of Text
  • MongolListTile: vertical version of ListTile, for use in horizontal list views and menus
  • MongolPopupMenuButton: vertical version of PopupMenuButton, for displaying menus
  • MongolAlertDialog: vertical version of AlertDialog

NOTE: Version 3.0.0 removed MongolTextField because recent Flutter updates broke it. The plan is to recreate it from scratch.

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.

Text styling

You add styling using TextSpan and/or TextStyle, just as you would for a Text widget.

MongolText.rich(
  textSpan,
  textScaleFactor: 2.5,
),

where 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

You can get directions to do that here and here.

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

In your 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 TextStyle.

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.

Horizontal lists

You can display horizontally scrolling lists with the standard ListView widget. All you need to do is set the scroll direction to horizontal.

ListView(
  scrollDirection: Axis.horizontal,
  children: [
    MongolText('ᠨᠢᠭᠡ'),
    MongolText('ᠬᠣᠶᠠᠷ'),
    MongolText('ᠭᠤᠷᠪᠠ'),
  ],
),

For something a little fancier, you can also use the MongolListTile widget just like you would use ListTile. Here is an example from the example project:

Card(
  child: MongolListTile(
    leading: FlutterLogo(size: 56.0),
    title: MongolText('ᠨᠢᠭᠡ ᠬᠣᠶᠠᠷ ᠭᠤᠷᠪᠠ'),
    subtitle: MongolText('ᠳᠦᠷᠪᠡ ᠲᠠᠪᠤ ᠵᠢᠷᠭᠤᠭ᠎ᠠ ᠳᠣᠯᠣᠭ᠎ᠠ ᠨᠠᠢᠮᠠ'),
    trailing: Icon(Icons.more_vert),
  ),
),

Menus

To add a popup menu with horizontal items, you can use MongolPopupMenuButton. It is customizable in all the ways that the standard PopupMenuButton is.

Scaffold(
  appBar: AppBar(
    title: const Text('MongolPopupMenuButton'),
    actions: [
      MongolPopupMenuButton(
        itemBuilder: (context) => const [
          MongolPopupMenuItem(child: MongolText('ᠨᠢᠭᠡ'), value: 1),
          MongolPopupMenuItem(child: MongolText('ᠬᠣᠶᠠᠷ'), value: 2),
          MongolPopupMenuItem(child: MongolText('ᠭᠤᠷᠪᠠ'), value: 3),
        ],
        tooltip: 'vertical tooltip text',
        onSelected: (value) => print(value),
      ),
    ],
  ),
  body: Container(),
);

Buttons

There are Mongol equivalents to all of the Flutter buttons:

  • MongolTextButton
  • MongolOutlinedButton
  • MongolElevatedButton
  • MongolTextButton.icon
  • MongolOutlinedButton.icon
  • MongolElevatedButton.icon
  • MongolIconButton

The reason for the Mongol icon button is to provide a vertical tooltip that will appear for a longpress on mobile and for a mouse hover on desktop and web.

Other widgets

MongolAlertDialog

This alert dialog works mostly the same as the Flutter AlertDialog.

TODO

  • Recreate MongolTextField
  • Improve keyboard (this may be better as a separate package)
  • Various other text based widgets
  • Support WidgetSpan.
  • Add missing tests (currently commented out)
  • For MongolTextAlign.bottom don't count final space in line height
  • Add MongolSelectableText widget
Comments
  • can't run upgrade before

    can't run upgrade before

    flutter doctor: mongol: ^2.2.2

    Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 2.8.0, on macOS 11.6 20G165 darwin-x64, locale zh-Hans-US) [!] Android toolchain - develop for Android devices (Android SDK version 30.0.3) ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses [✓] Xcode - develop for iOS and macOS (Xcode 13.1) [✓] Chrome - develop for the web [✓] Android Studio (version 2020.3) [✓] Android Studio (version 4.1) [✓] IntelliJ IDEA Ultimate Edition (version 2021.2) [✓] IntelliJ IDEA Ultimate Edition (version 2020.3.2) [✓] IntelliJ IDEA Ultimate Edition (version 2020.3.2) [✓] IntelliJ IDEA Ultimate Edition (version 2020.3) [✓] VS Code (version 1.62.2) [✓] VS Code (version 1.55.2) [✓] Connected device (4 available)

    error info: Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 2.8.0, on macOS 11.6 20G165 darwin-x64, locale zh-Hans-US) [!] Android toolchain - develop for Android devices (Android SDK version 30.0.3) ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses [✓] Xcode - develop for iOS and macOS (Xcode 13.1) [✓] Chrome - develop for the web [✓] Android Studio (version 2020.3) [✓] Android Studio (version 4.1) [✓] IntelliJ IDEA Ultimate Edition (version 2021.2) [✓] IntelliJ IDEA Ultimate Edition (version 2020.3.2) [✓] IntelliJ IDEA Ultimate Edition (version 2020.3.2) [✓] IntelliJ IDEA Ultimate Edition (version 2020.3) [✓] VS Code (version 1.62.2) [✓] VS Code (version 1.55.2) [✓] Connected device (4 available) ../../../Documents/core_lib/flutter/.pub-cache/hosted/pub.dartlang.org/mongol-2.2.1/lib/src/editing/mongol_editable_text.dart:1036:7: Error: The non-abstract class 'MongolEditableTextState' is missing implementations for these members: - AutofillClient.autofill - TextSelectionDelegate.copySelection - TextSelectionDelegate.cutSelection - TextSelectionDelegate.pasteText - TextSelectionDelegate.selectAll Try to either - provide an implementation, - inherit an implementation from a superclass or mixin, - mark the class as abstract, or - provide a 'noSuchMethod' implementation.

    class MongolEditableTextState extends State<MongolEditableText>
          ^^^^^^^^^^^^^^^^^^^^^^^
    ../../../Documents/core_lib/flutter/packages/flutter/lib/src/services/autofill.dart:765:8: Context: 'AutofillClient.autofill' is defined here.
      void autofill(TextEditingValue newEditingValue);
           ^^^^^^^^
    ../../../Documents/core_lib/flutter/packages/flutter/lib/src/services/text_input.dart:985:8: Context: 'TextSelectionDelegate.copySelection' is defined here.
      void copySelection(SelectionChangedCause cause);
           ^^^^^^^^^^^^^
    ../../../Documents/core_lib/flutter/packages/flutter/lib/src/services/text_input.dart:965:8: Context: 'TextSelectionDelegate.cutSelection' is defined here.
      void cutSelection(SelectionChangedCause cause);
           ^^^^^^^^^^^^
    ../../../Documents/core_lib/flutter/packages/flutter/lib/src/services/text_input.dart:973:16: Context: 'TextSelectionDelegate.pasteText' is defined here.
      Future<void> pasteText(SelectionChangedCause cause);
                   ^^^^^^^^^
    ../../../Documents/core_lib/flutter/packages/flutter/lib/src/services/text_input.dart:979:8: Context: 'TextSelectionDelegate.selectAll' is defined here.
      void selectAll(SelectionChangedCause cause);
           ^^^^^^^^^
    ../../../Documents/core_lib/flutter/.pub-cache/hosted/pub.dartlang.org/mongol-2.2.1/lib/src/editing/mongol_editable_text.dart:2055:11: Error: The argument type 'AutofillConfiguration?' can't be assigned to the parameter type 'AutofillConfiguration' because 'AutofillConfiguration?' is nullable and 'AutofillConfiguration' isn't.
     - 'AutofillConfiguration' is from 'package:flutter/src/services/autofill.dart' ('../../../Documents/core_lib/flutter/packages/flutter/lib/src/services/autofill.dart').
              ? null
              ^
    ../../../Documents/core_lib/flutter/.pub-cache/hosted/pub.dartlang.org/mongol-2.2.1/lib/src/editing/mongol_editable_text.dart:2089:36: Error: Too few positional arguments: 2 required, 1 given.
            ? () => controls!.handleCut(this)
                                       ^
    ../../../Documents/core_lib/flutter/.pub-cache/hosted/pub.dartlang.org/mongol-2.2.1/lib/src/editing/text_selection/mongol_text_selection_controls.dart:59:52: Error: Too few positional arguments: 2 required, 1 given.
          handleCut: canCut(delegate) ? () => handleCut(delegate) : null,
    
    opened by peter100u 12
  • DefaultMongolTextEditingShortcuts Widget Cannot be Positioned in MongolEditableText Widget

    DefaultMongolTextEditingShortcuts Widget Cannot be Positioned in MongolEditableText Widget

    image

    DefaultMongolTextEditingShortcuts widget intercepts keyboard key events (such as the key up/down) and forwards to MongolEditableText's Actions Widget to handle key events. It switches the up/down key and the left/right key.

    However Focus widget cannot receive all key events when the Focus widget is positioned at the position in the figure above. It just only can handle the MongolEditableText's Actions widget unhandled key events.

    Flutter SDK puts the DefaultTextEditingShortcuts widget in the WidgetsApp widget, so the Focus widget can receive all key events.

    There are some solutions:

    • Remove the DefaultMongolTextEditingShortcuts widget from the MongolEditableText widget. Developers who use this library position the DefaultMongolTextEditingShortcuts widget right place. However, developers always care about the position of the DefaultMongolTextEditingShortcuts widget and also need to understand well Focus, Shortcuts, Actions, and so on.
    • Remove the DefaultMongolTextEditingShortcuts widget from the MongolEditableText widget. Then we make the rule: puts the DefaultMongolTextEditingShortcuts widget just after WidgetsApp, MaterialApp, or CupertinoApp. However, currently, it intercepts some key events and breaks the Flutter Sdk's DefaultTextEditingShortcuts and EditableText. We need to fix the DefaultMongolTextEditingShortcuts and MongolEditableText's Actions.
    • Remove the DefaultMongolTextEditingShortcuts class, and do not use it anymore. The MongolEditableText's Actions handle from the Flutter SDK's DefaultTextEditingShortcuts intents. However, we need to switch some concepts. Such as in the Flutter SDK's EditableText, ExtendSelectionByCharacterIntent means select text by character and ExtendSelectionVerticallyToAdjacentLineIntent means select text by line. However, in MongolEditableText. ExtendSelectionByCharacterIntent means select text by line and ExtendSelectionVerticallyToAdjacentLineIntent means select text by the character.

    I prefer the last solution. In this way, developers using this library don't have to care about more things. But it may be a long job. So do we use the first solution first and then work on the last one? Or any other ideas?

    opened by Satsrag 10
  • Found the solution: Flutter 2.5 update causes app to freeze if the cursor has to scroll out of view.

    Found the solution: Flutter 2.5 update causes app to freeze if the cursor has to scroll out of view.

    The issue occurred in paint(PaintingContext context, Offset offset) method of MongolRenderEditable class . The has issue code:

      @override
      void paint(PaintingContext context, Offset offset) {
        _layoutText(
            minHeight: constraints.minHeight, maxHeight: constraints.maxHeight);
        if (_hasVisualOverflow && clipBehavior != Clip.none) {
          _clipRectLayer = context.pushClipRect(
            needsCompositing,
            offset,
            Offset.zero & size,
            _paintContents,
            clipBehavior: clipBehavior,
            oldLayer: _clipRectLayer,
          );
        } else {
          _clipRectLayer = null;
          _paintContents(context, offset);
        }
        _paintHandleLayers(context, getEndpointsForSelection(selection!));
      }
    
      ClipRectLayer? _clipRectLayer;
    

    The solution code:

      @override
      void paint(PaintingContext context, Offset offset) {
        _layoutText(
            minHeight: constraints.minHeight, maxHeight: constraints.maxHeight);
        if (_hasVisualOverflow && clipBehavior != Clip.none) {
          _clipRectLayer.layer = context.pushClipRect(
            needsCompositing,
            offset,
            Offset.zero & size,
            _paintContents,
            clipBehavior: clipBehavior,
            oldLayer: _clipRectLayer.layer,
          );
        } else {
          _clipRectLayer.layer = null;
          _paintContents(context, offset);
        }
        _paintHandleLayers(context, getEndpointsForSelection(selection!));
      }
    
      final LayerHandle<ClipRectLayer> _clipRectLayer = LayerHandle<ClipRectLayer>();
    

    The _clipRectLayer has been disposed when call context.pushClipRect method. So use LayerHandle to prevent _clipRectLayer from disposing. The solution code copy from flutter source RenderEditable.

    opened by Satsrag 9
  • Bug: unable to move MongolTextField caret by tapping (iOS)

    Bug: unable to move MongolTextField caret by tapping (iOS)

    Hi @suragch, I believe there's a bug in the latest version that affects only ios devices.

    Issue Description

    Version: 2.0.1 (running on Flutter 2.2.2) Bug: Unable to move MongolTextField cursor caret by tapping with finger (on physical device) / clicking with mouse (on simulator).

    On Android it's working normally (Tested on emulator Nexus 5S API 25)

    Expected Behavior

    Able to move cursor caret by tapping / clicking. Previously it was working in version 1.1.0 (running on Flutter 2.0.6)

    Actual Behavior

    Unable to move cursor caret by tapping / clicking. Can still move by long clicking

    Steps to Reproduce

    Minimal reproducible code can be found at: https://github.com/leovinsen/mongol_flutter_bug

    1. Run the flutter app
    2. It will show a MongolTextField filled with pre-defined text.
    3. Tapping on anywhere on the textfield does not move the caret. However, long tapping / holding still works.

    My Environment

    • physical device iPhone SE 2020 running iOS 14.6
    • simulator Phone SE 2020 running iOS 14.5
    opened by leovinsen 6
  • Please export mongol_text_painter.dart

    Please export mongol_text_painter.dart

    I would like you to export mogol_text_painter.dart file. I am developing image editing app by this package, but I cannot use mongol_text_painter. So I customized the main.dart file but I don't want to customize original package because this package is upgraded continuously. Please export the mogol_text_painter.dart next version.

    opened by roberthook823 4
  • error with (MongolEditableTextState)

    error with (MongolEditableTextState)

    /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/mongol-1.1.0/lib/src/editing/mongol_editable_text.dart:1013:7: Error: The non-abstract class 'MongolEditableTextState' is missing implementations for these members:

    • TextSelectionDelegate.userUpdateTextEditingValue Try to either
    • provide an implementation,
    • inherit an implementation from a superclass or mixin,
    • mark the class as abstract, or
    • provide a 'noSuchMethod' implementation.

    class MongolEditableTextState extends State ^^^^^^^^^^^^^^^^^^^^^^^ /C:/src/flutter/packages/flutter/lib/src/services/text_input.dart:822:8: Context: 'TextSelectionDelegate.userUpdateTextEditingValue' is defined here. void userUpdateTextEditingValue(TextEditingValue value, SelectionChangedCause cause); ^^^^^^^^^^^^^^^^^^^^^^^^^^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/mongol-1.1.0/lib/src/editing/mongol_editable_text.dart:1983:8: Error: The method 'MongolEditableTextState.hideToolbar' has fewer positional arguments than those of overridden method 'TextSelectionDelegate.hideToolbar'. void hideToolbar() { ^ /C:/src/flutter/packages/flutter/lib/src/services/text_input.dart:829:8: Context: This is the overridden method ('hideToolbar'). void hideToolbar([bool hideHandles = true]); ^ /C:/src/flutter/.pub-cache/hosted/pub.dartlang.org/mongol-1.1.0/lib/src/editing/mongol_editable_text.dart:2156:43: Error: Required named parameter 'context' must be provided. return widget.controller.buildTextSpan( ^

    opened by Zolbayar8027 3
  • Remove DefaultMongolTextEditingShortcuts from MongolEditableTextState

    Remove DefaultMongolTextEditingShortcuts from MongolEditableTextState

    • Remove DefaultMongolTextEditingShortcuts to prevent it intercept keyboard event

    • If developers using this library need to switch up/down and left/right keys, insert DefaultMongolTextEditingShortcuts to WidgetsApp's builder. Use one of these.

      WidgetsApp(
         ...
         builder: (context, child) {
           return DefaultMongolTextEditingShortcuts(child: child);
         },
         ...
      )
      
      MaterialApp(
         ...
         builder: (context, child) {
           return DefaultMongolTextEditingShortcuts(child: child);
         },
         ...
      )
      
      CupertinoApp(
         ...
         builder: (context, child) {
           return DefaultMongolTextEditingShortcuts(child: child);
         },
         ...
      )
      

    This is the second solution that is mentioned in #33. The last solution is not working. Such as, in TextField, left/right+alt and up/down+meta will invoke ExtendSelectionToLineBreakIntent and up/down+alt will invoke ExtendSelectionToNextWordBoundaryIntent. In MongolTextField we will switch ExtendSelectionToLineBreakIntent and ExtendSelectionToNextWordBoundaryIntent to switch left/right+alt and up/down+alt. However, ExtendSelectionToLineBreakIntent also means pressing up/down+meta. This is a conflict and solving it is complex.

    opened by Satsrag 2
  • Using Actions and Shortcuts to Replace `RawKeyboard.instance.addListener(_handleKeyEvent)`

    Using Actions and Shortcuts to Replace `RawKeyboard.instance.addListener(_handleKeyEvent)`

    Using RawKeyboard.instance.addListener in MongolRenderEditable caused the Focus widget to fail to intercept keyboard events.

    In Flutter latest version, this is replaced with Actions and Shortcuts. Most of code are copied from Flutter source.

    There are still have some logic to test and discuss:

    • Implementation of computeLineMetrics method in MongolParagraph.
    • Find a way to swap up/down keys and left/right keys on Web.
    • Caret position is wrong when textAlign set to other MongolTextAlign.top.
    • Need further testing.
    opened by Satsrag 2
  • How to type sentences starting from the right going to the left

    How to type sentences starting from the right going to the left

    When I enter text into a MongolTextField, the current format is from left to right when I write a sentence, can I change the format so that the sentences start from the right going to the left?

    opened by naoyaono0102 2
  • The mongolian conent cannot render correctly on iOS simulator

    The mongolian conent cannot render correctly on iOS simulator

    企业微信20200705224245

    My environment: mac os big sur, iOS13.5 simulator, xcode11.5, AndroidStudio3.6.3

    The mongolian conent cannot render correctly on iOS simulator, but did render correctly on android simulator.

    What's difference between iOS and android platform? Can this problem be solved?

    opened by vicxia 2
  • Fix: crash when MongolTextField contain a line end with ' \n'

    Fix: crash when MongolTextField contain a line end with ' \n'

    https://user-images.githubusercontent.com/17843861/210082426-3fd91b76-8369-4b16-ae8f-fd269c842141.mov

    Fix: crash when MongolTextField contains a line end with space+linebreak(' \n') and press the left/right key.

    opened by Satsrag 1
  • MongolTextField: cursor moves to beginning for special characters

    MongolTextField: cursor moves to beginning for special characters

    In the image below you can see that the cursor moves to the beginning of the text field when it is actually at the MVS location.

    error

    Same thing happens for FVS characters.

    opened by suragch 0
  • MongolTextField: icon drawn in wrong location

    MongolTextField: icon drawn in wrong location

    The icon input decoration is drawn in the wrong location. It should be horizontally centered and have more padding before the input border:

    Screen Shot 2022-10-22 at 15 15 46

    The standard TextField looks like this:

    Screen Shot 2022-10-22 at 15 15 34
    opened by suragch 0
  • Resolve linter warnings

    Resolve linter warnings

    There are a number of linter warnings. These should be resolved.

    • 'hashValues' is deprecated and shouldn't be used. Use Object.hash() instead. This feature was deprecated in v3.1.0-0.0.pre.897. Try replacing the use of the deprecated member with the replacement.
    • Avoid leading underscores for local identifiers.
    • Sort child properties last in widget instance creations.
    • Avoid leading underscores for local identifiers.
    • A value for optional parameter 'child' isn't ever given.
    • Avoid using private types in public APIs.
    • 'accentColor' is deprecated and shouldn't be used. Use colorScheme.secondary instead. For more information, consult the migration guide at https://flutter.dev/docs/release/breaking-changes/theme-data-accent-properties#migration-guide. This feature was deprecated after v2.3.0-0.1.pre..
    • 'fixTextFieldOutlineLabel' is deprecated and shouldn't be used. This "fix" is now enabled by default. This feature was deprecated after v2.5.0-1.0.pre..
    • 'primaryColorBrightness' is deprecated and shouldn't be used. No longer used by the framework, please remove any reference to it. This feature was deprecated after v2.6.0-11.0.pre..
    • 'vsync' is deprecated and shouldn't be used. This field is now ignored. This feature was deprecated after v2.2.0-10.1.pre..
    • 'fadeDuration' is deprecated and shouldn't be used. Use SelectionOverlay.fadeDuration instead. This feature was deprecated after v2.12.0-4.1.pre..
    • TODOs
    • and more...
    opened by suragch 0
  • Translate MaterialLocalizations.of(context)

    Translate MaterialLocalizations.of(context)

    MaterialLocalizations.of(context) will give text that certain widgets use. Should these be translated into Mongolian and where should they be used? The DefaultMaterialLocalizations uses English.

    opened by suragch 0
Releases(v3.4.0)
  • v3.4.0(Jan 5, 2023)

    • Remove DefaultMongolTextEditingShortcuts from MongolEditableTextState (#35) (@Satsrag)
    • To switch the behavior of left/right and up/down keys in MongolEditableText, developers now need to add MongolTextEditingShortcuts at the top of the widget tree. See #33 for discussion.
    Source code(tar.gz)
    Source code(zip)
  • v3.3.1(Dec 31, 2022)

    [3.3.1] - 2022.12.31

    • Fix: crash when MongolTextField contain a line end with ' \n' (#34) (@Satsrag)

    [3.3.0] - 2022.11.29

    • Fix label problems on outlined input border with MongolOutlineInputBorder (#28).
    • Export TextAlignHorizontal for MongolTextField.

    [3.2.0] - 2022.10.22

    • Updating internal code to remove compiler warnings. Required minimum of Flutter 2.17.
    • Added example app demo for MongolTextField to show options for input decorations.
    • Export MongolRenderEditable to get cursor location (#31).

    [3.1.0] - 2022.09.13

    • Added MongolTextField back in with fixes. (@Satsrag)
    Source code(tar.gz)
    Source code(zip)
  • v3.0.2(Feb 10, 2022)

  • v3.0.1(Jan 10, 2022)

    [3.0.1] - 2022.01.10

    • Exported MongolTextPainter so that it is public now.

    [3.0.0] - 2021.12.18

    • Removed MongolTextField and related classes from the library. The Flutter 2.8 update broke the editing widgets again. Even if we fixed this break, there was still the major issue of crashing when scrolling MongolTextField. It is easier to remove MongolTextField now and start over from scratch, either with the Flutter text editing widgets or with something like SuperEditor.
    Source code(tar.gz)
    Source code(zip)
  • v2.2.1(Sep 20, 2021)

    • Fix the errors caused by the Flutter 2.5 update.
    • Removed lots of tests (unfortunately) because the Flutter 2.5 update broke something internally with the custom Flutter testing implementation for the Mongol widgets.
    • Fixed the buttons.
    • Known issue: MongolTextField still crashes when text content needs to scroll.
    Source code(tar.gz)
    Source code(zip)
  • v2.0.2(Jul 15, 2021)

  • v2.0.1(Jun 10, 2021)

  • v2.0.0(May 28, 2021)

    • Flutter 2.2 broke some of the internal workings of this package. This update fixes those.
    • This update increases the major version to 2 because an automatic update for projects still on Flutter 2.0 would probably break things.
    • There are no significant new features with this release, but there are numerous internal changes to match changes made to the Flutter text editing widgets.
    • There are several known issues with this release. Please open a GitHub issue if they are affecting your app.
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Mar 13, 2021)

    • Implemented MongolTextAlign (supports top, center, bottom, justify)
    • Known issue: Spaces after words are included in the measurements so MongolTextAlign.bottom aligns the space to the bottom and not the text itself.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Mar 6, 2021)

    • Null safe
    • Added MongolTextField and supporting classes
    • Since MongolTextField fills in the largest missing gap for Mongolian text rendering, this library will now be marked as 1.0.0. This signifies feature completeness though there are some known bugs and it would be good for another version to include some keyboards.
    • Filled in missing functionality in MongolParagraph and MongolTextPainter.
    Source code(tar.gz)
    Source code(zip)
  • v0.8.0-nullsafety.0(Nov 27, 2020)

  • v0.7.1(Oct 26, 2020)

  • v0.6.1(Oct 10, 2020)

    • Added static analysis options.
    • Fixed warnings and errors from the static analysis.
    • Implemented MongolTextPainter.getPositionForOffset with tests
    • Close MongolDialog on button click in demo app
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Oct 9, 2020)

    • Added MongolRichText with support for TextSpan and its substring text styles.
    • Added MongolText.rich constructor to support using a default font theme.
    • Implemented textScaleFactor. It existed before but didn't do anything.
    • Removed the default Menksoft font that was included with the library. This creates a bit more setup but makes the library smaller and allows developers to use any Mongolian font. Also removed MongolFont class.
    • Added documentation modified from the standard Flutter docs.
    • Changed the license to be in alignment with the Flutter BSD-3 license.
    • Updated the demos to include a keyboard and vertical TextField. These are not in the library yet, but should be fairly easy to reproduce by studying the demos.
    • Added more tests.
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(May 31, 2020)

  • v0.4.1(Feb 21, 2020)

  • v0.4.0(Feb 21, 2020)

  • v0.3.1(Jan 5, 2020)

  • v0.3.0(Nov 29, 2019)

  • v0.1.0(Nov 24, 2019)

  • v0.0.1(Nov 24, 2019)

a small script that converts adobe illustrator paths to dart for use in flutter

cpainterhelper A simple script that lets you convert adobe illustrator paths to code compatible with flutter's CustomPainter How to use it First set u

null 81 Aug 16, 2022
A flutter plugin for integrating Mobile Money Payments to your flutter apps

Add Mobile Money payments to your flutter apps using the FlutterWave api gateway. Features Recieve Payments through Mobile Money in Uganda Supports MT

null 5 Nov 9, 2022
Flutter OSM - OSM Plugin For Flutter Apps

flutter_osm_plugin osm plugin for flutter apps (only Android for now, iOS will b

null 1 Mar 29, 2022
Firebase + Flutter sample apps with code snippets, supported by comprehensive articles for each implementation.

FlutterFire Samples This repo is created to contain various sample apps demonstrating the integration of Firebase with Flutter. The final goal is to c

Souvik Biswas 186 Dec 24, 2022
A flutter clean architecture series, the way we build clean apps.

Flutter Clean Archeticture Series ?? "Making the world a better place" ✅ Full Articles You can check out the full Medium articles on devmuaz ✅ Branche

AbdulMuaz Aqeel 267 Jan 4, 2023
Examples showing how to use Rid in order to build Dart/Flutter apps integrated with Rust.

Examples showing how to use Rid in order to build Dart/Flutter apps integrated with Rust.

Thorsten Lorenz 205 Dec 24, 2022
A Flutter starter-kit for production-level apps.

Flutter Starter Introduction We wanted to take Flutter a step further and accelerate the process of building production-level apps. Presenting our sol

GeekyAnts 374 Dec 30, 2022
Learn how to incorporate Firebase into our Flutter apps

Flash Chat ⚡️ Our Goal The objective of this tutorial is to learn how to incorporate Firebase into our Flutter apps. We'll be using Firebase Cloud Fir

null 0 Oct 27, 2021
Cooking apps - Cooking App made using flutter framework

cooking_apps Cooking App made using flutter framework. This template app contain

Viraj Shah 1 Jan 24, 2022
Easy and Fast internationalization for your Flutter Apps

Easy and Fast internationalization for your Flutter Apps Why easy_localization? ?? Easy translations for many languages ?? Load translations as JSON,

Aye7 672 Dec 18, 2022
fl_heatmap - A heatmap build for Flutter apps

fl_heatmap - A heatmap build for Flutter apps

Timo Bähr 6 Sep 19, 2022
Google UI is an open-source UI library for developing cross-platform apps using Flutter with Material Design 2.0

Google UI Google UI is an open-source UI library for developing cross-platform apps using Flutter with "Material Design 2.0" Table of contents Install

Ed Sulaiman 25 Dec 24, 2022
A collection of sample apps that use Stream

Flutter samples Quick Links Register to get an API key for Stream Chat Flutter Chat Tutorial Chat UI Kit Flutter SDK Repo What is Stream? Stream allow

Stream 247 Dec 21, 2022
A set of counter apps made for #FlutterCounterChallenge2020

flutter_counter_challenge_2020 A set of counter apps made for #FlutterCounterChallenge2020. Run flutter create . inside the repository after cloning i

Romain Rastel 178 Dec 30, 2022
Ensiklopedi Multiplatform Apps

ensiklopedi A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if t

Azhar Rizki Zulma 5 Dec 9, 2021
Use dynamic and beautiful card view pagers (horizontal direction) to help you create great apps.

Use dynamic and beautiful card view pagers (horizontal direction) to help you create great apps. Preview Mobile Vertical Card Pager Web Web Link Insta

Jeongtae Kim 27 Dec 9, 2022
Demonstrate how to easily program Android apps on Gitpod

Developing Android apps on Gitpod This project is intended to demonstrate how to easily program Android apps on Gitpod. It is based on this guide and

James Cullum (Pseudonym) 10 Dec 8, 2022
Flutterbase taxi - A large variety of apps depend on map services.

Flutterbase taxi A large variety of apps depend on map services. The purpose of this project was to test Google Map Services in connection with Flutte

Yakiv Galkin 110 Dec 29, 2022
Flutter Coronavirus covid19 statistic App using Flutter widgets + bloc + rest api

Intro Corona virus ( covid 19 ) Statistic App on Flutter. The tech used: Flutter widgets + Flutter Bloc / Cubit + Rest Api Check the screenshot : P.S

Ihab Zaidi 8 Mar 13, 2022