Remove upper case constants (#158)

* Remove usage of upper-case constants.

* update SDK version
* Don't use stable SDK in travis.
diff --git a/.travis.yml b/.travis.yml
index 980160f..4a65230 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,8 +3,6 @@
 
 dart:
   - dev
-  - stable
-
 dart_task:
   - test: --platform vm,firefox
 
@@ -12,7 +10,7 @@
 # them against each Dart version.
 matrix:
   include:
-  - dart: stable
+  - dart: dev
     dart_task: dartfmt
   - dart: dev
     dart_task: dartanalyzer
diff --git a/lib/http.dart b/lib/http.dart
index ddf2711..1a9ee2a 100644
--- a/lib/http.dart
+++ b/lib/http.dart
@@ -62,7 +62,7 @@
 /// content-type of the request will be set to
 /// `"application/x-www-form-urlencoded"`; this cannot be overridden.
 ///
-/// [encoding] defaults to [UTF8].
+/// [encoding] defaults to [utf8].
 ///
 /// This automatically initializes a new [Client] and closes that client once
 /// the request is complete. If you're planning on making multiple requests to
@@ -87,7 +87,7 @@
 /// content-type of the request will be set to
 /// `"application/x-www-form-urlencoded"`; this cannot be overridden.
 ///
-/// [encoding] defaults to [UTF8].
+/// [encoding] defaults to [utf8].
 ///
 /// This automatically initializes a new [Client] and closes that client once
 /// the request is complete. If you're planning on making multiple requests to
@@ -112,7 +112,7 @@
 /// content-type of the request will be set to
 /// `"application/x-www-form-urlencoded"`; this cannot be overridden.
 ///
-/// [encoding] defaults to [UTF8].
+/// [encoding] defaults to [utf8].
 ///
 /// This automatically initializes a new [Client] and closes that client once
 /// the request is complete. If you're planning on making multiple requests to
diff --git a/lib/src/body.dart b/lib/src/body.dart
index ed3412f..30f5ff7 100644
--- a/lib/src/body.dart
+++ b/lib/src/body.dart
@@ -40,16 +40,16 @@
     if (body is Body) return body;
     if (body == null) return new Body._(const Stream.empty(), encoding, 0);
 
-    if (body is Map) body = mapToQuery(body, encoding ?? UTF8);
+    if (body is Map) body = mapToQuery(body, encoding ?? utf8);
 
     Stream<List<int>> stream;
     int contentLength;
     if (body is String) {
       if (encoding == null) {
-        var encoded = UTF8.encode(body);
+        var encoded = utf8.encode(body);
         // If the text is plain ASCII, don't modify the encoding. This means
         // that an encoding of "text/plain" will stay put.
-        if (!_isPlainAscii(encoded, body.length)) encoding = UTF8;
+        if (!_isPlainAscii(encoded, body.length)) encoding = utf8;
         contentLength = encoded.length;
         stream = new Stream.fromIterable([encoded]);
       } else {
diff --git a/lib/src/client.dart b/lib/src/client.dart
index 8ce424d..6b5a2e5 100644
--- a/lib/src/client.dart
+++ b/lib/src/client.dart
@@ -66,7 +66,7 @@
   /// content-type of the request will be set to
   /// `"application/x-www-form-urlencoded"`; this cannot be overridden.
   ///
-  /// [encoding] defaults to [UTF8].
+  /// [encoding] defaults to [utf8].
   ///
   /// For more fine-grained control over the request, use [send] instead.
   Future<Response> post(url, body,
@@ -87,7 +87,7 @@
   /// content-type of the request will be set to
   /// `"application/x-www-form-urlencoded"`; this cannot be overridden.
   ///
-  /// [encoding] defaults to [UTF8].
+  /// [encoding] defaults to [utf8].
   ///
   /// For more fine-grained control over the request, use [send] instead.
   Future<Response> put(url, body,
@@ -108,7 +108,7 @@
   /// content-type of the request will be set to
   /// `"application/x-www-form-urlencoded"`; this cannot be overridden.
   ///
-  /// [encoding] defaults to [UTF8].
+  /// [encoding] defaults to [utf8].
   ///
   /// For more fine-grained control over the request, use [send] instead.
   Future<Response> patch(url, body,
diff --git a/lib/src/message.dart b/lib/src/message.dart
index 6273915..bf50634 100644
--- a/lib/src/message.dart
+++ b/lib/src/message.dart
@@ -154,7 +154,7 @@
   /// Throws a [StateError] if [read] or [readAsBytes] or [readAsString] has
   /// already been called.
   Future<String> readAsString([Encoding encoding]) {
-    encoding ??= this.encoding ?? UTF8;
+    encoding ??= this.encoding ?? utf8;
     return encoding.decodeStream(read());
   }
 
diff --git a/lib/src/multipart_body.dart b/lib/src/multipart_body.dart
index 63fd25b..d3e4915 100644
--- a/lib/src/multipart_body.dart
+++ b/lib/src/multipart_body.dart
@@ -39,7 +39,7 @@
     }
 
     void writeUtf8(String string) {
-      buffer.addAll(UTF8.encode(string));
+      buffer.addAll(utf8.encode(string));
     }
 
     void writeLine() {
@@ -65,7 +65,7 @@
     for (var file in fileList) {
       var header = <int>[]
         ..addAll('--$boundary\r\n'.codeUnits)
-        ..addAll(UTF8.encode(_headerForFile(file)));
+        ..addAll(utf8.encode(_headerForFile(file)));
 
       fileContentsLength += header.length + file.length + 2;
       fileHeaders.add(header);
diff --git a/lib/src/multipart_file.dart b/lib/src/multipart_file.dart
index 42a8689..e404241 100644
--- a/lib/src/multipart_file.dart
+++ b/lib/src/multipart_file.dart
@@ -38,7 +38,7 @@
   /// [value] can be either a [String] or a [List<int>].
   ///
   /// For a String [value] the content will be encoded using [encoding] which
-  /// defaults to [UTF8]. The `charset` from [contentType] is ignored when
+  /// defaults to [utf8]. The `charset` from [contentType] is ignored when
   /// encoding the String.
   ///
   /// [contentType] if not specified will attempt to be looked up from the
@@ -51,7 +51,7 @@
     var defaultMediaType;
 
     if (value is String) {
-      encoding ??= UTF8;
+      encoding ??= utf8;
       bytes = encoding.encode(value);
       defaultMediaType = new MediaType('text', 'plain');
     } else if (value is List<int>) {
diff --git a/pubspec.yaml b/pubspec.yaml
index 3708099..03ba584 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: http
-version: 0.12.0-dev
+version: 0.12.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: https://github.com/dart-lang/http
 description: A composable, Future-based API for making HTTP requests.
@@ -16,4 +16,4 @@
 dependency_overrides:
   package_resolver: '^1.0.0'
 environment:
-  sdk: ">=1.24.0 <2.0.0"
+  sdk: ">=2.0.0-dev.17.0 <2.0.0"
diff --git a/test/client_test.dart b/test/client_test.dart
index 15ee380..6647b9f 100644
--- a/test/client_test.dart
+++ b/test/client_test.dart
@@ -72,13 +72,13 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('request body')
+            'body': ascii.encode('request body')
           })));
     });
 
     test('post with string and encoding', () async {
       var response = await platformClient()
-          .post(serverUrl, 'request body', encoding: UTF8, headers: {
+          .post(serverUrl, 'request body', encoding: utf8, headers: {
         'X-Random-Header': 'Value',
         'X-Other-Header': 'Other Value',
         'User-Agent': userAgent()
@@ -104,7 +104,7 @@
 
     test('post with bytes', () async {
       var response = await platformClient()
-          .post(serverUrl, ASCII.encode('hello'), headers: {
+          .post(serverUrl, ascii.encode('hello'), headers: {
         'X-Random-Header': 'Value',
         'X-Other-Header': 'Other Value',
         'User-Agent': userAgent()
@@ -123,7 +123,7 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('hello')
+            'body': ascii.encode('hello')
           })));
     });
 
@@ -151,7 +151,7 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('some-field=value&other-field=other+value')
+            'body': ascii.encode('some-field=value&other-field=other+value')
           })));
     });
 
@@ -176,13 +176,13 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('request body')
+            'body': ascii.encode('request body')
           })));
     });
 
     test('put with string and encoding', () async {
       var response = await platformClient()
-          .put(serverUrl, 'request body', encoding: UTF8, headers: {
+          .put(serverUrl, 'request body', encoding: utf8, headers: {
         'X-Random-Header': 'Value',
         'X-Other-Header': 'Other Value',
         'User-Agent': userAgent()
@@ -208,7 +208,7 @@
 
     test('put with bytes', () async {
       var response = await platformClient()
-          .put(serverUrl, ASCII.encode('hello'), headers: {
+          .put(serverUrl, ascii.encode('hello'), headers: {
         'X-Random-Header': 'Value',
         'X-Other-Header': 'Other Value',
         'User-Agent': userAgent()
@@ -227,7 +227,7 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('hello')
+            'body': ascii.encode('hello')
           })));
     });
 
@@ -255,7 +255,7 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('some-field=value&other-field=other+value')
+            'body': ascii.encode('some-field=value&other-field=other+value')
           })));
     });
 
