diff --git a/pkgs/markdown/CHANGELOG.md b/pkgs/markdown/CHANGELOG.md
index 5b3dc7b..91556ff 100644
--- a/pkgs/markdown/CHANGELOG.md
+++ b/pkgs/markdown/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/pkgs/markdown/lib/src/block_parser.dart b/pkgs/markdown/lib/src/block_parser.dart
index ba07218..73af3b2 100644
--- a/pkgs/markdown/lib/src/block_parser.dart
+++ b/pkgs/markdown/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/pkgs/markdown/lib/src/version.dart b/pkgs/markdown/lib/src/version.dart
index 9271c18..ea63946 100644
--- a/pkgs/markdown/lib/src/version.dart
+++ b/pkgs/markdown/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/pkgs/markdown/pubspec.yaml b/pkgs/markdown/pubspec.yaml
index 6289b39..e7563a8 100644
--- a/pkgs/markdown/pubspec.yaml
+++ b/pkgs/markdown/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/pkgs/markdown/test/document_test.dart b/pkgs/markdown/test/document_test.dart
index e9744e1..0375f29 100644
--- a/pkgs/markdown/test/document_test.dart
+++ b/pkgs/markdown/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"));
+      });
     });
   });
 }
