diff --git a/.travis.yml b/.travis.yml
index 9c81e6d..86105c9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,9 +1,7 @@
 language: dart
 
 dart:
-  - stable
   - dev
-  - 1.23.0
 
 dart_task:
   - test: -p vm
@@ -13,7 +11,7 @@
 
 matrix:
   include:
-  - dart: stable
+  - dart: dev
     dart_task: dartfmt
 
 # Only building master means that we don't run two builds for each pull request.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 270e306..1b37200 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,5 @@
 ## 2.1.4
-
-- Require at least Dart 1.23.0.
+- Require at least Dart 2.0.0.
 
 ## 2.1.3
 - Fix bug in `readAsBytes` which returned twice as much data as expected.
diff --git a/README.md b/README.md
index 48af528..e65003b 100644
--- a/README.md
+++ b/README.md
@@ -10,11 +10,11 @@
 
 ```dart
 import 'package:resource/resource.dart' show Resource;
-import 'dart:convert' show UTF8;
+import 'dart:convert' show utf8;
 
 main() async {
   var resource = new Resource("package:foo/foo_data.txt");
-  var string = await resource.readAsString(encoding: UTF8);
+  var string = await resource.readAsString(encoding: utf8);
   print(string);
 }
 ```
diff --git a/lib/resource.dart b/lib/resource.dart
index 4326d5f..66bc06c 100644
--- a/lib/resource.dart
+++ b/lib/resource.dart
@@ -10,14 +10,14 @@
 /// Example:
 ///
 ///     var resource = new Resource("package:foo/foo_data.txt");
-///     var string = await resource.readAsString(UTF8);
+///     var string = await resource.readAsString(utf8);
 ///     print(string);
 ///
 /// Example:
 ///
 ///     var resource = new Resource("http://example.com/data.json");
 ///     var obj = await resource.openRead()   // Reads as stream of bytes.
-///                             .transform(UTF8.fuse(JSON).decoder)
+///                             .transform(utf8.fuse(JSON).decoder)
 ///                             .first;
 library resource;
 
diff --git a/lib/src/io_io.dart b/lib/src/io_io.dart
index 03cc92e..edc0de6 100644
--- a/lib/src/io_io.dart
+++ b/lib/src/io_io.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import "dart:async" show Future, Stream;
-import "dart:convert" show Encoding, LATIN1, UTF8;
+import "dart:convert" show Encoding, latin1, utf8;
 import "dart:io"
     show
         File,
@@ -61,7 +61,7 @@
 /// Read the bytes of a URI as a string.
 Future<String> readAsString(Uri uri, Encoding encoding) async {
   if (uri.scheme == "file") {
-    if (encoding == null) encoding = UTF8;
+    if (encoding == null) encoding = utf8;
     return new File.fromUri(uri).readAsString(encoding: encoding);
   }
   if (uri.scheme == "http" || uri.scheme == "https") {
@@ -74,7 +74,7 @@
     HttpClientResponse response = await request.close();
     _throwIfFailed(response, uri);
     encoding ??= Encoding.getByName(response.headers.contentType?.charset);
-    if (encoding == null || encoding == LATIN1) {
+    if (encoding == null || encoding == latin1) {
       // Default to LATIN-1 if no encoding found.
       // Special case LATIN-1 since it is common and doesn't need decoding.
       int length = response.contentLength;
diff --git a/pubspec.yaml b/pubspec.yaml
index 1b2ea68..2715e65 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,11 +1,11 @@
 name: resource
-version: 2.1.4-dev
+version: 2.1.4
 description: Reading resource data from (package and other) files.
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/resource
 
 environment:
-  sdk: '>=1.23.0 <2.0.0'
+  sdk: '>=2.0.0-dev.17.0 <2.0.0'
 
 dependencies:
   typed_data: "^1.0.0"
diff --git a/test/browser_http_test.dart b/test/browser_http_test.dart
index ff4edad..a8f21d9 100644
--- a/test/browser_http_test.dart
+++ b/test/browser_http_test.dart
@@ -27,14 +27,14 @@
   test("Latin-1 encoding", () async {
     var loader = ResourceLoader.defaultLoader;
     var uri = Uri.base.resolve("testfile-latin1.txt");
-    String string = await loader.readAsString(uri, encoding: LATIN1);
+    String string = await loader.readAsString(uri, encoding: latin1);
     expect(string, content);
   });
 
   test("UTF-8 encoding", () async {
     var loader = ResourceLoader.defaultLoader;
     var uri = Uri.base.resolve("testfile-utf8.txt");
-    String string = await loader.readAsString(uri, encoding: UTF8);
+    String string = await loader.readAsString(uri, encoding: utf8);
     expect(string, content);
   });
 
diff --git a/test/loader_data_test.dart b/test/loader_data_test.dart
index fe767e7..19c898a 100644
--- a/test/loader_data_test.dart
+++ b/test/loader_data_test.dart
@@ -43,8 +43,8 @@
     });
   }
 
-  testFile(LATIN1, true);
-  testFile(LATIN1, false);
-  testFile(UTF8, true);
-  testFile(UTF8, false);
+  testFile(latin1, true);
+  testFile(latin1, false);
+  testFile(utf8, true);
+  testFile(utf8, false);
 }