@@ -280,13 +280,13 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('request body')
+            'body': ascii.encode('request body')
           })));
     });
 
     test('patch with string and encoding', () async {
       var response = await platformClient()
-          .patch(serverUrl, 'request body', encoding: UTF8, headers: {
+          .patch(serverUrl, 'request body', encoding: utf8, headers: {
         'X-Random-Header': 'Value',
         'X-Other-Header': 'Other Value',
         'User-Agent': userAgent()
@@ -312,7 +312,7 @@
 
     test('patch with bytes', () async {
       var response = await platformClient()
-          .patch(serverUrl, ASCII.encode('hello'), headers: {
+          .patch(serverUrl, ascii.encode('hello'), headers: {
         'X-Random-Header': 'Value',
         'X-Other-Header': 'Other Value',
         'User-Agent': userAgent()
@@ -331,7 +331,7 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('hello')
+            'body': ascii.encode('hello')
           })));
     });
 
@@ -359,7 +359,7 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('some-field=value&other-field=other+value')
+            'body': ascii.encode('some-field=value&other-field=other+value')
           })));
     });
 
diff --git a/test/hybrid/server.dart b/test/hybrid/server.dart
index c873d4b..e813918 100644
--- a/test/hybrid/server.dart
+++ b/test/hybrid/server.dart
@@ -65,7 +65,7 @@
 
     if (request.url.path == 'no-content-length') {
       return new shelf.Response.ok(
-          new Stream.fromIterable([ASCII.encode('body')]));
+          new Stream.fromIterable([ascii.encode('body')]));
     }
 
     var requestBody;
