diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b50563..f1bf923 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## [0.5.0] - 2020.5.31 + +- Added hit testing to MongolText and its associated classes so that a GestureDetector can be applied to it. +- Added the textScaleFactor parameter to MongolText. +- Added debugFillProperties() to various MongolText related classes. + ## [0.4.1] - 2020.2.21 - Change unsupported 2018 text theme items to 2014 version in MongolAlertDialog diff --git a/README.md b/README.md index bf12cf6..fddc184 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,8 @@ This alert dialog works mostly the same as the Flutter `AlertDialog`. - Add text styling and expose `MongolRichText`. - Rotate CJK and emoji characters to proper orientation +- Test textScaleFactor +- Add more widget testing and maybe Golden tests ## Related diff --git a/example/ios/Flutter/.last_build_id b/example/ios/Flutter/.last_build_id new file mode 100644 index 0000000..dd78d05 --- /dev/null +++ b/example/ios/Flutter/.last_build_id @@ -0,0 +1 @@ +5f846f478592c21f0cf999f1253bb25f \ No newline at end of file diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index a465556..a0b91e6 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -9,11 +9,7 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -27,8 +23,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, - 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -39,13 +33,11 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -58,8 +50,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, - 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -69,9 +59,7 @@ 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, @@ -203,7 +191,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -255,7 +243,6 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -331,7 +318,6 @@ }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -387,7 +373,6 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; diff --git a/example/lib/alert_dialog_demo.dart b/example/lib/demos/alert_dialog_demo.dart similarity index 100% rename from example/lib/alert_dialog_demo.dart rename to example/lib/demos/alert_dialog_demo.dart diff --git a/example/lib/demos/gesture_detector_demo.dart b/example/lib/demos/gesture_detector_demo.dart new file mode 100644 index 0000000..9101f65 --- /dev/null +++ b/example/lib/demos/gesture_detector_demo.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; +import 'package:mongol/mongol.dart'; + +/// This demo shows that MongolText can be resized with pinch to zoom. +class GestureDetectorDemo extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + body: Center( + child: Container( + color: Colors.blue[100], + child: SafeArea(child: GestureText()), + ), + ), + ); + } +} + +class GestureText extends StatefulWidget { + const GestureText({ + Key key, + this.child, + }) : super(key: key); + + final Widget child; + + @override + _GestureTextState createState() => _GestureTextState(); +} + +class _GestureTextState extends State { + double _fontSize = 100; + final double _baseFontSize = 20; + double _fontScale = 1; + double _baseFontScale = 1; + + @override + Widget build(BuildContext context) { + return GestureDetector( + onScaleStart: (ScaleStartDetails scaleStartDetails) { + _baseFontScale = _fontScale; + }, + onScaleUpdate: (ScaleUpdateDetails scaleUpdateDetails) { + setState(() { + _fontScale = + (_baseFontScale * scaleUpdateDetails.scale).clamp(0.5, 10.0); + _fontSize = _fontScale * _baseFontSize; + }); + }, + child: MongolText( + 'ᠮᠣᠩᠭᠣᠯ\nᠪᠢᠴᠢᠭ', + style: TextStyle(fontSize: _fontSize), + ), + ); + } +} diff --git a/example/lib/text_demo.dart b/example/lib/demos/text_demo.dart similarity index 100% rename from example/lib/text_demo.dart rename to example/lib/demos/text_demo.dart diff --git a/example/lib/main.dart b/example/lib/main.dart index 2ebbbc8..db57823 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:mongol_demo_app/text_demo.dart'; -import 'package:mongol_demo_app/alert_dialog_demo.dart'; + +import 'demos/alert_dialog_demo.dart'; +import 'demos/gesture_detector_demo.dart'; +import 'demos/text_demo.dart'; void main() => runApp(DemoApp()); @@ -25,25 +27,43 @@ class HomeScreen extends StatelessWidget { Widget build(BuildContext context) { return ListView( children: [ - ListTile( - title: Text('MongolText'), - onTap: () { - Navigator.push( - context, - MaterialPageRoute(builder: (context) => TextDemo()), - ); - }, + DemoTile( + title: 'MongolText', + destination: TextDemo(), + ), + DemoTile( + title: 'MongolText with GestureDetector', + destination: GestureDetectorDemo(), ), - ListTile( - title: Text('MongolAlertDialog'), - onTap: () { - Navigator.push( - context, - MaterialPageRoute(builder: (context) => AlertDialogDemo()), - ); - }, + DemoTile( + title: 'MongolAlertDialog', + destination: AlertDialogDemo(), ), ], ); } } + +class DemoTile extends StatelessWidget { + const DemoTile({ + Key key, + @required this.title, + @required this.destination, + }) : super(key: key); + + final String title; + final Widget destination; + + @override + Widget build(BuildContext context) { + return ListTile( + title: Text(title), + onTap: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => destination), + ); + }, + ); + } +} diff --git a/example/pubspec.lock b/example/pubspec.lock index 63978a8..15342cf 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -7,42 +7,42 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "2.0.11" + version: "2.0.13" args: dependency: transitive description: name: args url: "https://pub.dartlang.org" source: hosted - version: "1.5.2" + version: "1.6.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" + version: "2.4.1" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "2.0.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.1.3" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.11" + version: "1.14.12" convert: dependency: transitive description: @@ -56,7 +56,7 @@ packages: name: crypto url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.4" flutter: dependency: "direct main" description: flutter @@ -73,7 +73,7 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "2.1.4" + version: "2.1.12" matcher: dependency: transitive description: @@ -94,7 +94,7 @@ packages: path: ".." relative: true source: path - version: "0.4.1" + version: "0.5.0" path: dependency: transitive description: @@ -102,13 +102,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.6.4" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.dartlang.org" - source: hosted - version: "1.8.0+1" petitparser: dependency: transitive description: @@ -122,7 +115,7 @@ packages: name: quiver url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.1.3" sky_engine: dependency: transitive description: flutter @@ -134,7 +127,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.5.5" + version: "1.7.0" stack_trace: dependency: transitive description: @@ -169,7 +162,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.11" + version: "0.2.15" typed_data: dependency: transitive description: @@ -190,6 +183,6 @@ packages: name: xml url: "https://pub.dartlang.org" source: hosted - version: "3.5.0" + version: "3.6.1" sdks: dart: ">=2.6.0 <3.0.0" diff --git a/lib/mongol_rich_text.dart b/lib/mongol_rich_text.dart index a894ba2..04c3ed3 100644 --- a/lib/mongol_rich_text.dart +++ b/lib/mongol_rich_text.dart @@ -1,3 +1,5 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/widgets.dart'; import 'package:mongol/mongol_text_painter.dart'; @@ -7,32 +9,66 @@ class MongolRichText extends LeafRenderObjectWidget { /// The [text] argument must not be null. const MongolRichText({ Key key, - this.text, + @required this.text, + this.textScaleFactor = 1.0, }) : assert(text != null), + assert(textScaleFactor != null), super(key: key); /// The text to display in this widget. final TextSpan text; + /// Font pixels per logical pixel + final double textScaleFactor; + @override MongolRenderParagraph createRenderObject(BuildContext context) { - return MongolRenderParagraph(text); + return MongolRenderParagraph( + text, + textScaleFactor: textScaleFactor, + ); } @override void updateRenderObject( BuildContext context, MongolRenderParagraph renderObject) { - renderObject.text = text; + renderObject + ..text = text + ..textScaleFactor = textScaleFactor; + } + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties.add(StringProperty('text', text.toPlainText())); + properties.add( + DoubleProperty('textScaleFactor', textScaleFactor, defaultValue: 1.0)); } } -class MongolRenderParagraph extends RenderBox { +class MongolRenderParagraph extends RenderBox + with + ContainerRenderObjectMixin, + RenderBoxContainerDefaultsMixin, + RelayoutWhenSystemFontsChangeMixin { /// Creates a vertical text render object. /// /// The [text] argument must not be null. - MongolRenderParagraph(TextSpan text) - : assert(text != null), - _textPainter = MongolTextPainter(text: text); + MongolRenderParagraph( + TextSpan text, { + double textScaleFactor = 1.0, + }) : assert(text != null), + assert(textScaleFactor != null), + _textPainter = MongolTextPainter( + text: text, + textScaleFactor: textScaleFactor, + ); + + @override + void setupParentData(RenderBox child) { + if (child.parentData is! TextParentData) + child.parentData = TextParentData(); + } final MongolTextPainter _textPainter; @@ -55,6 +91,15 @@ class MongolRenderParagraph extends RenderBox { } } + double get textScaleFactor => _textPainter.textScaleFactor; + + set textScaleFactor(double value) { + assert(value != null); + if (_textPainter.textScaleFactor == value) return; + _textPainter.textScaleFactor = value; + markNeedsLayout(); + } + void _layoutText({ double minHeight = 0.0, double maxHeight = double.infinity, @@ -111,6 +156,22 @@ class MongolRenderParagraph extends RenderBox { return _textPainter.height; } + @override + bool hitTestSelf(Offset position) => true; + + @override + void handleEvent(PointerEvent event, BoxHitTestEntry entry) { + assert(debugHandleEvent(event, entry)); + if (event is! PointerDownEvent) return; + _layoutTextWithConstraints(constraints); + // final Offset offset = entry.localPosition; + // final TextPosition position = _textPainter.getPositionForOffset(offset); + // TODO: When supporting multiple spans, need to get span from painter. + final TextPosition position = TextPosition(offset: 0); + final TextSpan span = _textPainter.text.getSpanForPosition(position); + span?.recognizer?.addPointer(event); + } + @override void performLayout() { _layoutTextWithConstraints(constraints); @@ -121,6 +182,30 @@ class MongolRenderParagraph extends RenderBox { @override void paint(PaintingContext context, Offset offset) { _layoutTextWithConstraints(constraints); - _textPainter.paint(context.canvas, offset); + final Canvas canvas = context.canvas; + assert(() { + if (debugRepaintTextRainbowEnabled) { + final Paint paint = Paint()..color = debugCurrentRepaintColor.toColor(); + canvas.drawRect(offset & size, paint); + } + return true; + }()); + + _textPainter.paint(canvas, offset); + } + + @override + List debugDescribeChildren() { + return [ + text.toDiagnosticsNode( + name: 'text', style: DiagnosticsTreeStyle.transition) + ]; + } + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties.add( + DoubleProperty('textScaleFactor', textScaleFactor, defaultValue: 1.0)); } } diff --git a/lib/mongol_text.dart b/lib/mongol_text.dart index 5469499..f7ce406 100644 --- a/lib/mongol_text.dart +++ b/lib/mongol_text.dart @@ -1,3 +1,4 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:mongol/mongol_font.dart'; @@ -8,6 +9,7 @@ class MongolText extends StatelessWidget { this.data, { Key key, this.style, + this.textScaleFactor, }) : assert(data != null, 'The data cannot be null.'), super(key: key); @@ -18,6 +20,9 @@ class MongolText extends StatelessWidget { /// style will be used. final TextStyle style; + /// Font pixels per logical pixel + final double textScaleFactor; + static const TextStyle _defaultMongolTextStyle = TextStyle(fontFamily: MongolFont.qagan, fontSize: 24.0); @@ -35,7 +40,17 @@ class MongolText extends StatelessWidget { text: data, style: effectiveTextStyle, ), + textScaleFactor: textScaleFactor ?? MediaQuery.textScaleFactorOf(context), ); return result; } + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties.add(StringProperty('data', data, showName: false)); + style?.debugFillProperties(properties); + properties.add( + DoubleProperty('textScaleFactor', textScaleFactor, defaultValue: 1.0)); + } } diff --git a/lib/mongol_text_painter.dart b/lib/mongol_text_painter.dart index e58c930..71e6a70 100644 --- a/lib/mongol_text_painter.dart +++ b/lib/mongol_text_painter.dart @@ -7,8 +7,11 @@ import 'package:mongol/mongol_paragraph.dart'; class MongolTextPainter { MongolTextPainter({ TextSpan text, + double textScaleFactor = 1.0, }) : assert(text == null || text.debugAssertIsValid()), - _text = text; + assert(textScaleFactor != null), + _text = text, + _textScaleFactor = textScaleFactor; MongolParagraph _paragraph; bool _needsLayout = true; @@ -24,14 +27,34 @@ class MongolTextPainter { _needsLayout = true; } + double get textScaleFactor => _textScaleFactor; + double _textScaleFactor; + + set textScaleFactor(double value) { + assert(value != null); + if (_textScaleFactor == value) return; + _textScaleFactor = value; + _paragraph = null; + _needsLayout = true; + } + ui.ParagraphStyle _createParagraphStyle() { - return ui.ParagraphStyle( - textAlign: TextAlign.start, - textDirection: TextDirection.ltr, - maxLines: null, - ellipsis: null, - locale: null, - ); + return _text.style?.getParagraphStyle( + textAlign: TextAlign.start, + textDirection: TextDirection.ltr, + textScaleFactor: textScaleFactor, + maxLines: null, + ellipsis: null, + locale: null, + strutStyle: null, + ) ?? + ui.ParagraphStyle( + textAlign: TextAlign.start, + textDirection: TextDirection.ltr, + maxLines: null, + ellipsis: null, + locale: null, + ); } double _applyFloatingPointHack(double layoutValue) { @@ -105,6 +128,14 @@ class MongolTextPainter { } void paint(Canvas canvas, Offset offset) { + assert(() { + if (_needsLayout) { + throw FlutterError( + 'TextPainter.paint called when text geometry was not yet calculated.\n' + 'Please call layout() before paint() to position the text before painting it.'); + } + return true; + }()); _paragraph.draw(canvas, offset); } } diff --git a/pubspec.lock b/pubspec.lock index 95e6141..97283e8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,42 +7,42 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "2.0.11" + version: "2.0.13" args: dependency: transitive description: name: args url: "https://pub.dartlang.org" source: hosted - version: "1.5.2" + version: "1.6.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" + version: "2.4.1" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "2.0.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.1.3" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.11" + version: "1.14.12" convert: dependency: transitive description: @@ -56,7 +56,7 @@ packages: name: crypto url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.4" flutter: dependency: "direct main" description: flutter @@ -73,7 +73,7 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "2.1.4" + version: "2.1.12" matcher: dependency: transitive description: @@ -95,13 +95,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.6.4" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.dartlang.org" - source: hosted - version: "1.8.0+1" petitparser: dependency: transitive description: @@ -115,7 +108,7 @@ packages: name: quiver url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.1.3" sky_engine: dependency: transitive description: flutter @@ -127,7 +120,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.5.5" + version: "1.7.0" stack_trace: dependency: transitive description: @@ -162,7 +155,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.11" + version: "0.2.15" typed_data: dependency: transitive description: @@ -183,6 +176,6 @@ packages: name: xml url: "https://pub.dartlang.org" source: hosted - version: "3.5.0" + version: "3.6.1" sdks: dart: ">=2.6.0 <3.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index ebf4ad0..b4d5ef1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: mongol description: This package provides Flutter widgets to display vertical Mongolian. -version: 0.4.1 +version: 0.5.0 homepage: https://github.com/suragch/mongol environment: