diff --git a/AUTHORS b/AUTHORS
index 76494b6..80712fd 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -4,4 +4,5 @@
 #   Name/Organization <email address>
 
 Google Inc.
+AAABramenko (https://github.com/AAAbramenko)
 TimWhiting tim@whitings.org
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 85f17ee..f52dcc7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,6 @@
 ## 1.16.0-dev
 
+* Add `BoolList` class for space-efficient lists of boolean values.
 * Use a stable sort algorithm in the `IterableExtension.sortedBy` method.
 * Add `min`, `max`, `minOrNull` and `maxOrNull` getters to `IterableDoubleExtension`, `IterableNumberExtension` and `IterableIntegerExtension`
 
diff --git a/lib/src/boollist.dart b/lib/src/boollist.dart
index cf23b57..5f9dba3 100644
--- a/lib/src/boollist.dart
+++ b/lib/src/boollist.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -17,8 +17,12 @@
 
   static const int _entrySignBitIndex = 31;
 
+  /// The length of the list.
+  ///
+  /// Maybe be shorter than the capacity of the backing store.
   int _length;
 
+  /// Backing store for bits.
   Uint32List _data;
 
   BoolList._(this._data, this._length);
@@ -94,10 +98,20 @@
   ///
   /// This constructor creates a growable [BoolList] when [growable] is true;
   /// otherwise, it returns a fixed-length list.
-  factory BoolList.from(Iterable<bool> elements, {bool growable = false}) {
+  factory BoolList.of(Iterable<bool> elements, {bool growable = false}) {
     return BoolList._selectType(elements.length, growable)..setAll(0, elements);
   }
 
+  /// The number of boolean values in this list.
+  ///
+  /// The valid indices for a list are `0` through `length - 1`.
+  ///
+  /// If the list is growable, setting the length will change the
+  /// number of values.
+  /// Setting the length to a smaller number will remove all
+  /// values with indices greater than or equal to the new length.
+  /// Setting the length to a larger number will increase the number of
+  /// values, and all the new values will be `false`.
   @override
   int get length => _length;
 
@@ -110,9 +124,9 @@
   }
 
   @override
-  void operator []=(int index, bool val) {
+  void operator []=(int index, bool value) {
     RangeError.checkValidIndex(index, this, 'index', _length);
-    _setBit(index, val);
+    _setBit(index, value);
   }
 
   @override
@@ -145,23 +159,23 @@
     }
   }
 
-  /// Returns custom iterator for [BoolList].
+  /// Creates an iterator for the elements of this [BoolList].
   ///
-  /// To provide null safety [Iterator.current] getter of returned iterator
-  /// returns `false` before and after iteration process.
+  /// The [Iterator.current] getter of the returned iterator
+  /// is `false` when the iterator has no current element.
   @override
   Iterator<bool> get iterator => _BoolListIterator(this);
 
-  void _setBit(int index, bool val) {
-    if (val) {
+  void _setBit(int index, bool value) {
+    if (value) {
       _data[index >> _entryShift] |= 1 << (index & _entrySignBitIndex);
     } else {
       _data[index >> _entryShift] &= ~(1 << (index & _entrySignBitIndex));
     }
   }
 
-  static int _lengthInWords(int bitsLength) {
-    return (bitsLength + (_bitsPerEntry - 1)) >> _entryShift;
+  static int _lengthInWords(int bitLength) {
+    return (bitLength + (_bitsPerEntry - 1)) >> _entryShift;
   }
 }
 
@@ -194,7 +208,7 @@
     if (length > _data.length * BoolList._bitsPerEntry) {
       _data = Uint32List(
         BoolList._lengthInWords(length * _growthFactor),
-      )..setAll(0, _data);
+      )..setRange(0, _data.length, _data);
     }
     _length = length;
   }
diff --git a/test/boollist_test.dart b/test/boollist_test.dart
index 263186c..0027ba7 100644
--- a/test/boollist_test.dart
+++ b/test/boollist_test.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -34,9 +34,9 @@
     );
   });
 
-  test('BoolList.from()', () {
+  test('BoolList.of()', () {
     var src = List.generate(1024, generator);
-    expect(BoolList.from(src), src);
+    expect(BoolList.of(src), src);
   });
 
   group('[], []=', () {
