Update changelog and pubspec for version bump (#154)
diff --git a/packages/flutter_markdown/CHANGELOG.md b/packages/flutter_markdown/CHANGELOG.md
index 7cda4a9..68dba14 100644
--- a/packages/flutter_markdown/CHANGELOG.md
+++ b/packages/flutter_markdown/CHANGELOG.md
@@ -1,3 +1,16 @@
+## 0.3.1
+
+ * Expose `tableColumnWidth`
+ * Add `MarkdownStyleSheet.fromCupertinoTheme`
+ * Fix `MarkdownStyleSheet.blockquote`
+ * Flutter for web support
+ * Add physic and shrinkWrap to Markdown widget
+ * Add MarkdownBody.fitContent
+ * Support select text to copy
+ * Fix list bullet alignment
+ * HTML unescape URIs (temporary workaround for [dart-lang/markdown #272](https://github.com/dart-lang/markdown/issues/272))
+ * Rebuilt `example/android` and `example/ios` directories
+
## 0.3.0
* Supporting GitHub flavoured Markdown
@@ -6,44 +19,44 @@
## 0.2.0
-* Updated environment sdk constraints to make the package
- Dart 2 compatible. As a result, usage of this version and higher
- requires a Dart 2 SDK.
+ * Updated environment sdk constraints to make the package
+ Dart 2 compatible. As a result, usage of this version and higher
+ requires a Dart 2 SDK.
## 0.1.6
-* Updated `markdown` dependency.
+ * Updated `markdown` dependency.
## 0.1.5
-* Add `mockito` as a dev dependency. Eliminate use of `package:http`, which
- is no longer part of Flutter.
+ * Add `mockito` as a dev dependency. Eliminate use of `package:http`, which
+ is no longer part of Flutter.
## 0.1.4
-* Add `li` style to bullets
+ * Add `li` style to bullets
## 0.1.3
-* Add `path` and `http` as declared dependencies in `pubspec.yaml`
+ * Add `path` and `http` as declared dependencies in `pubspec.yaml`
## 0.1.2
-* Add support for horizontal rules.
-* Fix the `onTap` callback on images nested in hyperlinks
+ * Add support for horizontal rules.
+ * Fix the `onTap` callback on images nested in hyperlinks
## 0.1.1
-* Add support for local file paths in image links. Make sure to set the
- `imageDirectory` property to specify the base directory containing the image
- files.
+ * Add support for local file paths in image links. Make sure to set the
+ `imageDirectory` property to specify the base directory containing the image
+ files.
## 0.1.0
-* Roll the dependency on `markdown` to 1.0.0
-* Add a test and example for image links
-* Fix the `onTap` callback on hyperlinks
+ * Roll the dependency on `markdown` to 1.0.0
+ * Add a test and example for image links
+ * Fix the `onTap` callback on hyperlinks
## 0.0.9
-* First published version
+ * First published version
diff --git a/packages/flutter_markdown/lib/src/_functions_io.dart b/packages/flutter_markdown/lib/src/_functions_io.dart
index 40819a7..c4b99d1 100644
--- a/packages/flutter_markdown/lib/src/_functions_io.dart
+++ b/packages/flutter_markdown/lib/src/_functions_io.dart
@@ -11,8 +11,7 @@
import 'style_sheet.dart';
import 'widget.dart';
-typedef Widget ImageBuilder(
- Uri uri, String imageDirectory, double width, double height);
+typedef Widget ImageBuilder(Uri uri, String imageDirectory, double width, double height);
final ImageBuilder kDefaultImageBuilder = (
Uri uri,
@@ -29,9 +28,7 @@
} else if (uri.scheme == "resource") {
return Image.asset(uri.path, width: width, height: height);
} else {
- Uri fileUri = imageDirectory != null
- ? Uri.parse(imageDirectory + uri.toString())
- : uri;
+ Uri fileUri = imageDirectory != null ? Uri.parse(imageDirectory + uri.toString()) : uri;
if (fileUri.scheme == 'http' || fileUri.scheme == 'https') {
return Image.network(fileUri.toString(), width: width, height: height);
} else {
@@ -40,8 +37,7 @@
}
};
-final MarkdownStyleSheet Function(BuildContext, MarkdownStyleSheetBaseTheme)
- kFallbackStyle = (
+final MarkdownStyleSheet Function(BuildContext, MarkdownStyleSheetBaseTheme) kFallbackStyle = (
BuildContext context,
MarkdownStyleSheetBaseTheme baseTheme,
) {
diff --git a/packages/flutter_markdown/lib/src/_functions_web.dart b/packages/flutter_markdown/lib/src/_functions_web.dart
index 90b276e..568e142 100644
--- a/packages/flutter_markdown/lib/src/_functions_web.dart
+++ b/packages/flutter_markdown/lib/src/_functions_web.dart
@@ -12,8 +12,7 @@
import 'style_sheet.dart';
import 'widget.dart';
-typedef Widget ImageBuilder(
- Uri uri, String imageDirectory, double width, double height);
+typedef Widget ImageBuilder(Uri uri, String imageDirectory, double width, double height);
final ImageBuilder kDefaultImageBuilder = (
Uri uri,
@@ -40,8 +39,7 @@
}
};
-final MarkdownStyleSheet Function(BuildContext, MarkdownStyleSheetBaseTheme)
- kFallbackStyle = (
+final MarkdownStyleSheet Function(BuildContext, MarkdownStyleSheetBaseTheme) kFallbackStyle = (
BuildContext context,
MarkdownStyleSheetBaseTheme baseTheme,
) {
diff --git a/packages/flutter_markdown/lib/src/builder.dart b/packages/flutter_markdown/lib/src/builder.dart
index e8b28d1..949a821 100644
--- a/packages/flutter_markdown/lib/src/builder.dart
+++ b/packages/flutter_markdown/lib/src/builder.dart
@@ -234,9 +234,7 @@
if (current.children.isNotEmpty) {
child = Column(
- crossAxisAlignment: fitContent
- ? CrossAxisAlignment.start
- : CrossAxisAlignment.stretch,
+ crossAxisAlignment: fitContent ? CrossAxisAlignment.start : CrossAxisAlignment.stretch,
children: current.children,
);
} else {
@@ -458,9 +456,7 @@
List<Widget> _mergeInlineChildren(List<Widget> children) {
List<Widget> mergedTexts = <Widget>[];
for (Widget child in children) {
- if (mergedTexts.isNotEmpty &&
- mergedTexts.last is RichText &&
- child is RichText) {
+ if (mergedTexts.isNotEmpty && mergedTexts.last is RichText && child is RichText) {
RichText previous = mergedTexts.removeLast();
TextSpan previousTextSpan = previous.text;
List<TextSpan> children = previousTextSpan.children != null
diff --git a/packages/flutter_markdown/lib/src/style_sheet.dart b/packages/flutter_markdown/lib/src/style_sheet.dart
index ea678b2..87ad589 100644
--- a/packages/flutter_markdown/lib/src/style_sheet.dart
+++ b/packages/flutter_markdown/lib/src/style_sheet.dart
@@ -314,8 +314,7 @@
blockquoteDecoration: blockquoteDecoration ?? this.blockquoteDecoration,
codeblockPadding: codeblockPadding ?? this.codeblockPadding,
codeblockDecoration: codeblockDecoration ?? this.codeblockDecoration,
- horizontalRuleDecoration:
- horizontalRuleDecoration ?? this.horizontalRuleDecoration,
+ horizontalRuleDecoration: horizontalRuleDecoration ?? this.horizontalRuleDecoration,
textScaleFactor: textScaleFactor ?? this.textScaleFactor,
);
}
diff --git a/packages/flutter_markdown/lib/src/widget.dart b/packages/flutter_markdown/lib/src/widget.dart
index da1ebaa..3ef3e78 100644
--- a/packages/flutter_markdown/lib/src/widget.dart
+++ b/packages/flutter_markdown/lib/src/widget.dart
@@ -127,8 +127,7 @@
_MarkdownWidgetState createState() => _MarkdownWidgetState();
}
-class _MarkdownWidgetState extends State<MarkdownWidget>
- implements MarkdownBuilderDelegate {
+class _MarkdownWidgetState extends State<MarkdownWidget> implements MarkdownBuilderDelegate {
List<Widget> _children;
final List<GestureRecognizer> _recognizers = <GestureRecognizer>[];
@@ -141,8 +140,7 @@
@override
void didUpdateWidget(MarkdownWidget oldWidget) {
super.didUpdateWidget(oldWidget);
- if (widget.data != oldWidget.data ||
- widget.styleSheet != oldWidget.styleSheet) {
+ if (widget.data != oldWidget.data || widget.styleSheet != oldWidget.styleSheet) {
_parseMarkdown();
}
}
@@ -154,10 +152,8 @@
}
void _parseMarkdown() {
- final MarkdownStyleSheet fallbackStyleSheet =
- kFallbackStyle(context, widget.styleSheetTheme);
- final MarkdownStyleSheet styleSheet =
- fallbackStyleSheet.merge(widget.styleSheet);
+ final MarkdownStyleSheet fallbackStyleSheet = kFallbackStyle(context, widget.styleSheetTheme);
+ final MarkdownStyleSheet styleSheet = fallbackStyleSheet.merge(widget.styleSheet);
_disposeRecognizers();
@@ -168,20 +164,20 @@
encodeHtml: false,
);
final MarkdownBuilder builder = MarkdownBuilder(
- delegate: this,
- selectable: widget.selectable,
- styleSheet: styleSheet,
- imageDirectory: widget.imageDirectory,
- imageBuilder: widget.imageBuilder,
- checkboxBuilder: widget.checkboxBuilder,
- fitContent: widget.fitContent);
+ delegate: this,
+ selectable: widget.selectable,
+ styleSheet: styleSheet,
+ imageDirectory: widget.imageDirectory,
+ imageBuilder: widget.imageBuilder,
+ checkboxBuilder: widget.checkboxBuilder,
+ fitContent: widget.fitContent,
+ );
_children = builder.build(document.parseLines(lines));
}
void _disposeRecognizers() {
if (_recognizers.isEmpty) return;
- final List<GestureRecognizer> localRecognizers =
- List<GestureRecognizer>.from(_recognizers);
+ final List<GestureRecognizer> localRecognizers = List<GestureRecognizer>.from(_recognizers);
_recognizers.clear();
for (GestureRecognizer recognizer in localRecognizers) recognizer.dispose();
}
@@ -259,8 +255,7 @@
if (children.length == 1) return children.single;
return Column(
mainAxisSize: shrinkWrap ? MainAxisSize.min : MainAxisSize.max,
- crossAxisAlignment:
- fitContent ? CrossAxisAlignment.start : CrossAxisAlignment.stretch,
+ crossAxisAlignment: fitContent ? CrossAxisAlignment.start : CrossAxisAlignment.stretch,
children: children,
);
}
diff --git a/packages/flutter_markdown/pubspec.yaml b/packages/flutter_markdown/pubspec.yaml
index fca2515..72a08c1 100644
--- a/packages/flutter_markdown/pubspec.yaml
+++ b/packages/flutter_markdown/pubspec.yaml
@@ -2,7 +2,7 @@
author: Flutter Authors <flutter-dev@googlegroups.com>
description: A Markdown renderer for Flutter.
homepage: https://github.com/flutter/flutter_markdown
-version: 0.3.0
+version: 0.3.1
dependencies:
flutter:
diff --git a/packages/flutter_markdown/test/flutter_markdown_test.dart b/packages/flutter_markdown/test/flutter_markdown_test.dart
index b257853..2432a48 100644
--- a/packages/flutter_markdown/test/flutter_markdown_test.dart
+++ b/packages/flutter_markdown/test/flutter_markdown_test.dart
@@ -23,8 +23,7 @@
await tester.pumpWidget(_boilerplate(const MarkdownBody(data: 'Hello')));
final Iterable<Widget> widgets = tester.allWidgets;
- _expectWidgetTypes(
- widgets, <Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
+ _expectWidgetTypes(widgets, <Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
_expectTextStrings(widgets, <String>['Hello']);
});
@@ -32,8 +31,7 @@
await tester.pumpWidget(_boilerplate(const MarkdownBody(data: '# Header')));
final Iterable<Widget> widgets = tester.allWidgets;
- _expectWidgetTypes(
- widgets, <Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
+ _expectWidgetTypes(widgets, <Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
_expectTextStrings(widgets, <String>['Header']);
});
@@ -45,8 +43,7 @@
});
testWidgets('Scrollable code block', (WidgetTester tester) async {
- const String data =
- '```\nvoid main() {\n print(\'Hello World!\');\n}\n```';
+ const String data = '```\nvoid main() {\n print(\'Hello World!\');\n}\n```';
await tester.pumpWidget(_boilerplate(MediaQuery(
data: MediaQueryData(),
@@ -54,27 +51,22 @@
)));
final Iterable<Widget> widgets = tester.allWidgets;
- expect(widgets.where((Widget widget) => widget is SingleChildScrollView),
- isNotEmpty);
+ expect(widgets.where((Widget widget) => widget is SingleChildScrollView), isNotEmpty);
});
testWidgets('Strikethrough', (WidgetTester tester) async {
- await tester.pumpWidget(
- _boilerplate(const MarkdownBody(data: '~~strikethrough~~')));
+ await tester.pumpWidget(_boilerplate(const MarkdownBody(data: '~~strikethrough~~')));
final Iterable<Widget> widgets = tester.allWidgets;
- _expectWidgetTypes(
- widgets, <Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
+ _expectWidgetTypes(widgets, <Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
_expectTextStrings(widgets, <String>['strikethrough']);
});
testWidgets('Line break', (WidgetTester tester) async {
- await tester
- .pumpWidget(_boilerplate(const MarkdownBody(data: 'line 1 \nline 2')));
+ await tester.pumpWidget(_boilerplate(const MarkdownBody(data: 'line 1 \nline 2')));
final Iterable<Widget> widgets = tester.allWidgets;
- _expectWidgetTypes(
- widgets, <Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
+ _expectWidgetTypes(widgets, <Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
_expectTextStrings(widgets, <String>['line 1\nline 2']);
});
@@ -151,8 +143,7 @@
await tester.pumpWidget(_boilerplate(const MarkdownBody(data: '-----')));
final Iterable<Widget> widgets = tester.allWidgets;
- _expectWidgetTypes(
- widgets, <Type>[Directionality, MarkdownBody, DecoratedBox, SizedBox]);
+ _expectWidgetTypes(widgets, <Type>[Directionality, MarkdownBody, DecoratedBox, SizedBox]);
});
testWidgets('Scrollable wrapping', (WidgetTester tester) async {
@@ -188,8 +179,7 @@
expect(tapResult, 'href');
});
- testWidgets('should work with nested elements',
- (WidgetTester tester) async {
+ testWidgets('should work with nested elements', (WidgetTester tester) async {
final List<String> tapResults = <String>[];
await tester.pumpWidget(_boilerplate(Markdown(
data: '[Link `with nested code` Text](href)',
@@ -224,8 +214,7 @@
onTapLink: (value) => tapResults.add(value),
)));
- final RichText textWidget =
- tester.widgetList(find.byType(RichText)).first;
+ final RichText textWidget = tester.widgetList(find.byType(RichText)).first;
final TextSpan span = textWidget.text;
final List<Type> gestureRecognizerTypes = <Type>[];
@@ -273,8 +262,7 @@
});
testWidgets('should work with a link', (WidgetTester tester) async {
- await tester.pumpWidget(
- _boilerplate(const Markdown(data: '')));
+ await tester.pumpWidget(_boilerplate(const Markdown(data: '')));
final Image image = tester.widget(find.byType(Image));
final NetworkImage networkImage = image.image;
@@ -283,41 +271,35 @@
expect(image.height, 50);
});
- testWidgets('should work with relative remote image',
- (WidgetTester tester) async {
+ testWidgets('should work with relative remote image', (WidgetTester tester) async {
await tester.pumpWidget(_boilerplate(const Markdown(
data: '',
imageDirectory: 'http://localhost',
)));
final Iterable<Widget> widgets = tester.allWidgets;
- final Image image =
- widgets.firstWhere((Widget widget) => widget is Image);
+ final Image image = widgets.firstWhere((Widget widget) => widget is Image);
expect(image.image is NetworkImage, isTrue);
expect((image.image as NetworkImage).url, 'http://localhost/img.png');
});
- testWidgets('should not escape ampersands in links',
- (WidgetTester tester) async {
+ testWidgets('should not escape ampersands in links', (WidgetTester tester) async {
await tester.pumpWidget(_boilerplate(const Markdown(
data:
'')));
- final Image image =
- tester.allWidgets.firstWhere((Widget widget) => widget is Image);
+ final Image image = tester.allWidgets.firstWhere((Widget widget) => widget is Image);
final NetworkImage networkImage = image.image;
expect(networkImage.url,
'https://preview.redd.it/sg3q5cuedod31.jpg?width=640&crop=smart&auto=webp&s=497e6295e0c0fc2ce7df5a324fe1acd7b5a5264f');
});
testWidgets('local files should be files', (WidgetTester tester) async {
- await tester
- .pumpWidget(_boilerplate(const Markdown(data: '')));
+ await tester.pumpWidget(_boilerplate(const Markdown(data: '')));
final Iterable<Widget> widgets = tester.allWidgets;
- final Image image =
- widgets.firstWhere((Widget widget) => widget is Image);
+ final Image image = widgets.firstWhere((Widget widget) => widget is Image);
expect(image.image is FileImage, isTrue);
});
@@ -328,17 +310,14 @@
)));
final Iterable<Widget> widgets = tester.allWidgets;
- final Image image =
- widgets.firstWhere((Widget widget) => widget is Image);
+ final Image image = widgets.firstWhere((Widget widget) => widget is Image);
expect(image.image is AssetImage, isTrue);
expect((image.image as AssetImage).assetName, 'assets/logo.png');
});
- testWidgets('should work with local image files',
- (WidgetTester tester) async {
- await tester.pumpWidget(
- _boilerplate(const Markdown(data: '')));
+ testWidgets('should work with local image files', (WidgetTester tester) async {
+ await tester.pumpWidget(_boilerplate(const Markdown(data: '')));
final Image image = tester.widget(find.byType(Image));
final FileImage fileImage = image.image;
@@ -347,10 +326,8 @@
expect(image.height, 50);
});
- testWidgets('should show properly next to text',
- (WidgetTester tester) async {
- await tester.pumpWidget(
- _boilerplate(const Markdown(data: 'Hello ')));
+ testWidgets('should show properly next to text', (WidgetTester tester) async {
+ await tester.pumpWidget(_boilerplate(const Markdown(data: 'Hello ')));
final RichText richText = tester.widget(find.byType(RichText));
TextSpan textSpan = richText.text;
@@ -358,16 +335,14 @@
expect(textSpan.style, isNotNull);
});
- testWidgets('should work when nested in a link',
- (WidgetTester tester) async {
+ testWidgets('should work when nested in a link', (WidgetTester tester) async {
final List<String> tapResults = <String>[];
await tester.pumpWidget(_boilerplate(Markdown(
data: '[](href)',
onTapLink: (value) => tapResults.add(value),
)));
- final GestureDetector detector =
- tester.widget(find.byType(GestureDetector));
+ final GestureDetector detector = tester.widget(find.byType(GestureDetector));
detector.onTap();
@@ -375,16 +350,14 @@
expect(tapResults, everyElement('href'));
});
- testWidgets('should work when nested in a link with text',
- (WidgetTester tester) async {
+ testWidgets('should work when nested in a link with text', (WidgetTester tester) async {
final List<String> tapResults = <String>[];
await tester.pumpWidget(_boilerplate(Markdown(
data: '[Text before  text after](href)',
onTapLink: (value) => tapResults.add(value),
)));
- final GestureDetector detector =
- tester.widget(find.byType(GestureDetector));
+ final GestureDetector detector = tester.widget(find.byType(GestureDetector));
detector.onTap();
final Iterable<RichText> texts = tester.widgetList(find.byType(RichText));
@@ -408,8 +381,7 @@
expect(tapResults, everyElement('href'));
});
- testWidgets('should work alongside different links',
- (WidgetTester tester) async {
+ testWidgets('should work alongside different links', (WidgetTester tester) async {
final List<String> tapResults = <String>[];
await tester.pumpWidget(_boilerplate(Markdown(
data:
@@ -422,8 +394,7 @@
final TextSpan firstSpan = firstTextWidget.text;
(firstSpan.recognizer as TapGestureRecognizer).onTap();
- final GestureDetector detector =
- tester.widget(find.byType(GestureDetector));
+ final GestureDetector detector = tester.widget(find.byType(GestureDetector));
detector.onTap();
final RichText lastTextWidget = texts.last;
@@ -449,8 +420,7 @@
await tester.pumpWidget(_boilerplate(const MarkdownBody(data: data)));
final Iterable<Widget> widgets = tester.allWidgets;
- _expectTextStrings(
- widgets, <String>['Header 1', 'Header 2', 'Col 1', 'Col 2']);
+ _expectTextStrings(widgets, <String>['Header 1', 'Header 2', 'Col 1', 'Col 2']);
});
testWidgets('work without the outer pipes', (WidgetTester tester) async {
@@ -458,16 +428,14 @@
await tester.pumpWidget(_boilerplate(const MarkdownBody(data: data)));
final Iterable<Widget> widgets = tester.allWidgets;
- _expectTextStrings(
- widgets, <String>['Header 1', 'Header 2', 'Col 1', 'Col 2']);
+ _expectTextStrings(widgets, <String>['Header 1', 'Header 2', 'Col 1', 'Col 2']);
});
testWidgets('should work with alignments', (WidgetTester tester) async {
const String data = '|Header 1|Header 2|\n|:----:|----:|\n|Col 1|Col 2|';
await tester.pumpWidget(_boilerplate(const MarkdownBody(data: data)));
- final Iterable<DefaultTextStyle> styles =
- tester.widgetList(find.byType(DefaultTextStyle));
+ final Iterable<DefaultTextStyle> styles = tester.widgetList(find.byType(DefaultTextStyle));
expect(styles.first.textAlign, TextAlign.center);
expect(styles.last.textAlign, TextAlign.right);
@@ -478,15 +446,13 @@
await tester.pumpWidget(_boilerplate(MarkdownBody(data: data)));
final Iterable<Widget> widgets = tester.allWidgets;
- final RichText richText =
- widgets.lastWhere((Widget widget) => widget is RichText);
+ final RichText richText = widgets.lastWhere((Widget widget) => widget is RichText);
_expectTextStrings(widgets, <String>['Header', 'italic']);
expect(richText.text.style.fontStyle, FontStyle.italic);
});
- testWidgets('should work next to other tables',
- (WidgetTester tester) async {
+ testWidgets('should work next to other tables', (WidgetTester tester) async {
const String data = '|first header|\n|----|\n|first col|\n\n'
'|second header|\n|----|\n|second col|';
await tester.pumpWidget(_boilerplate(const MarkdownBody(data: data)));
@@ -496,19 +462,16 @@
expect(tables.length, 2);
});
- testWidgets('column width should follow stylesheet',
- (WidgetTester tester) async {
+ testWidgets('column width should follow stylesheet', (WidgetTester tester) async {
final ThemeData theme = ThemeData.light().copyWith(textTheme: textTheme);
const String data = '|Header|\n|----|\n|Column|';
const FixedColumnWidth columnWidth = FixedColumnWidth(100);
- final MarkdownStyleSheet style =
- MarkdownStyleSheet.fromTheme(theme).copyWith(
+ final MarkdownStyleSheet style = MarkdownStyleSheet.fromTheme(theme).copyWith(
tableColumnWidth: columnWidth,
);
- await tester.pumpWidget(
- _boilerplate(MarkdownBody(data: data, styleSheet: style)));
+ await tester.pumpWidget(_boilerplate(MarkdownBody(data: data, styleSheet: style)));
final Table table = tester.widget(find.byType(Table));
@@ -517,21 +480,17 @@
});
group('Uri data scheme', () {
- testWidgets('should work with image in uri data scheme',
- (WidgetTester tester) async {
+ testWidgets('should work with image in uri data scheme', (WidgetTester tester) async {
await tester.pumpWidget(_boilerplate(const Markdown(
- data:
- '',
+ data: '',
)));
final Iterable<Widget> widgets = tester.allWidgets;
- final Image image =
- widgets.firstWhere((Widget widget) => widget is Image);
+ final Image image = widgets.firstWhere((Widget widget) => widget is Image);
expect(image.image.runtimeType, MemoryImage);
});
- testWidgets('should work with base64 text in uri data scheme',
- (WidgetTester tester) async {
+ testWidgets('should work with base64 text in uri data scheme', (WidgetTester tester) async {
const String imageData = '';
await tester.pumpWidget(_boilerplate(const Markdown(data: imageData)));
@@ -540,8 +499,7 @@
expect(widget.data, 'Flutter');
});
- testWidgets('should work with text in uri data scheme',
- (WidgetTester tester) async {
+ testWidgets('should work with text in uri data scheme', (WidgetTester tester) async {
const String imageData = '';
await tester.pumpWidget(_boilerplate(const Markdown(data: imageData)));
@@ -550,8 +508,7 @@
expect(widget.data, 'Hello, Flutter');
});
- testWidgets('should work with empty uri data scheme',
- (WidgetTester tester) async {
+ testWidgets('should work with empty uri data scheme', (WidgetTester tester) async {
const String imageData = '';
await tester.pumpWidget(_boilerplate(const Markdown(data: imageData)));
@@ -567,8 +524,7 @@
)));
final Iterable<Widget> widgets = tester.allWidgets;
- final SizedBox widget =
- widgets.firstWhere((Widget widget) => widget is SizedBox);
+ final SizedBox widget = widgets.firstWhere((Widget widget) => widget is SizedBox);
expect(widget.runtimeType, SizedBox);
});
});
@@ -584,12 +540,9 @@
_expectTextStrings(tester.allWidgets, <String>['<']);
});
- testWidgets('existing HTML entities when parsing',
- (WidgetTester tester) async {
- await tester.pumpWidget(
- _boilerplate(const Markdown(data: '& © < {')));
- _expectTextStrings(
- tester.allWidgets, <String>['& © < {']);
+ testWidgets('existing HTML entities when parsing', (WidgetTester tester) async {
+ await tester.pumpWidget(_boilerplate(const Markdown(data: '& © < {')));
+ _expectTextStrings(tester.allWidgets, <String>['& © < {']);
});
});
@@ -627,8 +580,7 @@
final ThemeData theme = ThemeData.light().copyWith(textTheme: textTheme);
final MarkdownStyleSheet style1 = MarkdownStyleSheet.fromTheme(theme);
- final MarkdownStyleSheet style2 =
- MarkdownStyleSheet.largeFromTheme(theme);
+ final MarkdownStyleSheet style2 = MarkdownStyleSheet.largeFromTheme(theme);
expect(style1, isNot(style2));
await tester.pumpWidget(
@@ -645,11 +597,9 @@
testWidgets(' - imageBuilder', (WidgetTester tester) async {
final String data = '';
- final MarkdownImageBuilder builder =
- (_) => Image.asset('assets/logo.png');
+ final MarkdownImageBuilder builder = (_) => Image.asset('assets/logo.png');
- await tester.pumpWidget(
- _boilerplate(Markdown(data: data, imageBuilder: builder)));
+ await tester.pumpWidget(_boilerplate(Markdown(data: data, imageBuilder: builder)));
final Image image = tester.widget(find.byType(Image));
@@ -659,11 +609,9 @@
testWidgets(' - checkboxBuilder', (WidgetTester tester) async {
final String data = '- [x] Item 1\n- [ ] Item 2';
- final MarkdownCheckboxBuilder builder =
- (bool checked) => Text('$checked');
+ final MarkdownCheckboxBuilder builder = (bool checked) => Text('$checked');
- await tester.pumpWidget(
- _boilerplate(Markdown(data: data, checkboxBuilder: builder)));
+ await tester.pumpWidget(_boilerplate(Markdown(data: data, checkboxBuilder: builder)));
final Iterable<Widget> widgets = tester.allWidgets;
@@ -675,8 +623,7 @@
]);
});
- testWidgets(' - should use style textScaleFactor in RichText',
- (WidgetTester tester) async {
+ testWidgets(' - should use style textScaleFactor in RichText', (WidgetTester tester) async {
await tester.pumpWidget(_boilerplate(
MarkdownBody(
styleSheet: MarkdownStyleSheet(textScaleFactor: 2.0),
@@ -700,13 +647,10 @@
});
testWidgets('equality - Cupertino', (WidgetTester tester) async {
- final CupertinoThemeData theme =
- CupertinoThemeData(brightness: Brightness.light);
+ final CupertinoThemeData theme = CupertinoThemeData(brightness: Brightness.light);
- final MarkdownStyleSheet style1 =
- MarkdownStyleSheet.fromCupertinoTheme(theme);
- final MarkdownStyleSheet style2 =
- MarkdownStyleSheet.fromCupertinoTheme(theme);
+ final MarkdownStyleSheet style1 = MarkdownStyleSheet.fromCupertinoTheme(theme);
+ final MarkdownStyleSheet style2 = MarkdownStyleSheet.fromCupertinoTheme(theme);
expect(style1, equals(style2));
expect(style1.hashCode, equals(style2.hashCode));
});
@@ -714,8 +658,7 @@
testWidgets('merge', (WidgetTester tester) async {
final ThemeData theme = ThemeData.light().copyWith(textTheme: textTheme);
final MarkdownStyleSheet style1 = MarkdownStyleSheet.fromTheme(theme);
- final MarkdownStyleSheet style2 =
- MarkdownStyleSheet(p: TextStyle(color: Colors.red));
+ final MarkdownStyleSheet style2 = MarkdownStyleSheet(p: TextStyle(color: Colors.red));
final MarkdownStyleSheet merged = style1.merge(style2);
expect(merged.p.color, Colors.red);
@@ -776,8 +719,7 @@
String _dumpRenderView() {
return WidgetsBinding.instance.renderViewElement.toStringDeep().replaceAll(
- RegExp(r'SliverChildListDelegate#\d+', multiLine: true),
- 'SliverChildListDelegate');
+ RegExp(r'SliverChildListDelegate#\d+', multiLine: true), 'SliverChildListDelegate');
}
/// Wraps a widget with a left-to-right [Directionality] for tests.
@@ -809,23 +751,19 @@
final MockHttpClientResponse response = MockHttpClientResponse();
final MockHttpHeaders headers = MockHttpHeaders();
- when(client.getUrl(any))
- .thenAnswer((_) => Future<io.HttpClientRequest>.value(request));
+ when(client.getUrl(any)).thenAnswer((_) => Future<io.HttpClientRequest>.value(request));
when(request.headers).thenReturn(headers);
- when(request.close())
- .thenAnswer((_) => Future<io.HttpClientResponse>.value(response));
+ when(request.close()).thenAnswer((_) => Future<io.HttpClientResponse>.value(response));
when(response.contentLength).thenReturn(_transparentImage.length);
when(response.statusCode).thenReturn(io.HttpStatus.ok);
when(response.listen(any)).thenAnswer((Invocation invocation) {
final void Function(List<int>) onData = invocation.positionalArguments[0];
final void Function() onDone = invocation.namedArguments[#onDone];
- final void Function(Object, [StackTrace]) onError =
- invocation.namedArguments[#onError];
+ final void Function(Object, [StackTrace]) onError = invocation.namedArguments[#onError];
final bool cancelOnError = invocation.namedArguments[#cancelOnError];
return Stream<List<int>>.fromIterable(<List<int>>[_transparentImage])
- .listen(onData,
- onDone: onDone, onError: onError, cancelOnError: cancelOnError);
+ .listen(onData, onDone: onDone, onError: onError, cancelOnError: cancelOnError);
});
return client;