diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5b3dc7b..91556ff 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,8 @@
 * Properly encode `<`, `>`, and `"` as their respective HTML entities when
   interpreted as text.
 * Improve inline code parsing when using multiple backticks.
+* Do not encode HTML in indented code blocks when `encodeHtml` is false (e.g.
+  when used in Flutter).
 
 ## 2.0.3
 
diff --git a/lib/src/block_parser.dart b/lib/src/block_parser.dart
index ba07218..73af3b2 100644
--- a/lib/src/block_parser.dart
+++ b/lib/src/block_parser.dart
@@ -397,10 +397,11 @@
     // The Markdown tests expect a trailing newline.
     childLines.add('');
 
-    // Escape the code.
-    var escaped = escapeHtml(childLines.join('\n'));
+    var content = parser.document.encodeHtml
+        ? escapeHtml(childLines.join('\n'))
+        : childLines.join('\n');
 
-    return Element('pre', [Element.text('code', escaped)]);
+    return Element('pre', [Element.text('code', content)]);
   }
 }
 
diff --git a/lib/src/version.dart b/lib/src/version.dart
index 9271c18..ea63946 100644
--- a/lib/src/version.dart
+++ b/lib/src/version.dart
@@ -1,2 +1,2 @@
 // Generated code. Do not modify.
-const packageVersion = '2.1.0-dev';
+const packageVersion = '2.1.0';
diff --git a/pubspec.yaml b/pubspec.yaml
index 6289b39..e7563a8 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: markdown
-version: 2.1.0-dev
+version: 2.1.0
 
 description: A library for converting markdown to HTML.
 author: Dart Team <misc@dartlang.org>
diff --git a/test/document_test.dart b/test/document_test.dart
index e9744e1..0375f29 100644
--- a/test/document_test.dart
+++ b/test/document_test.dart
@@ -17,52 +17,59 @@
               .having((e) => e.text, 'text', equals('< &')));
     });
 
-    test('encodeHtml true allow code block escaping', () {
+    group('with encodeHtml enabled', () {
       var document = Document(encodeHtml: true);
-      var result = document.parseInline("```<p>Hello <em>Markdown</em></p>```");
-      expect(result, hasLength(1));
-      expect(
-          result[0],
-          const TypeMatcher<Element>().having(
-              (e) => e.textContent,
-              'text',
-              equals(
-                  "&lt;p&gt;Hello &lt;em&gt;Markdown&lt;/em&gt;&lt;/p&gt;")));
+
+      test('encodes HTML in an inline code snippet', () {
+        var result = document.parseInline("``<p>Hello <em>Markdown</em></p>``");
+        var codeSnippet = result.single as Element;
+        expect(codeSnippet.textContent,
+            equals("&lt;p&gt;Hello &lt;em&gt;Markdown&lt;/em&gt;&lt;/p&gt;"));
+      });
+
+      test('encodes HTML in a fenced code block', () {
+        var lines = "```\n<p>Hello <em>Markdown</em></p>\n```\n".split('\n');
+        var result = document.parseLines(lines);
+        var codeBlock = result.single as Element;
+        expect(codeBlock.textContent,
+            equals("&lt;p&gt;Hello &lt;em&gt;Markdown&lt;/em&gt;&lt;/p&gt;\n"));
+      });
+
+      test('encodes HTML in an indented code block', () {
+        var lines = "    <p>Hello <em>Markdown</em></p>\n".split('\n');
+        var result = document.parseLines(lines);
+        var codeBlock = result.single as Element;
+        expect(codeBlock.textContent,
+            equals("&lt;p&gt;Hello &lt;em&gt;Markdown&lt;/em&gt;&lt;/p&gt;\n"));
+      });
     });
 
-    test('encodeHtml false prevents code block escaping', () {
+    group('with encodeHtml disabled', () {
       var document = Document(encodeHtml: false);
-      var result = document.parseInline("```<p>Hello <em>Markdown</em></p>```");
-      expect(result, hasLength(1));
-      expect(
-          result[0],
-          const TypeMatcher<Element>().having((e) => e.textContent, 'text',
-              equals("<p>Hello <em>Markdown</em></p>")));
-    });
 
-    test('encodeHtml true allow code block escaping (BlockParser)', () {
-      var document = Document(encodeHtml: true);
-      var lines = "```\n<p>Hello <em>Markdown</em></p>\n```\n".split('\n');
-      var result = document.parseLines(lines);
-      expect(result, hasLength(1));
-      expect(
-          result[0],
-          const TypeMatcher<Element>().having(
-              (e) => e.textContent,
-              'text',
-              equals(
-                  "&lt;p&gt;Hello &lt;em&gt;Markdown&lt;/em&gt;&lt;/p&gt;\n")));
-    });
+      test('leaves HTML alone, in a code snippet', () {
+        var result =
+            document.parseInline("```<p>Hello <em>Markdown</em></p>```");
+        var codeSnippet = result.single as Element;
+        expect(
+            codeSnippet.textContent, equals("<p>Hello <em>Markdown</em></p>"));
+      });
 
-    test('encodeHtml false prevents code block escaping (BlockParser)', () {
-      var document = Document(encodeHtml: false);
-      var lines = "```\n<p>Hello <em>Markdown</em></p>\n```\n".split('\n');
-      var result = document.parseLines(lines);
-      expect(result, hasLength(1));
-      expect(
-          result[0],
-          const TypeMatcher<Element>().having((e) => e.textContent, 'text',
-              equals("<p>Hello <em>Markdown</em></p>\n")));
+      test('leaves HTML alone, in a fenced code block', () {
+        var lines = "```\n<p>Hello <em>Markdown</em></p>\n```\n".split('\n');
+        var result = document.parseLines(lines);
+        var codeBlock = result.single as Element;
+        expect(
+            codeBlock.textContent, equals("<p>Hello <em>Markdown</em></p>\n"));
+      });
+
+      test('leaves HTML alone, in an indented code block', () {
+        var lines = "    <p>Hello <em>Markdown</em></p>\n".split('\n');
+        var result = document.parseLines(lines);
+        var codeBlock = result.single as Element;
+        expect(
+            codeBlock.textContent, equals("<p>Hello <em>Markdown</em></p>\n"));
+      });
     });
   });
 }