diff --git a/test/loader_file_test.dart b/test/loader_file_test.dart
index 54a42d7..30e33bb 100644
--- a/test/loader_file_test.dart
+++ b/test/loader_file_test.dart
@@ -55,8 +55,8 @@
     });
   }
 
-  testFile(LATIN1);
-  testFile(UTF8);
+  testFile(latin1);
+  testFile(utf8);
 
   tearDown(() {
     dir.delete(recursive: true);
diff --git a/test/loader_http_test.dart b/test/loader_http_test.dart
index 02631e2..a4b9de6 100644
--- a/test/loader_http_test.dart
+++ b/test/loader_http_test.dart
@@ -49,7 +49,7 @@
 
   test("Latin-1 encoding", () async {
     var loader = ResourceLoader.defaultLoader;
-    String string = await loader.readAsString(uri, encoding: LATIN1);
+    String string = await loader.readAsString(uri, encoding: latin1);
     expect(string, content);
   });
 
@@ -57,20 +57,20 @@
     // Regression test for issue #21.
     var loader = ResourceLoader.defaultLoader;
     var newUri = uri.replace(query: "length"); // Request length set.
-    String string = await loader.readAsString(newUri, encoding: LATIN1);
+    String string = await loader.readAsString(newUri, encoding: latin1);
     expect(string, content);
   });
 
   test("UTF-8 encoding", () async {
     var loader = ResourceLoader.defaultLoader;
     var newUri = uri.replace(query: "length"); // Request length set.
-    String string = await loader.readAsString(newUri, encoding: UTF8);
+    String string = await loader.readAsString(newUri, encoding: utf8);
     expect(string, content);
   });
 
   test("UTF-8 encoding w/ length", () async {
     var loader = ResourceLoader.defaultLoader;
-    String string = await loader.readAsString(uri, encoding: UTF8);
+    String string = await loader.readAsString(uri, encoding: utf8);
     expect(string, content);
   });
 
@@ -120,7 +120,7 @@
 }
 
 Encoding parseAcceptCharset(List<String> headers) {
-  var encoding = LATIN1;
+  var encoding = latin1;
   if (headers != null) {
     var weight = 0.0;
     var pattern = new RegExp(r"([\w-]+)(;\s*q=[\d.]+)?");
diff --git a/test/resource_test.dart b/test/resource_test.dart
index d1102a1..7e7a88a 100644
--- a/test/resource_test.dart
+++ b/test/resource_test.dart
@@ -5,7 +5,7 @@
 @TestOn("vm")
 
 import "dart:async" show Future, Stream;
-import "dart:convert" show Encoding, ASCII;
+import "dart:convert" show Encoding, ascii;
 import "dart:isolate" show Isolate;
 import "package:resource/resource.dart";
 import "package:test/test.dart";
@@ -31,13 +31,13 @@
       ]);
       var res1 = await resource.readAsBytes();
       expect(res1, [0, 0, 0]);
-      var res2 = await resource.readAsString(encoding: ASCII);
+      var res2 = await resource.readAsString(encoding: ascii);
       expect(res2, "\x00\x00\x00");
 
       expect(loader.requests, [
         ["Stream", resolved],
         ["Bytes", resolved],
-        ["String", resolved, ASCII]
+        ["String", resolved, ascii]
       ]);
     }
 
