diff --git a/CHANGELOG.md b/CHANGELOG.md
index 68aa55b..194b5cc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
 ## 1.2.0
 
 * Adds `Characters.empty` constant and makes `Characters("")` return it.
+* Changes the argument type of `Characters.contains` to (covariant) `String`.
+  The implementation still accepts `Object?`, so it can be cast to
+  `Iterable<Object?>`, but you get warned if you try to call directly with a
+  non-`String`.
 
 ## 1.1.0
 
diff --git a/lib/src/characters.dart b/lib/src/characters.dart
index b8b7949..a020674 100644
--- a/lib/src/characters.dart
+++ b/lib/src/characters.dart
@@ -54,15 +54,19 @@
   /// as well as controlling the iteration in more detail.
   CharacterRange get iteratorAtEnd;
 
-  /// Whether [other] is an element of this sequence of
-  /// others.
+  /// Whether [singleCharacterString] occurs in this
+  /// sequence of characters.
   ///
-  /// Returns false if [other] is not a string containing
-  /// a single character,
-  /// because then it is not a single element of this [Iterable]
-  /// of characters.
+  /// Returns true only if [singleCharacterString] is
+  /// a string containing a *single* character
+  /// and that character is one of the characters
+  /// in this character sequence, and false otherwise.
+  /// This behavior is inherited from `Iterable<String>`,
+  /// which is why it is not [Character] based.
+  /// Use [containsAll] for a method which acts like
+  /// [String.contains] for characters.
   @override
-  bool contains(Object? other);
+  bool contains(covariant String singleCharacterString);
 
   /// Whether this sequence of characters contains [other]
   /// as a subsequence.
diff --git a/lib/src/characters_impl.dart b/lib/src/characters_impl.dart
index 389400c..63140c8 100644
--- a/lib/src/characters_impl.dart
+++ b/lib/src/characters_impl.dart
@@ -113,16 +113,16 @@
   }
 
   @override
-  bool contains(Object? element) {
-    if (element is String) {
-      if (element.isEmpty) return false;
-      var next =
-          Breaks(element, 0, element.length, stateSoTNoBreak).nextBreak();
-      if (next != element.length) return false;
-      // [element] is single grapheme cluster.
-      return _indexOf(string, element, 0, string.length) >= 0;
-    }
-    return false;
+  // ignore: avoid_renaming_method_parameters
+  bool contains(Object? singleCharacterString) {
+    if (singleCharacterString is! String) return false;
+    if (singleCharacterString.isEmpty) return false;
+    var next = Breaks(singleCharacterString, 0, singleCharacterString.length,
+            stateSoTNoBreak)
+        .nextBreak();
+    if (next != singleCharacterString.length) return false;
+    // [singleCharacterString] is single grapheme cluster.
+    return _indexOf(string, singleCharacterString, 0, string.length) >= 0;
   }
 
   @override
diff --git a/pubspec.yaml b/pubspec.yaml
index 0e5a5cf..065c191 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: characters
-version: 1.1.1-dev
+version: 1.2.0
 description: String replacement with operations that are Unicode/grapheme cluster aware.
 repository: https://www.github.com/dart-lang/characters
 
