Add CaseInsensitiveEquality.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fa10220..8794fa7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.12.0
+
+* Add `CaseInsensitiveEquality`.
+
 ## 1.11.0
 
 * Add `EqualityMap` and `EqualitySet` classes which use `Equality` objects for
diff --git a/lib/src/equality.dart b/lib/src/equality.dart
index 09f10a6..39e4ad5 100644
--- a/lib/src/equality.dart
+++ b/lib/src/equality.dart
@@ -382,3 +382,17 @@
 
   bool isValidKey(Object o) => o is Iterable || o is Map || _base.isValidKey(o);
 }
+
+/// String equality that's insensitive to differences in ASCII case.
+///
+/// Non-ASCII characters are compared as-is, with no conversion.
+class CaseInsensitiveEquality implements Equality<String> {
+  const CaseInsensitiveEquality();
+
+  bool equals(String string1, String string2) =>
+      equalsIgnoreAsciiCase(string1, string2);
+
+  int hash(String string) => hashIgnoreAsciiCase(string);
+
+  bool isValidKey(Object object) => object is String;
+}
diff --git a/pubspec.yaml b/pubspec.yaml
index 13b81f2..ad3f111 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: collection
-version: 1.11.0
+version: 1.12.0
 author: Dart Team <misc@dartlang.org>
 description: Collections and utilities functions and classes related to collections.
 homepage: https://www.github.com/dart-lang/collection
diff --git a/test/equality_test.dart b/test/equality_test.dart
index e609608..7d9246d 100644
--- a/test/equality_test.dart
+++ b/test/equality_test.dart
@@ -160,6 +160,21 @@
     expect(colleq.equals(s1, s2),
         isTrue);
   });
+
+  test("CaseInsensitiveEquality", () {
+    var equality = const CaseInsensitiveEquality();
+    expect(equality.equals("foo", "foo"), isTrue);
+    expect(equality.equals("fOo", "FoO"), isTrue);
+    expect(equality.equals("FoO", "fOo"), isTrue);
+    expect(equality.equals("foo", "bar"), isFalse);
+    expect(equality.equals("fÕÕ", "fõõ"), isFalse);
+
+    expect(equality.hash("foo"), equals(equality.hash("foo")));
+    expect(equality.hash("fOo"), equals(equality.hash("FoO")));
+    expect(equality.hash("FoO"), equals(equality.hash("fOo")));
+    expect(equality.hash("foo"), isNot(equals(equality.hash("bar"))));
+    expect(equality.hash("fÕÕ"), isNot(equals(equality.hash("fõõ"))));
+  });
 }
 
 /// Wrapper objects for an `id` value.