Merge with upstream
diff --git a/packages/flutter_markdown/CHANGELOG.md b/packages/flutter_markdown/CHANGELOG.md
new file mode 100644
index 0000000..386dbea
--- /dev/null
+++ b/packages/flutter_markdown/CHANGELOG.md
@@ -0,0 +1,8 @@
+## 0.1.0
+
+* Roll the dependency on `markdown` to 1.0.0
+* Add a test and example for image links
+
+## 0.0.9
+
+* First published version
diff --git a/packages/flutter_markdown/example/demo.dart b/packages/flutter_markdown/example/demo.dart
index 41336ab..033ec10 100644
--- a/packages/flutter_markdown/example/demo.dart
+++ b/packages/flutter_markdown/example/demo.dart
@@ -5,7 +5,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
-const String _kMarkdownData = """# Markdown Example
+const String _markdownData = """# Markdown Example
Markdown allows you to easily include formatted text, images, and even formatted Dart code in your app.
## Styling
@@ -18,12 +18,33 @@
## Links
You can use [hyperlinks](hyperlink) in markdown
-## Code blocks
-Formatted Dart code looks really pretty too. This is an example of how to create your own Markdown widget:
+## Images
+
+You can include images:
+
+
+
+## Markdown widget
+
+This is an example of how to create your own Markdown widget:
new Markdown(data: 'Hello _world_!');
+## Code blocks
+Formatted Dart code looks really pretty too:
+
+```
+void main() {
+ runApp(new MaterialApp(
+ home: new Scaffold(
+ body: new Markdown(data: markdownData)
+ )
+ ));
+}
+
Enjoy!
+```
+
""";
void main() {
@@ -31,7 +52,7 @@
title: "Markdown Demo",
home: new Scaffold(
appBar: new AppBar(title: const Text('Markdown Demo')),
- body: const Markdown(data: _kMarkdownData)
+ body: const Markdown(data: _markdownData)
)
));
}
diff --git a/packages/flutter_markdown/pubspec.yaml b/packages/flutter_markdown/pubspec.yaml
index 7bc47c0..0541538 100644
--- a/packages/flutter_markdown/pubspec.yaml
+++ b/packages/flutter_markdown/pubspec.yaml
@@ -2,12 +2,12 @@
author: Flutter Authors <flutter-dev@googlegroups.com>
description: A markdown renderer for Flutter.
homepage: https://github.com/flutter/flutter_markdown
-version: 0.0.10
+version: 0.1.0
dependencies:
flutter:
sdk: flutter
- markdown: ^0.11.0
+ markdown: ^1.0.0
meta: ^1.0.5
string_scanner: ^1.0.0
diff --git a/packages/flutter_markdown/test/flutter_markdown_test.dart b/packages/flutter_markdown/test/flutter_markdown_test.dart
index 33fb3f4..6818f6d 100644
--- a/packages/flutter_markdown/test/flutter_markdown_test.dart
+++ b/packages/flutter_markdown/test/flutter_markdown_test.dart
@@ -85,83 +85,28 @@
]);
});
- group('Links', () {
- testWidgets('Single link', (WidgetTester tester) async {
- String tapResult;
- await tester.pumpWidget(_boilerplate(new Markdown(
- data: '[Link Text](href)',
- onTapLink: (value) => tapResult = value,
- )));
+ testWidgets('Links', (WidgetTester tester) async {
+ await tester
+ .pumpWidget(_boilerplate(const Markdown(data: '[Link Text](href)')));
- final RichText textWidget =
- tester.allWidgets.firstWhere((Widget widget) => widget is RichText);
- final TextSpan span = textWidget.text;
+ final RichText textWidget =
+ tester.allWidgets.firstWhere((Widget widget) => widget is RichText);
+ final TextSpan span = textWidget.text;
- (span.children[0].children[0].recognizer as TapGestureRecognizer).onTap();
+ expect(
+ span.children[0].recognizer.runtimeType, equals(TapGestureRecognizer));
+ });
- expect(span.children.length, 1);
- expect(span.children[0].children.length, 1);
- expect(span.children[0].children[0].recognizer.runtimeType,
- equals(TapGestureRecognizer));
- expect(tapResult, 'href');
- });
+ testWidgets('Image links', (WidgetTester tester) async {
+ await tester
+ .pumpWidget(_boilerplate(const Markdown(data: '')));
- testWidgets('Link with nested code', (WidgetTester tester) async {
- final List<String> tapResults = <String>[];
- await tester.pumpWidget(_boilerplate(new Markdown(
- data: '[Link `with nested code` Text](href)',
- onTapLink: (value) => tapResults.add(value),
- )));
-
- final RichText textWidget =
- tester.allWidgets.firstWhere((Widget widget) => widget is RichText);
- final TextSpan span = textWidget.text;
-
- final List<Type> gestureRecognizerTypes = <Type>[];
- span.visitTextSpan((TextSpan textSpan) {
- TapGestureRecognizer recognizer = textSpan.recognizer;
- gestureRecognizerTypes.add(recognizer.runtimeType);
- recognizer.onTap();
- return true;
- });
-
- expect(span.children.length, 1);
- expect(span.children[0].children.length, 3);
- expect(gestureRecognizerTypes, everyElement(TapGestureRecognizer));
- expect(tapResults.length, 3);
- expect(tapResults, everyElement('href'));
- });
-
- testWidgets('Multiple links', (WidgetTester tester) async {
- final List<String> tapResults = <String>[];
-
- await tester.pumpWidget(_boilerplate(new Markdown(
- data: '[First Link](firstHref) and [Second Link](secondHref)',
- onTapLink: (value) => tapResults.add(value),
- )));
-
- final RichText textWidget =
- tester.allWidgets.firstWhere((Widget widget) => widget is RichText);
- final TextSpan span = textWidget.text;
-
- final List<Type> gestureRecognizerTypes = <Type>[];
- span.visitTextSpan((TextSpan textSpan) {
- TapGestureRecognizer recognizer = textSpan.recognizer;
- gestureRecognizerTypes.add(recognizer.runtimeType);
- recognizer?.onTap();
- return true;
- });
-
-
- expect(span.children.length, 3);
- expect(span.children[0].children.length, 1);
- expect(span.children[1].children, null);
- expect(span.children[2].children.length, 1);
-
- expect(gestureRecognizerTypes,
- orderedEquals([TapGestureRecognizer, Null, TapGestureRecognizer]));
- expect(tapResults, orderedEquals(['firstHref', 'secondHref']));
- });
+ final Image image =
+ tester.allWidgets.firstWhere((Widget widget) => widget is Image);
+ final NetworkImage networkImage = image.image;
+ expect(networkImage.url, 'img');
+ expect(image.width, 50);
+ expect(image.height, 50);
});
testWidgets('HTML tag ignored ', (WidgetTester tester) async {