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:
+
+![Flutter logo](https://flutter.io/images/flutter-mark-square-100.png)
+
+## 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: '![alt](img#50x50)')));
 
-    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 {