Merge branch 'master' into fix-47
diff --git a/.github/workflows/test-package.yml b/.github/workflows/test-package.yml
index 35e0803..e3bd3c0 100644
--- a/.github/workflows/test-package.yml
+++ b/.github/workflows/test-package.yml
@@ -25,7 +25,7 @@
       - uses: actions/checkout@v2
       - uses: dart-lang/setup-dart@v1.0
         with:
-          channel: ${{ matrix.sdk }}
+          sdk: ${{ matrix.sdk }}
       - id: install
         name: Install dependencies
         run: dart pub get
@@ -38,7 +38,7 @@
 
   # Run tests on a matrix consisting of two dimensions:
   # 1. OS: ubuntu-latest, (macos-latest, windows-latest)
-  # 2. release channel: dev
+  # 2. release sdk: dev
   test:
     needs: analyze
     runs-on: ${{ matrix.os }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e28c68e..797ea91 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,11 @@
-## 3.0.1
+## 3.0.2
 
 * Fix bug in `CodePage` class. See issue [#47](https://github.com/dart-lang/convert/issues/47).
 
+## 3.0.1
+
+* Dependency clean-up.
+
 ## 3.0.0
 
 * Stable null safety release.
diff --git a/analysis_options.yaml b/analysis_options.yaml
index dcd46cb..85d6c12 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -1,13 +1,8 @@
-include: package:pedantic/analysis_options.yaml
+include: package:lints/recommended.yaml
 analyzer:
   strong-mode:
     implicit-casts: false
 
-  errors:
-    # Ignore still failing lints from latest pkg:pedantic
-    annotate_overrides: ignore
-    prefer_single_quotes: ignore
-
 linter:
   rules:
     - avoid_empty_else
diff --git a/lib/src/accumulator_sink.dart b/lib/src/accumulator_sink.dart
index d92b4a8..ef01a76 100644
--- a/lib/src/accumulator_sink.dart
+++ b/lib/src/accumulator_sink.dart
@@ -23,6 +23,7 @@
     _events.clear();
   }
 
+  @override
   void add(T event) {
     if (_isClosed) {
       throw StateError("Can't add to a closed sink.");
@@ -31,6 +32,7 @@
     _events.add(event);
   }
 
+  @override
   void close() {
     _isClosed = true;
   }
diff --git a/lib/src/byte_accumulator_sink.dart b/lib/src/byte_accumulator_sink.dart
index d1fab06..44cf178 100644
--- a/lib/src/byte_accumulator_sink.dart
+++ b/lib/src/byte_accumulator_sink.dart
@@ -30,14 +30,16 @@
     _buffer.clear();
   }
 
-  void add(List<int> bytes) {
+  @override
+  void add(List<int> chunk) {
     if (_isClosed) {
       throw StateError("Can't add to a closed sink.");
     }
 
-    _buffer.addAll(bytes);
+    _buffer.addAll(chunk);
   }
 
+  @override
   void addSlice(List<int> chunk, int start, int end, bool isLast) {
     if (_isClosed) {
       throw StateError("Can't add to a closed sink.");
@@ -47,6 +49,7 @@
     if (isLast) _isClosed = true;
   }
 
+  @override
   void close() {
     _isClosed = true;
   }
diff --git a/lib/src/codepage.dart b/lib/src/codepage.dart
index 296a116..cfc58db 100644
--- a/lib/src/codepage.dart
+++ b/lib/src/codepage.dart
@@ -162,7 +162,9 @@
 /// A code page is a way to map bytes to character.
 /// As such, it can only represent 256 different characters.
 class CodePage extends Encoding {
+  @override
   final CodePageDecoder decoder;
+  @override
   final String name;
   CodePageEncoder? _encoder;
 
@@ -213,13 +215,16 @@
   int operator [](int byte) => decoder._char(byte);
 
   /// Encodes [input] using `encoder.convert`.
+  @override
   Uint8List encode(String input, {int? invalidCharacter}) =>
       encoder.convert(input, invalidCharacter: invalidCharacter);
 
   /// Decodes [bytes] using `encoder.convert`.
+  @override
   String decode(List<int> bytes, {bool allowInvalid = false}) =>
       decoder.convert(bytes, allowInvalid: allowInvalid);
 
+  @override
   CodePageEncoder get encoder => _encoder ??= decoder._createEncoder();
 }
 
@@ -237,6 +242,7 @@
   /// or byte values not defined as a character in the code page,
   /// are emitted as U+FFFD (the Unicode invalid character).
   /// If not true, the bytes must be calid and defined characters.
+  @override
   String convert(List<int> input, {bool allowInvalid = false});
 
   CodePageEncoder _createEncoder();
@@ -277,6 +283,7 @@
   _NonBmpCodePageDecoder(String characters) : this._(_buildMapping(characters));
   _NonBmpCodePageDecoder._(this._characters);
 
+  @override
   int _char(int byte) => _characters[byte];
 
   static Uint32List _buildMapping(String characters) {
@@ -296,6 +303,7 @@
     return result;
   }
 
+  @override
   CodePageEncoder _createEncoder() {
     var result = <int, int>{};
     for (var i = 0; i < 256; i++) {
@@ -307,6 +315,7 @@
     return CodePageEncoder._(result);
   }
 
+  @override
   String convert(List<int> input, {bool allowInvalid = false}) {
     var buffer = Uint32List(input.length);
     for (var i = 0; i < input.length; i++) {
@@ -328,8 +337,10 @@
     }
   }
 
+  @override
   int _char(int byte) => _characters.codeUnitAt(byte);
 
+  @override
   String convert(List<int> bytes, {bool allowInvalid = false}) {
     if (allowInvalid) return _convertAllowInvalid(bytes);
     var count = bytes.length;
@@ -364,6 +375,7 @@
     return String.fromCharCodes(codeUnits);
   }
 
+  @override
   CodePageEncoder _createEncoder() => CodePageEncoder._bmp(_characters);
 }
 
@@ -396,6 +408,7 @@
   /// If [input] contains characters that are not available
   /// in this code page, they are replaced by the [invalidCharacter] byte,
   /// and then [invalidCharacter] must have been supplied.
+  @override
   Uint8List convert(String input, {int? invalidCharacter}) {
     if (invalidCharacter != null) {
       RangeError.checkValueInInterval(
diff --git a/lib/src/hex.dart b/lib/src/hex.dart
index 28e9203..9de28ed 100644
--- a/lib/src/hex.dart
+++ b/lib/src/hex.dart
@@ -22,7 +22,9 @@
 ///
 /// This should be used via the [hex] field.
 class HexCodec extends Codec<List<int>, String> {
+  @override
   HexEncoder get encoder => hexEncoder;
+  @override
   HexDecoder get decoder => hexDecoder;
 
   const HexCodec._();
diff --git a/lib/src/hex/decoder.dart b/lib/src/hex/decoder.dart
index 9e3a122..0a65f45 100644
--- a/lib/src/hex/decoder.dart
+++ b/lib/src/hex/decoder.dart
@@ -20,17 +20,19 @@
 class HexDecoder extends Converter<String, List<int>> {
   const HexDecoder._();
 
-  List<int> convert(String string) {
-    if (!string.length.isEven) {
+  @override
+  List<int> convert(String input) {
+    if (!input.length.isEven) {
       throw FormatException(
-          "Invalid input length, must be even.", string, string.length);
+          "Invalid input length, must be even.", input, input.length);
     }
 
-    var bytes = Uint8List(string.length ~/ 2);
-    _decode(string.codeUnits, 0, string.length, bytes, 0);
+    var bytes = Uint8List(input.length ~/ 2);
+    _decode(input.codeUnits, 0, input.length, bytes, 0);
     return bytes;
   }
 
+  @override
   StringConversionSink startChunkedConversion(Sink<List<int>> sink) =>
       _HexDecoderSink(sink);
 }
@@ -49,6 +51,7 @@
 
   _HexDecoderSink(this._sink);
 
+  @override
   void addSlice(String string, int start, int end, bool isLast) {
     RangeError.checkValidRange(start, end, string.length);
 
@@ -77,9 +80,11 @@
     if (isLast) _close(string, end);
   }
 
+  @override
   ByteConversionSink asUtf8Sink(bool allowMalformed) =>
       _HexDecoderByteSink(_sink);
 
+  @override
   void close() => _close();
 
   /// Like [close], but includes [string] and [index] in the [FormatException]
@@ -108,8 +113,10 @@
 
   _HexDecoderByteSink(this._sink);
 
+  @override
   void add(List<int> chunk) => addSlice(chunk, 0, chunk.length, false);
 
+  @override
   void addSlice(List<int> chunk, int start, int end, bool isLast) {
     RangeError.checkValidRange(start, end, chunk.length);
 
@@ -137,6 +144,7 @@
     if (isLast) _close(chunk, end);
   }
 
+  @override
   void close() => _close();
 
   /// Like [close], but includes [chunk] and [index] in the [FormatException]
diff --git a/lib/src/hex/encoder.dart b/lib/src/hex/encoder.dart
index 261a5d9..c45884f 100644
--- a/lib/src/hex/encoder.dart
+++ b/lib/src/hex/encoder.dart
@@ -19,8 +19,10 @@
 class HexEncoder extends Converter<List<int>, String> {
   const HexEncoder._();
 
-  String convert(List<int> bytes) => _convert(bytes, 0, bytes.length);
+  @override
+  String convert(List<int> input) => _convert(input, 0, input.length);
 
+  @override
   ByteConversionSink startChunkedConversion(Sink<String> sink) =>
       _HexEncoderSink(sink);
 }
@@ -32,16 +34,19 @@
 
   _HexEncoderSink(this._sink);
 
+  @override
   void add(List<int> chunk) {
     _sink.add(_convert(chunk, 0, chunk.length));
   }
 
+  @override
   void addSlice(List<int> chunk, int start, int end, bool isLast) {
     RangeError.checkValidRange(start, end, chunk.length);
     _sink.add(_convert(chunk, start, end));
     if (isLast) _sink.close();
   }
 
+  @override
   void close() {
     _sink.close();
   }
diff --git a/lib/src/identity_codec.dart b/lib/src/identity_codec.dart
index 9da7bca..2df6144 100644
--- a/lib/src/identity_codec.dart
+++ b/lib/src/identity_codec.dart
@@ -2,6 +2,7 @@
 
 class _IdentityConverter<T> extends Converter<T, T> {
   _IdentityConverter();
+  @override
   T convert(T input) => input;
 }
 
@@ -17,12 +18,15 @@
 class IdentityCodec<T> extends Codec<T, T> {
   const IdentityCodec();
 
+  @override
   Converter<T, T> get decoder => _IdentityConverter<T>();
+  @override
   Converter<T, T> get encoder => _IdentityConverter<T>();
 
   /// Fuse with an other codec.
   ///
   /// Fusing with the identify converter is a no-op, so this always return
   /// [other].
+  @override
   Codec<T, R> fuse<R>(Codec<T, R> other) => other;
 }
diff --git a/lib/src/percent.dart b/lib/src/percent.dart
index b06d08f..4a2f377 100644
--- a/lib/src/percent.dart
+++ b/lib/src/percent.dart
@@ -31,7 +31,9 @@
 /// interprets `+` as `0x2B` rather than `0x20` as emitted by
 /// [Uri.encodeQueryComponent].
 class PercentCodec extends Codec<List<int>, String> {
+  @override
   PercentEncoder get encoder => percentEncoder;
+  @override
   PercentDecoder get decoder => percentDecoder;
 
   const PercentCodec._();
diff --git a/lib/src/percent/decoder.dart b/lib/src/percent/decoder.dart
index 456c888..d74ae9c 100644
--- a/lib/src/percent/decoder.dart
+++ b/lib/src/percent/decoder.dart
@@ -28,18 +28,20 @@
 class PercentDecoder extends Converter<String, List<int>> {
   const PercentDecoder._();
 
-  List<int> convert(String string) {
+  @override
+  List<int> convert(String input) {
     var buffer = Uint8Buffer();
-    var lastDigit = _decode(string.codeUnits, 0, string.length, buffer);
+    var lastDigit = _decode(input.codeUnits, 0, input.length, buffer);
 
     if (lastDigit != null) {
       throw FormatException(
-          "Input ended with incomplete encoded byte.", string, string.length);
+          "Input ended with incomplete encoded byte.", input, input.length);
     }
 
     return buffer.buffer.asUint8List(0, buffer.length);
   }
 
+  @override
   StringConversionSink startChunkedConversion(Sink<List<int>> sink) =>
       _PercentDecoderSink(sink);
 }
@@ -60,6 +62,7 @@
 
   _PercentDecoderSink(this._sink);
 
+  @override
   void addSlice(String string, int start, int end, bool isLast) {
     RangeError.checkValidRange(start, end, string.length);
 
@@ -91,9 +94,11 @@
     if (isLast) _close(string, end);
   }
 
+  @override
   ByteConversionSink asUtf8Sink(bool allowMalformed) =>
       _PercentDecoderByteSink(_sink);
 
+  @override
   void close() => _close();
 
   /// Like [close], but includes [string] and [index] in the [FormatException]
@@ -124,8 +129,10 @@
 
   _PercentDecoderByteSink(this._sink);
 
+  @override
   void add(List<int> chunk) => addSlice(chunk, 0, chunk.length, false);
 
+  @override
   void addSlice(List<int> chunk, int start, int end, bool isLast) {
     RangeError.checkValidRange(start, end, chunk.length);
 
@@ -156,6 +163,7 @@
     if (isLast) _close(chunk, end);
   }
 
+  @override
   void close() => _close();
 
   /// Like [close], but includes [chunk] and [index] in the [FormatException]
diff --git a/lib/src/percent/encoder.dart b/lib/src/percent/encoder.dart
index a861468..7f14fc9 100644
--- a/lib/src/percent/encoder.dart
+++ b/lib/src/percent/encoder.dart
@@ -22,8 +22,10 @@
 class PercentEncoder extends Converter<List<int>, String> {
   const PercentEncoder._();
 
-  String convert(List<int> bytes) => _convert(bytes, 0, bytes.length);
+  @override
+  String convert(List<int> input) => _convert(input, 0, input.length);
 
+  @override
   ByteConversionSink startChunkedConversion(Sink<String> sink) =>
       _PercentEncoderSink(sink);
 }
@@ -35,16 +37,19 @@
 
   _PercentEncoderSink(this._sink);
 
+  @override
   void add(List<int> chunk) {
     _sink.add(_convert(chunk, 0, chunk.length));
   }
 
+  @override
   void addSlice(List<int> chunk, int start, int end, bool isLast) {
     RangeError.checkValidRange(start, end, chunk.length);
     _sink.add(_convert(chunk, start, end));
     if (isLast) _sink.close();
   }
 
+  @override
   void close() {
     _sink.close();
   }
diff --git a/lib/src/string_accumulator_sink.dart b/lib/src/string_accumulator_sink.dart
index c8bdf75..98b476e 100644
--- a/lib/src/string_accumulator_sink.dart
+++ b/lib/src/string_accumulator_sink.dart
@@ -23,23 +23,26 @@
     _buffer.clear();
   }
 
-  void add(String chunk) {
+  @override
+  void add(String str) {
     if (_isClosed) {
       throw StateError("Can't add to a closed sink.");
     }
 
-    _buffer.write(chunk);
+    _buffer.write(str);
   }
 
-  void addSlice(String chunk, int start, int end, bool isLast) {
+  @override
+  void addSlice(String str, int start, int end, bool isLast) {
     if (_isClosed) {
       throw StateError("Can't add to a closed sink.");
     }
 
-    _buffer.write(chunk.substring(start, end));
+    _buffer.write(str.substring(start, end));
     if (isLast) _isClosed = true;
   }
 
+  @override
   void close() {
     _isClosed = true;
   }
diff --git a/pubspec.yaml b/pubspec.yaml
index b31eef1..ad683ae 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,17 +1,16 @@
 name: convert
-version: 3.0.1
+version: 3.0.2
 description: >-
   Utilities for converting between data representations.
   Provides a number of Sink, Codec, Decoder, and Encoder types.
 repository: https://github.com/dart-lang/convert
 
 environment:
-  sdk: '>=2.12.0-0 <3.0.0'
+  sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
   typed_data: ^1.3.0
 
 dev_dependencies:
-  charcode: ^1.2.0
-  pedantic: ^1.10.0
-  test: ^1.16.0-nullsafety.9
+  lints: ^1.0.0
+  test: ^1.16.0
diff --git a/test/accumulator_sink_test.dart b/test/accumulator_sink_test.dart
index 2c280e1..1f0b204 100644
--- a/test/accumulator_sink_test.dart
+++ b/test/accumulator_sink_test.dart
@@ -6,7 +6,7 @@
 import 'package:test/test.dart';
 
 void main() {
-  var sink;
+  late AccumulatorSink sink;
   setUp(() {
     sink = AccumulatorSink<int>();
   });
@@ -25,13 +25,19 @@
   });
 
   test("clear() clears the events", () {
-    sink..add(1)..add(2)..add(3);
+    sink
+      ..add(1)
+      ..add(2)
+      ..add(3);
     expect(sink.events, equals([1, 2, 3]));
 
     sink.clear();
     expect(sink.events, isEmpty);
 
-    sink..add(4)..add(5)..add(6);
+    sink
+      ..add(4)
+      ..add(5)
+      ..add(6);
     expect(sink.events, equals([4, 5, 6]));
   });
 
diff --git a/test/hex_test.dart b/test/hex_test.dart
index bbb1808..5e8fa28 100644
--- a/test/hex_test.dart
+++ b/test/hex_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:convert';
 
 import 'package:convert/convert.dart';
 import 'package:test/test.dart';
@@ -80,7 +81,7 @@
 
     group("with chunked conversion", () {
       late List<List<int>> results;
-      var sink;
+      late StringConversionSink sink;
       setUp(() {
         results = [];
         var controller = StreamController<List<int>>(sync: true);
diff --git a/test/percent_test.dart b/test/percent_test.dart
index 7a7bf81..9075ea1 100644
--- a/test/percent_test.dart
+++ b/test/percent_test.dart
@@ -3,103 +3,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:convert';
 
-import 'package:charcode/ascii.dart';
 import 'package:convert/convert.dart';
 import 'package:test/test.dart';
 
 void main() {
   group("encoder", () {
     test("doesn't percent-encode unreserved characters", () {
-      expect(
-          percent.encode([
-            $a,
-            $b,
-            $c,
-            $d,
-            $e,
-            $f,
-            $g,
-            $h,
-            $i,
-            $j,
-            $k,
-            $l,
-            $m,
-            $n,
-            $o,
-            $p,
-            $q,
-            $r,
-            $s,
-            $t,
-            $u,
-            $v,
-            $w,
-            $x,
-            $y,
-            $z,
-            $A,
-            $B,
-            $C,
-            $D,
-            $E,
-            $F,
-            $G,
-            $H,
-            $I,
-            $J,
-            $K,
-            $L,
-            $M,
-            $N,
-            $O,
-            $P,
-            $Q,
-            $R,
-            $S,
-            $T,
-            $U,
-            $V,
-            $W,
-            $X,
-            $Y,
-            $Z,
-            $0,
-            $1,
-            $2,
-            $3,
-            $4,
-            $5,
-            $6,
-            $7,
-            $8,
-            $9,
-            $dash,
-            $dot,
-            $underscore,
-            $tilde
-          ]),
-          equals(
-              "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~"));
+      var safeChars = "abcdefghijklmnopqrstuvwxyz"
+          "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+          "0123456789-._~";
+      expect(percent.encode([...safeChars.codeUnits]), equals(safeChars));
     });
 
     test("percent-encodes reserved ASCII characters", () {
-      expect(
-          percent.encode([
-            $space,
-            $backquote,
-            $open_brace,
-            $at,
-            $open_bracket,
-            $comma,
-            $division,
-            $caret,
-            $close_brace,
-            $del,
-            $nul,
-            $percent
-          ]),
+      expect(percent.encode([..." `{@[,/^}\x7f\x00%".codeUnits]),
           equals("%20%60%7B%40%5B%2C%2F%5E%7D%7F%00%25"));
     });
 
@@ -108,8 +27,7 @@
     });
 
     test("mixes encoded and unencoded characters", () {
-      expect(
-          percent.encode([$a, $plus, $b, $equal, 0x80]), equals("a%2Bb%3D%80"));
+      expect(percent.encode([..."a+b=\x80".codeUnits]), equals("a%2Bb%3D%80"));
     });
 
     group("with chunked conversion", () {
@@ -119,7 +37,7 @@
         controller.stream.listen(results.add);
         var sink = percent.encoder.startChunkedConversion(controller.sink);
 
-        sink.add([$a, $plus, $b, $equal, 0x80]);
+        sink.add([..."a+b=\x80".codeUnits]);
         expect(results, equals(["a%2Bb%3D%80"]));
 
         sink.add([0x00, 0x01, 0xfe, 0xff]);
@@ -154,40 +72,26 @@
 
   group("decoder", () {
     test("converts percent-encoded strings to byte arrays", () {
-      expect(percent.decode("a%2Bb%3D%801"),
-          equals([$a, $plus, $b, $equal, 0x80, $1]));
+      expect(
+          percent.decode("a%2Bb%3D%801"), equals([..."a+b=\x801".codeUnits]));
     });
 
     test("supports lowercase letters", () {
-      expect(
-          percent.decode("a%2bb%3d%80"), equals([$a, $plus, $b, $equal, 0x80]));
+      expect(percent.decode("a%2bb%3d%80"), equals([..."a+b=\x80".codeUnits]));
     });
 
     test("supports more aggressive encoding", () {
-      expect(percent.decode("%61%2E%5A"), equals([$a, $dot, $Z]));
+      expect(percent.decode("%61%2E%5A"), equals([..."a.Z".codeUnits]));
     });
 
     test("supports less aggressive encoding", () {
-      expect(
-          percent.decode(" `{@[,/^}\x7F\x00"),
-          equals([
-            $space,
-            $backquote,
-            $open_brace,
-            $at,
-            $open_bracket,
-            $comma,
-            $division,
-            $caret,
-            $close_brace,
-            $del,
-            $nul
-          ]));
+      var chars = " `{@[,/^}\x7F\x00";
+      expect(percent.decode(chars), equals([...chars.codeUnits]));
     });
 
     group("with chunked conversion", () {
       late List<List<int>> results;
-      var sink;
+      late StringConversionSink sink;
       setUp(() {
         results = [];
         var controller = StreamController<List<int>>(sync: true);
@@ -200,14 +104,14 @@
         expect(
             results,
             equals([
-              [$a, $plus, $b, $equal, 0x80, $1]
+              [..."a+b=\x801".codeUnits]
             ]));
 
         sink.add("%00%01%FE%FF");
         expect(
             results,
             equals([
-              [$a, $plus, $b, $equal, 0x80, $1],
+              [..."a+b=\x801".codeUnits],
               [0x00, 0x01, 0xfe, 0xff]
             ]));
       });
@@ -217,31 +121,31 @@
         expect(
             results,
             equals([
-              [$a, $b]
+              [..."ab".codeUnits]
             ]));
 
         sink.add("2");
         expect(
             results,
             equals([
-              [$a, $b]
+              [..."ab".codeUnits]
             ]));
 
         sink.add("0cd%2");
         expect(
             results,
             equals([
-              [$a, $b],
-              [$space, $c, $d]
+              [..."ab".codeUnits],
+              [..." cd".codeUnits]
             ]));
 
         sink.add("0");
         expect(
             results,
             equals(([
-              [$a, $b],
-              [$space, $c, $d],
-              [$space]
+              [..."ab".codeUnits],
+              [..." cd".codeUnits],
+              [..." ".codeUnits]
             ])));
       });
 
@@ -275,7 +179,7 @@
         expect(
             results,
             equals([
-              [$a, $b]
+              [..."ab".codeUnits]
             ]));
         expect(() => sink.close(), throwsFormatException);
       });
@@ -285,7 +189,7 @@
         expect(
             results,
             equals([
-              [$a, $b]
+              [..."ab".codeUnits]
             ]));
         expect(() => sink.close(), throwsFormatException);
       });
@@ -295,7 +199,7 @@
         expect(
             results,
             equals([
-              [$a, $b]
+              [..."ab".codeUnits]
             ]));
 
         expect(() => sink.addSlice("ab%", 0, 3, true), throwsFormatException);
@@ -306,7 +210,7 @@
         expect(
             results,
             equals([
-              [$a, $b]
+              [..."ab".codeUnits]
             ]));
 
         expect(() => sink.addSlice("ab%2", 0, 3, true), throwsFormatException);
diff --git a/test/string_accumulator_sink_test.dart b/test/string_accumulator_sink_test.dart
index 2bef19b..6c5b9fa 100644
--- a/test/string_accumulator_sink_test.dart
+++ b/test/string_accumulator_sink_test.dart
@@ -6,7 +6,7 @@
 import 'package:test/test.dart';
 
 void main() {
-  var sink;
+  late StringAccumulatorSink sink;
   setUp(() {
     sink = StringAccumulatorSink();
   });