@@ -90,9 +90,9 @@
 
     var encodingName = request.url.queryParameters['response-encoding'];
     var outputEncoding =
-        encodingName == null ? ASCII : Encoding.getByName(encodingName);
+        encodingName == null ? ascii : Encoding.getByName(encodingName);
 
-    return new shelf.Response.ok(JSON.encode(content), headers: {
+    return new shelf.Response.ok(jsonEncode(content), headers: {
       "content-type": "application/json; charset=${outputEncoding.name}",
 
       // CORS headers for browser testing
diff --git a/test/message_change_test.dart b/test/message_change_test.dart
index 8c5942d..18dc123 100644
--- a/test/message_change_test.dart
+++ b/test/message_change_test.dart
@@ -47,7 +47,7 @@
       var request = factory(body: 'Hello, world');
       var copy = request.change(
           body: new Stream.fromIterable(['Goodbye, world'])
-              .transform(UTF8.encoder));
+              .transform(utf8.encoder));
 
       var newBody = await copy.readAsString();
 
diff --git a/test/message_test.dart b/test/message_test.dart
index d24b764..5cb2434 100644
--- a/test/message_test.dart
+++ b/test/message_test.dart
@@ -13,16 +13,16 @@
 final _nonAscii = "föøbãr";
 
 /// The UTF-8 encoding of [_nonAscii].
-final _utf8Bytes = UTF8.encode(_nonAscii);
+final _utf8Bytes = utf8.encode(_nonAscii);
 
 /// The Latin-1 encoding of [_nonAscii].
-final _latin1Bytes = LATIN1.encode(_nonAscii);
+final _latin1Bytes = latin1.encode(_nonAscii);
 
 /// The ASCII bytes in the string "hello,".
-final _helloBytes = ASCII.encode("hello,");
+final _helloBytes = ascii.encode("hello,");
 
 /// The ASCII bytes in the string " world".
-final _worldBytes = ASCII.encode(" world");
+final _worldBytes = ascii.encode(" world");
 
 class _TestMessage extends Message {
   _TestMessage(Map<String, String> headers, Map<String, Object> context, body,
@@ -191,7 +191,7 @@
       expect(message.contentLength, 9);
       expect(message.isEmpty, isFalse);
 
-      message = _createMessage(body: 'fööbär', encoding: LATIN1);
+      message = _createMessage(body: 'fööbär', encoding: latin1);
       expect(message.contentLength, 6);
       expect(message.isEmpty, isFalse);
     });
@@ -316,7 +316,7 @@
     group('defaults to UTF-8 with a non-ASCII body and', () {
       test('no content-type header', () {
         var message = _createMessage(body: _nonAscii);
-        expect(message.encoding, equals(UTF8));
+        expect(message.encoding, equals(utf8));
         expect(
             message.headers,
             containsPair(
@@ -328,7 +328,7 @@
         var message = _createMessage(
             body: _nonAscii,
             headers: {'Content-Type': 'text/plain; charset=iso-8859-1'});
-        expect(message.encoding, equals(UTF8));
+        expect(message.encoding, equals(utf8));
         expect(message.headers,
             containsPair('content-type', 'text/plain; charset=utf-8'));
         expect(message.readAsBytes(), completion(equals(_utf8Bytes)));
@@ -338,8 +338,8 @@
     group('uses the encoding parameter with', () {
       group('no content-type header and', () {
         test('no body', () {
-          var message = _createMessage(encoding: LATIN1);
-          expect(message.encoding, equals(LATIN1));
+          var message = _createMessage(encoding: latin1);
+          expect(message.encoding, equals(latin1));
           expect(
               message.headers,
               containsPair('content-type',
@@ -347,8 +347,8 @@
         });
 
         test('a plain ASCII body', () {
-          var message = _createMessage(body: "foo", encoding: LATIN1);
-          expect(message.encoding, equals(LATIN1));
+          var message = _createMessage(body: "foo", encoding: latin1);
+          expect(message.encoding, equals(latin1));
           expect(
               message.headers,
               containsPair('content-type',
@@ -356,8 +356,8 @@
         });
 
         test('a non-ASCII body', () {
-          var message = _createMessage(body: _nonAscii, encoding: LATIN1);
-          expect(message.encoding, equals(LATIN1));
+          var message = _createMessage(body: _nonAscii, encoding: latin1);
+          expect(message.encoding, equals(latin1));
           expect(
               message.headers,
               containsPair('content-type',
@@ -366,8 +366,8 @@
         });
 
         test('body bytes', () {
-          var message = _createMessage(encoding: LATIN1, body: _latin1Bytes);
-          expect(message.encoding, equals(LATIN1));
+          var message = _createMessage(encoding: latin1, body: _latin1Bytes);
+          expect(message.encoding, equals(latin1));
           expect(
               message.headers,
               containsPair('content-type',
@@ -378,7 +378,7 @@
 
       test('a content-type header without a charset', () {
         var message = _createMessage(
-            encoding: LATIN1, headers: {'Content-Type': 'text/plain'});
+            encoding: latin1, headers: {'Content-Type': 'text/plain'});
         expect(message.headers,
             containsPair('content-type', 'text/plain; charset=iso-8859-1'));
       });
@@ -386,9 +386,9 @@
       group('a content-type header and', () {
         test('no body', () {
           var message = _createMessage(
-              encoding: LATIN1,
+              encoding: latin1,
               headers: {'Content-Type': 'text/plain; charset=utf-8'});
-          expect(message.encoding, equals(LATIN1));
+          expect(message.encoding, equals(latin1));
           expect(message.headers,
               containsPair('content-type', 'text/plain; charset=iso-8859-1'));
         });
@@ -396,9 +396,9 @@
         test('a plain ASCII body', () {
           var message = _createMessage(
               body: "foo",
-              encoding: LATIN1,
+              encoding: latin1,
               headers: {'Content-Type': 'text/plain; charset=utf-8'});
-          expect(message.encoding, equals(LATIN1));
+          expect(message.encoding, equals(latin1));
           expect(message.headers,
               containsPair('content-type', 'text/plain; charset=iso-8859-1'));
         });
@@ -406,9 +406,9 @@
         test('a non-ASCII body', () {
           var message = _createMessage(
               body: _nonAscii,
-              encoding: LATIN1,
+              encoding: latin1,
               headers: {'Content-Type': 'text/plain; charset=utf-8'});
-          expect(message.encoding, equals(LATIN1));
+          expect(message.encoding, equals(latin1));
           expect(message.headers,
               containsPair('content-type', 'text/plain; charset=iso-8859-1'));
           expect(message.readAsBytes(), completion(equals(_latin1Bytes)));
@@ -416,10 +416,10 @@
 
         test('body bytes', () {
           var message = _createMessage(
-              encoding: LATIN1,
+              encoding: latin1,
               body: _latin1Bytes,
               headers: {'Content-Type': 'text/plain; charset=utf-8'});
-          expect(message.encoding, equals(LATIN1));
+          expect(message.encoding, equals(latin1));
           expect(message.headers,
               containsPair('content-type', 'text/plain; charset=iso-8859-1'));
           expect(message.readAsString(), completion(equals(_nonAscii)));
@@ -431,7 +431,7 @@
       test('no body', () {
         var message = _createMessage(
             headers: {'Content-Type': 'text/plain; charset=iso-8859-1'});
-        expect(message.encoding.name, equals(LATIN1.name));
+        expect(message.encoding.name, equals(latin1.name));
         expect(message.headers,
             containsPair('content-type', 'text/plain; charset=iso-8859-1'));
       });
@@ -440,7 +440,7 @@
         var message = _createMessage(
             body: "foo",
             headers: {'Content-Type': 'text/plain; charset=iso-8859-1'});
-        expect(message.encoding.name, equals(LATIN1.name));
+        expect(message.encoding.name, equals(latin1.name));
         expect(message.headers,
             containsPair('content-type', 'text/plain; charset=iso-8859-1'));
       });
@@ -449,7 +449,7 @@
         var message = _createMessage(
             body: _latin1Bytes,
             headers: {'Content-Type': 'text/plain; charset=iso-8859-1'});
-        expect(message.encoding.name, equals(LATIN1.name));
+        expect(message.encoding.name, equals(latin1.name));
         expect(message.headers,
             containsPair('content-type', 'text/plain; charset=iso-8859-1'));
         expect(message.readAsString(), completion(equals(_nonAscii)));
diff --git a/test/multipart_test.dart b/test/multipart_test.dart
index bf0d22b..65213ad 100644
--- a/test/multipart_test.dart
+++ b/test/multipart_test.dart
@@ -180,7 +180,7 @@
     // "Ã¥" encoded as ISO-8859-1 and then read as UTF-8 results in "å".
     var files = [
       new http.MultipartFile('file', 'non-ascii: "Ã¥"',
-          encoding: LATIN1, contentType: new MediaType('text', 'plain'))
+          encoding: latin1, contentType: new MediaType('text', 'plain'))
     ];
     var request = new http.Request.multipart(dummyUrl, files: files);
 
diff --git a/test/utils.dart b/test/utils.dart
index db93d78..2e9909b 100644
--- a/test/utils.dart
+++ b/test/utils.dart
@@ -52,7 +52,7 @@
 
     var parsed;
     try {
-      parsed = JSON.decode(item);
+      parsed = jsonDecode(item);
     } catch (e) {
       return false;
     }
@@ -81,7 +81,7 @@
     if (item is! http.Request) return false;
 
     var future = item.readAsBytes().then((bodyBytes) {
-      var body = UTF8.decode(bodyBytes);
+      var body = utf8.decode(bodyBytes);
       var contentType = new MediaType.parse(item.headers['content-type']);
       var boundary = contentType.parameters['boundary'];
       var expected = cleanUpLiteral(_pattern)