lint: enable and fix prefer_final_locals
diff --git a/analysis_options.yaml b/analysis_options.yaml
index a71a4ae..c2977b5 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -40,7 +40,7 @@
     - package_names
     - package_prefixed_library_names
     - prefer_const_constructors
-    #- prefer_final_locals
+    - prefer_final_locals
     - prefer_initializing_formals
     - prefer_interpolation_to_compose_strings
     - prefer_null_aware_operators
diff --git a/lib/src/authentication_challenge.dart b/lib/src/authentication_challenge.dart
index ec368e5..e4b6619 100644
--- a/lib/src/authentication_challenge.dart
+++ b/lib/src/authentication_challenge.dart
@@ -35,14 +35,14 @@
   /// Throws a [FormatException] if the header is invalid.
   static List<AuthenticationChallenge> parseHeader(String header) {
     return wrapFormatException('authentication header', header, () {
-      var scanner = StringScanner(header);
+      final scanner = StringScanner(header);
       scanner.scan(whitespace);
-      var challenges = parseList(scanner, () {
-        var scheme = _scanScheme(scanner, whitespaceName: '" " or "="');
+      final challenges = parseList(scanner, () {
+        final scheme = _scanScheme(scanner, whitespaceName: '" " or "="');
 
         // Manually parse the inner list. We need to do some lookahead to
         // disambiguate between an auth param and another challenge.
-        var params = <String, String>{};
+        final params = <String, String>{};
 
         // Consume initial empty values.
         while (scanner.scan(',')) {
@@ -59,7 +59,7 @@
           if (scanner.matches(',') || scanner.isDone) continue;
 
           scanner.expect(token, name: 'a token');
-          var name = scanner.lastMatch[0];
+          final name = scanner.lastMatch[0];
           scanner.scan(whitespace);
 
           // If there's no "=", then this is another challenge rather than a
@@ -95,11 +95,11 @@
   /// Throws a [FormatException] if the challenge is invalid.
   factory AuthenticationChallenge.parse(String challenge) {
     return wrapFormatException('authentication challenge', challenge, () {
-      var scanner = StringScanner(challenge);
+      final scanner = StringScanner(challenge);
       scanner.scan(whitespace);
-      var scheme = _scanScheme(scanner);
+      final scheme = _scanScheme(scanner);
 
-      var params = <String, String>{};
+      final params = <String, String>{};
       parseList(scanner, () => _scanAuthParam(scanner, params));
 
       scanner.expectDone();
@@ -113,7 +113,7 @@
   /// due to invalid trailing whitespace.
   static String _scanScheme(StringScanner scanner, {String whitespaceName}) {
     scanner.expect(token, name: 'a token');
-    var scheme = scanner.lastMatch[0].toLowerCase();
+    final scheme = scanner.lastMatch[0].toLowerCase();
 
     scanner.scan(whitespace);
 
@@ -129,7 +129,7 @@
   /// Scans a single authentication parameter and stores its result in [params].
   static void _scanAuthParam(StringScanner scanner, Map params) {
     scanner.expect(token, name: 'a token');
-    var name = scanner.lastMatch[0];
+    final name = scanner.lastMatch[0];
     scanner.scan(whitespace);
     scanner.expect('=');
     scanner.scan(whitespace);
diff --git a/lib/src/chunked_coding/decoder.dart b/lib/src/chunked_coding/decoder.dart
index 9b2b194..cd06f39 100644
--- a/lib/src/chunked_coding/decoder.dart
+++ b/lib/src/chunked_coding/decoder.dart
@@ -18,8 +18,8 @@
 
   @override
   List<int> convert(List<int> input) {
-    var sink = _Sink(null);
-    var output = sink._decode(input, 0, input.length);
+    final sink = _Sink(null);
+    final output = sink._decode(input, 0, input.length);
     if (sink._state == _State.end) return output;
 
     throw FormatException('Input ended unexpectedly.', input, input.length);
@@ -50,7 +50,7 @@
   @override
   void addSlice(List<int> chunk, int start, int end, bool isLast) {
     RangeError.checkValidRange(start, end, chunk.length);
-    var output = _decode(chunk, start, end);
+    final output = _decode(chunk, start, end);
     if (output.isNotEmpty) _sink.add(output);
     if (isLast) _close(chunk, end);
   }
@@ -78,7 +78,7 @@
       }
     }
 
-    var buffer = Uint8Buffer();
+    final buffer = Uint8Buffer();
     while (start != end) {
       switch (_state) {
         case _State.boundary:
@@ -105,7 +105,7 @@
           break;
 
         case _State.body:
-          var chunkEnd = math.min(end, start + _size);
+          final chunkEnd = math.min(end, start + _size);
           buffer.addAll(bytes, start, chunkEnd);
           _size -= chunkEnd - start;
           start = chunkEnd;
@@ -156,8 +156,8 @@
     // We check for digits first because it ensures there's only a single branch
     // for 10 out of 16 of the expected cases. We don't count the `digit >= 0`
     // check because branch prediction will always work on it for valid data.
-    var byte = bytes[index];
-    var digit = $0 ^ byte;
+    final byte = bytes[index];
+    final digit = $0 ^ byte;
     if (digit <= 9) {
       if (digit >= 0) return digit;
     } else {
@@ -165,7 +165,7 @@
       // because uppercase letters in ASCII are exactly `0b100000 = 0x20` less
       // than lowercase letters, so if we ensure that that bit is 1 we ensure that
       // the letter is lowercase.
-      var letter = 0x20 | byte;
+      final letter = 0x20 | byte;
       if ($a <= letter && letter <= $f) return letter - $a + 10;
     }
 
diff --git a/lib/src/chunked_coding/encoder.dart b/lib/src/chunked_coding/encoder.dart
index e1f2750..81e4dc8 100644
--- a/lib/src/chunked_coding/encoder.dart
+++ b/lib/src/chunked_coding/encoder.dart
@@ -60,12 +60,12 @@
 List<int> _convert(List<int> bytes, int start, int end, {bool isLast = false}) {
   if (end == start) return isLast ? _doneChunk : const [];
 
-  var size = end - start;
-  var sizeInHex = size.toRadixString(16);
-  var footerSize = isLast ? _doneChunk.length : 0;
+  final size = end - start;
+  final sizeInHex = size.toRadixString(16);
+  final footerSize = isLast ? _doneChunk.length : 0;
 
   // Add 4 for the CRLF sequences that follow the size header and the bytes.
-  var list = Uint8List(sizeInHex.length + 4 + size + footerSize);
+  final list = Uint8List(sizeInHex.length + 4 + size + footerSize);
   list.setRange(0, sizeInHex.length, sizeInHex.codeUnits);
 
   var cursor = sizeInHex.length;
diff --git a/lib/src/http_date.dart b/lib/src/http_date.dart
index 76d1d2b..88ada63 100644
--- a/lib/src/http_date.dart
+++ b/lib/src/http_date.dart
@@ -34,7 +34,7 @@
 /// [RFC 1123](http://tools.ietf.org/html/rfc1123).
 String formatHttpDate(DateTime date) {
   date = date.toUtc();
-  var buffer = StringBuffer()
+  final buffer = StringBuffer()
     ..write(_weekdays[date.weekday - 1])
     ..write(', ')
     ..write(date.day <= 9 ? '0' : '')
@@ -59,18 +59,18 @@
 /// It will throw a [FormatException] if [date] is invalid.
 DateTime parseHttpDate(String date) {
   return wrapFormatException('HTTP date', date, () {
-    var scanner = StringScanner(date);
+    final scanner = StringScanner(date);
 
     if (scanner.scan(_longWeekdayRegExp)) {
       // RFC 850 starts with a long weekday.
       scanner.expect(', ');
-      var day = _parseInt(scanner, 2);
+      final day = _parseInt(scanner, 2);
       scanner.expect('-');
-      var month = _parseMonth(scanner);
+      final month = _parseMonth(scanner);
       scanner.expect('-');
-      var year = 1900 + _parseInt(scanner, 2);
+      final year = 1900 + _parseInt(scanner, 2);
       scanner.expect(' ');
-      var time = _parseTime(scanner);
+      final time = _parseTime(scanner);
       scanner.expect(' GMT');
       scanner.expectDone();
 
@@ -81,13 +81,13 @@
     scanner.expect(_shortWeekdayRegExp);
     if (scanner.scan(', ')) {
       // RFC 1123 follows the weekday with a comma.
-      var day = _parseInt(scanner, 2);
+      final day = _parseInt(scanner, 2);
       scanner.expect(' ');
-      var month = _parseMonth(scanner);
+      final month = _parseMonth(scanner);
       scanner.expect(' ');
-      var year = _parseInt(scanner, 4);
+      final year = _parseInt(scanner, 4);
       scanner.expect(' ');
-      var time = _parseTime(scanner);
+      final time = _parseTime(scanner);
       scanner.expect(' GMT');
       scanner.expectDone();
 
@@ -96,13 +96,14 @@
 
     // asctime follows the weekday with a space.
     scanner.expect(' ');
-    var month = _parseMonth(scanner);
+    final month = _parseMonth(scanner);
     scanner.expect(' ');
-    var day = scanner.scan(' ') ? _parseInt(scanner, 1) : _parseInt(scanner, 2);
+    final day =
+        scanner.scan(' ') ? _parseInt(scanner, 1) : _parseInt(scanner, 2);
     scanner.expect(' ');
-    var time = _parseTime(scanner);
+    final time = _parseTime(scanner);
     scanner.expect(' ');
-    var year = _parseInt(scanner, 4);
+    final year = _parseInt(scanner, 4);
     scanner.expectDone();
 
     return _makeDateTime(year, month, day, time);
@@ -128,15 +129,15 @@
 
 /// Parses an timestamp of the form "HH:MM:SS" on a 24-hour clock.
 DateTime _parseTime(StringScanner scanner) {
-  var hours = _parseInt(scanner, 2);
+  final hours = _parseInt(scanner, 2);
   if (hours >= 24) scanner.error('hours may not be greater than 24.');
   scanner.expect(':');
 
-  var minutes = _parseInt(scanner, 2);
+  final minutes = _parseInt(scanner, 2);
   if (minutes >= 60) scanner.error('minutes may not be greater than 60.');
   scanner.expect(':');
 
-  var seconds = _parseInt(scanner, 2);
+  final seconds = _parseInt(scanner, 2);
   if (seconds >= 60) scanner.error('seconds may not be greater than 60.');
 
   return DateTime(1, 1, 1, hours, minutes, seconds);
@@ -147,7 +148,7 @@
 /// Validates that [day] is a valid day for [month]. If it's not, throws a
 /// [FormatException].
 DateTime _makeDateTime(int year, int month, int day, DateTime time) {
-  var dateTime =
+  final dateTime =
       DateTime.utc(year, month, day, time.hour, time.minute, time.second);
 
   // If [day] was too large, it will cause [month] to overflow.
diff --git a/lib/src/media_type.dart b/lib/src/media_type.dart
index 2ad699a..8d0b082 100644
--- a/lib/src/media_type.dart
+++ b/lib/src/media_type.dart
@@ -44,20 +44,20 @@
     // This parsing is based on sections 3.6 and 3.7 of the HTTP spec:
     // http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html.
     return wrapFormatException('media type', mediaType, () {
-      var scanner = StringScanner(mediaType);
+      final scanner = StringScanner(mediaType);
       scanner.scan(whitespace);
       scanner.expect(token);
-      var type = scanner.lastMatch[0];
+      final type = scanner.lastMatch[0];
       scanner.expect('/');
       scanner.expect(token);
-      var subtype = scanner.lastMatch[0];
+      final subtype = scanner.lastMatch[0];
       scanner.scan(whitespace);
 
-      var parameters = <String, String>{};
+      final parameters = <String, String>{};
       while (scanner.scan(';')) {
         scanner.scan(whitespace);
         scanner.expect(token);
-        var attribute = scanner.lastMatch[0];
+        final attribute = scanner.lastMatch[0];
         scanner.expect('=');
 
         String value;
@@ -105,7 +105,7 @@
             '[mimeType].');
       }
 
-      var segments = mimeType.split('/');
+      final segments = mimeType.split('/');
       if (segments.length != 2) {
         throw FormatException('Invalid mime type "$mimeType".');
       }
@@ -119,7 +119,7 @@
     parameters ??= {};
 
     if (!clearParameters) {
-      var newParameters = parameters;
+      final newParameters = parameters;
       parameters = Map.from(this.parameters);
       parameters.addAll(newParameters);
     }
@@ -132,7 +132,7 @@
   /// This will produce a valid HTTP media type.
   @override
   String toString() {
-    var buffer = StringBuffer()..write(type)..write('/')..write(subtype);
+    final buffer = StringBuffer()..write(type)..write('/')..write(subtype);
 
     parameters.forEach((attribute, value) {
       buffer.write('; $attribute=');
diff --git a/lib/src/scan.dart b/lib/src/scan.dart
index 38cec49..1bdf877 100644
--- a/lib/src/scan.dart
+++ b/lib/src/scan.dart
@@ -31,7 +31,7 @@
 /// Once this is finished, [scanner] will be at the next non-LWS character in
 /// the string, or the end of the string.
 List<T> parseList<T>(StringScanner scanner, T Function() parseElement) {
-  var result = <T>[];
+  final result = <T>[];
 
   // Consume initial empty values.
   while (scanner.scan(',')) {
@@ -61,7 +61,7 @@
 String expectQuotedString(StringScanner scanner, {String name}) {
   name ??= 'quoted string';
   scanner.expect(_quotedString, name: name);
-  var string = scanner.lastMatch[0];
+  final string = scanner.lastMatch[0];
   return string
       .substring(1, string.length - 1)
       .replaceAllMapped(_quotedPair, (match) => match[1]);
diff --git a/test/authentication_challenge_test.dart b/test/authentication_challenge_test.dart
index 35559e0..6184d3e 100644
--- a/test/authentication_challenge_test.dart
+++ b/test/authentication_challenge_test.dart
@@ -14,14 +14,14 @@
   group('parseHeader', () {
     group('with a single challenge', () {
       _singleChallengeTests((challenge) {
-        var challenges = AuthenticationChallenge.parseHeader(challenge);
+        final challenges = AuthenticationChallenge.parseHeader(challenge);
         expect(challenges, hasLength(1));
         return challenges.single;
       });
     });
 
     test('parses multiple challenges', () {
-      var challenges = AuthenticationChallenge.parseHeader(
+      final challenges = AuthenticationChallenge.parseHeader(
           'scheme1 realm=fblthp, scheme2 realm=asdfg');
       expect(challenges, hasLength(2));
       expect(challenges.first.scheme, equals('scheme1'));
@@ -31,7 +31,7 @@
     });
 
     test('parses multiple challenges with multiple parameters', () {
-      var challenges = AuthenticationChallenge.parseHeader(
+      final challenges = AuthenticationChallenge.parseHeader(
           'scheme1 realm=fblthp, foo=bar, scheme2 realm=asdfg, baz=bang');
       expect(challenges, hasLength(2));
 
@@ -54,65 +54,66 @@
 void _singleChallengeTests(
     AuthenticationChallenge Function(String challenge) parseChallenge) {
   test('parses a simple challenge', () {
-    var challenge = parseChallenge('scheme realm=fblthp');
+    final challenge = parseChallenge('scheme realm=fblthp');
     expect(challenge.scheme, equals('scheme'));
     expect(challenge.parameters, equals({'realm': 'fblthp'}));
   });
 
   test('parses multiple parameters', () {
-    var challenge = parseChallenge('scheme realm=fblthp, foo=bar, baz=qux');
+    final challenge = parseChallenge('scheme realm=fblthp, foo=bar, baz=qux');
     expect(challenge.scheme, equals('scheme'));
     expect(challenge.parameters,
         equals({'realm': 'fblthp', 'foo': 'bar', 'baz': 'qux'}));
   });
 
   test('parses quoted string parameters', () {
-    var challenge = parseChallenge('scheme realm="fblthp, foo=bar", baz="qux"');
+    final challenge =
+        parseChallenge('scheme realm="fblthp, foo=bar", baz="qux"');
     expect(challenge.scheme, equals('scheme'));
     expect(challenge.parameters,
         equals({'realm': 'fblthp, foo=bar', 'baz': 'qux'}));
   });
 
   test('normalizes the case of the scheme', () {
-    var challenge = parseChallenge('ScHeMe realm=fblthp');
+    final challenge = parseChallenge('ScHeMe realm=fblthp');
     expect(challenge.scheme, equals('scheme'));
     expect(challenge.parameters, equals({'realm': 'fblthp'}));
   });
 
   test('normalizes the case of the parameter name', () {
-    var challenge = parseChallenge('scheme ReAlM=fblthp');
+    final challenge = parseChallenge('scheme ReAlM=fblthp');
     expect(challenge.scheme, equals('scheme'));
     expect(challenge.parameters, containsPair('realm', 'fblthp'));
   });
 
   test("doesn't normalize the case of the parameter value", () {
-    var challenge = parseChallenge('scheme realm=FbLtHp');
+    final challenge = parseChallenge('scheme realm=FbLtHp');
     expect(challenge.scheme, equals('scheme'));
     expect(challenge.parameters, containsPair('realm', 'FbLtHp'));
     expect(challenge.parameters, isNot(containsPair('realm', 'fblthp')));
   });
 
   test('allows extra whitespace', () {
-    var challenge = parseChallenge(
+    final challenge = parseChallenge(
         '  scheme\t \trealm\t = \tfblthp\t, \tfoo\t\r\n =\tbar\t');
     expect(challenge.scheme, equals('scheme'));
     expect(challenge.parameters, equals({'realm': 'fblthp', 'foo': 'bar'}));
   });
 
   test('allows an empty parameter', () {
-    var challenge = parseChallenge('scheme realm=fblthp, , foo=bar');
+    final challenge = parseChallenge('scheme realm=fblthp, , foo=bar');
     expect(challenge.scheme, equals('scheme'));
     expect(challenge.parameters, equals({'realm': 'fblthp', 'foo': 'bar'}));
   });
 
   test('allows a leading comma', () {
-    var challenge = parseChallenge('scheme , realm=fblthp, foo=bar,');
+    final challenge = parseChallenge('scheme , realm=fblthp, foo=bar,');
     expect(challenge.scheme, equals('scheme'));
     expect(challenge.parameters, equals({'realm': 'fblthp', 'foo': 'bar'}));
   });
 
   test('allows a trailing comma', () {
-    var challenge = parseChallenge('scheme realm=fblthp, foo=bar, ,');
+    final challenge = parseChallenge('scheme realm=fblthp, foo=bar, ,');
     expect(challenge.scheme, equals('scheme'));
     expect(challenge.parameters, equals({'realm': 'fblthp', 'foo': 'bar'}));
   });
diff --git a/test/case_insensitive_map_test.dart b/test/case_insensitive_map_test.dart
index 25cd02b..b08d89b 100644
--- a/test/case_insensitive_map_test.dart
+++ b/test/case_insensitive_map_test.dart
@@ -7,7 +7,7 @@
 
 void main() {
   test('provides case-insensitive access to the map', () {
-    var map = CaseInsensitiveMap();
+    final map = CaseInsensitiveMap();
     map['fOo'] = 'bAr';
     expect(map, containsPair('FoO', 'bAr'));
 
@@ -16,13 +16,13 @@
   });
 
   test('stores the original key cases', () {
-    var map = CaseInsensitiveMap();
+    final map = CaseInsensitiveMap();
     map['fOo'] = 'bAr';
     expect(map, equals({'fOo': 'bAr'}));
   });
 
   test('.from() converts an existing map', () {
-    var map = CaseInsensitiveMap.from({'fOo': 'bAr'});
+    final map = CaseInsensitiveMap.from({'fOo': 'bAr'});
     expect(map, containsPair('FoO', 'bAr'));
     expect(map, equals({'fOo': 'bAr'}));
   });
diff --git a/test/chunked_coding_test.dart b/test/chunked_coding_test.dart
index ec84614..0b178ec 100644
--- a/test/chunked_coding_test.dart
+++ b/test/chunked_coding_test.dart
@@ -18,7 +18,7 @@
     });
 
     test('uses hex for chunk size', () {
-      var data = Iterable<int>.generate(0xA7).toList();
+      final data = Iterable<int>.generate(0xA7).toList();
       expect(
           chunkedCoding.encode(data),
           equals(
@@ -34,7 +34,7 @@
       ByteConversionSink sink;
       setUp(() {
         results = [];
-        var controller = StreamController<List<int>>(sync: true);
+        final controller = StreamController<List<int>>(sync: true);
         controller.stream.listen(results.add);
         sink = chunkedCoding.encoder.startChunkedConversion(controller.sink);
       });
@@ -175,7 +175,7 @@
     });
 
     test('parses hex size', () {
-      var data = Iterable<int>.generate(0xA7).toList();
+      final data = Iterable<int>.generate(0xA7).toList();
       expect(
           chunkedCoding.decode(
               [$a, $7, $cr, $lf, ...data, $cr, $lf, $0, $cr, $lf, $cr, $lf]),
@@ -183,7 +183,7 @@
     });
 
     test('parses capital hex size', () {
-      var data = Iterable<int>.generate(0xA7).toList();
+      final data = Iterable<int>.generate(0xA7).toList();
       expect(
           chunkedCoding.decode(
               [$A, $7, $cr, $lf, ...data, $cr, $lf, $0, $cr, $lf, $cr, $lf]),
@@ -259,7 +259,7 @@
       ByteConversionSink sink;
       setUp(() {
         results = [];
-        var controller = StreamController<List<int>>(sync: true);
+        final controller = StreamController<List<int>>(sync: true);
         controller.stream.listen(results.add);
         sink = chunkedCoding.decoder.startChunkedConversion(controller.sink);
       });
@@ -327,7 +327,7 @@
           sink.add([$a]);
           expect(results, isEmpty);
 
-          var data = Iterable<int>.generate(0xA7).toList();
+          final data = Iterable<int>.generate(0xA7).toList();
           sink.add([$7, $cr, $lf, ...data]);
           expect(results, equals([data]));
         });
diff --git a/test/http_date_test.dart b/test/http_date_test.dart
index 3c54472..dfcdb4f 100644
--- a/test/http_date_test.dart
+++ b/test/http_date_test.dart
@@ -8,31 +8,31 @@
 void main() {
   group('format', () {
     test('many values with 9', () {
-      var date = DateTime.utc(2014, 9, 9, 9, 9, 9);
-      var formatted = formatHttpDate(date);
+      final date = DateTime.utc(2014, 9, 9, 9, 9, 9);
+      final formatted = formatHttpDate(date);
 
       expect(formatted, 'Tue, 09 Sep 2014 09:09:09 GMT');
-      var parsed = parseHttpDate(formatted);
+      final parsed = parseHttpDate(formatted);
 
       expect(parsed, date);
     });
 
     test('end of year', () {
-      var date = DateTime.utc(1999, 12, 31, 23, 59, 59);
-      var formatted = formatHttpDate(date);
+      final date = DateTime.utc(1999, 12, 31, 23, 59, 59);
+      final formatted = formatHttpDate(date);
 
       expect(formatted, 'Fri, 31 Dec 1999 23:59:59 GMT');
-      var parsed = parseHttpDate(formatted);
+      final parsed = parseHttpDate(formatted);
 
       expect(parsed, date);
     });
 
     test('start of year', () {
-      var date = DateTime.utc(2000, 1, 1, 0, 0, 0);
-      var formatted = formatHttpDate(date);
+      final date = DateTime.utc(2000, 1, 1, 0, 0, 0);
+      final formatted = formatHttpDate(date);
 
       expect(formatted, 'Sat, 01 Jan 2000 00:00:00 GMT');
-      var parsed = parseHttpDate(formatted);
+      final parsed = parseHttpDate(formatted);
 
       expect(parsed, date);
     });
@@ -41,7 +41,7 @@
   group('parse', () {
     group('RFC 1123', () {
       test('parses the example date', () {
-        var date = parseHttpDate('Sun, 06 Nov 1994 08:49:37 GMT');
+        final date = parseHttpDate('Sun, 06 Nov 1994 08:49:37 GMT');
         expect(date.day, equals(6));
         expect(date.month, equals(DateTime.november));
         expect(date.year, equals(1994));
@@ -145,7 +145,7 @@
 
     group('RFC 850', () {
       test('parses the example date', () {
-        var date = parseHttpDate('Sunday, 06-Nov-94 08:49:37 GMT');
+        final date = parseHttpDate('Sunday, 06-Nov-94 08:49:37 GMT');
         expect(date.day, equals(6));
         expect(date.month, equals(DateTime.november));
         expect(date.year, equals(1994));
@@ -237,7 +237,7 @@
 
     group('asctime()', () {
       test('parses the example date', () {
-        var date = parseHttpDate('Sun Nov  6 08:49:37 1994');
+        final date = parseHttpDate('Sun Nov  6 08:49:37 1994');
         expect(date.day, equals(6));
         expect(date.month, equals(DateTime.november));
         expect(date.year, equals(1994));
@@ -248,7 +248,7 @@
       });
 
       test('parses a date with a two-digit day', () {
-        var date = parseHttpDate('Sun Nov 16 08:49:37 1994');
+        final date = parseHttpDate('Sun Nov 16 08:49:37 1994');
         expect(date.day, equals(16));
         expect(date.month, equals(DateTime.november));
         expect(date.year, equals(1994));
diff --git a/test/media_type_test.dart b/test/media_type_test.dart
index a310f81..ceca7b9 100644
--- a/test/media_type_test.dart
+++ b/test/media_type_test.dart
@@ -8,7 +8,7 @@
 void main() {
   group('parse', () {
     test('parses a simple MIME type', () {
-      var type = MediaType.parse('text/plain');
+      final type = MediaType.parse('text/plain');
       expect(type.type, equals('text'));
       expect(type.subtype, equals('plain'));
     });
@@ -34,13 +34,13 @@
     });
 
     test('parses parameters', () {
-      var type = MediaType.parse('text/plain;foo=bar;baz=bang');
+      final type = MediaType.parse('text/plain;foo=bar;baz=bang');
       expect(type.mimeType, equals('text/plain'));
       expect(type.parameters, equals({'foo': 'bar', 'baz': 'bang'}));
     });
 
     test('allows whitespace around the semicolon', () {
-      var type = MediaType.parse('text/plain ; foo=bar ; baz=bang');
+      final type = MediaType.parse('text/plain ; foo=bar ; baz=bang');
       expect(type.mimeType, equals('text/plain'));
       expect(type.parameters, equals({'foo': 'bar', 'baz': 'bang'}));
     });
@@ -60,7 +60,7 @@
     });
 
     test('parses quoted parameters', () {
-      var type =
+      final type =
           MediaType.parse('text/plain; foo="bar space"; baz="bang\\\\escape"');
       expect(type.mimeType, equals('text/plain'));
       expect(
@@ -68,14 +68,14 @@
     });
 
     test('lower-cases type and subtype', () {
-      var type = MediaType.parse('TeXt/pLaIn');
+      final type = MediaType.parse('TeXt/pLaIn');
       expect(type.type, equals('text'));
       expect(type.subtype, equals('plain'));
       expect(type.mimeType, equals('text/plain'));
     });
 
     test('records parameters as case-insensitive', () {
-      var type = MediaType.parse('test/plain;FoO=bar;bAz=bang');
+      final type = MediaType.parse('test/plain;FoO=bar;bAz=bang');
       expect(type.parameters, equals({'FoO': 'bar', 'bAz': 'bang'}));
       expect(type.parameters, containsPair('foo', 'bar'));
       expect(type.parameters, containsPair('baz', 'bang'));
@@ -89,7 +89,7 @@
     });
 
     test('uses the existing fields by default', () {
-      var newType = type.change();
+      final newType = type.change();
       expect(newType.type, equals('text'));
       expect(newType.subtype, equals('plain'));
       expect(newType.parameters, equals({'foo': 'bar', 'baz': 'bang'}));
@@ -104,7 +104,7 @@
     });
 
     test('[mimeType] overrides the existing type and subtype', () {
-      var newType = type.change(mimeType: 'image/png');
+      final newType = type.change(mimeType: 'image/png');
       expect(newType.type, equals('image'));
       expect(newType.subtype, equals('png'));
     });
@@ -120,7 +120,7 @@
     });
 
     test('[clearParameters] with [parameters] removes before adding', () {
-      var newType =
+      final newType =
           type.change(parameters: {'foo': 'zap'}, clearParameters: true);
       expect(newType.parameters, equals({'foo': 'zap'}));
     });