listen_it
Reactive primitives for Flutter - observable collections and powerful operators. Work with ValueNotifiers like Streams. Includes ListNotifier, MapNotifier, SetNotifier. Previously published as functional_listener.
5.3.5
9.5K downloads/mo
#3008 most downloaded on pub.dev
flutter-it/listen_it
What this package is like to depend on
Last release 6 months ago
20 Feb 2026
Ships fairly regularly
a new release about every 3 months
Nearly every release is documented
notes for 8 of 8 stable releases
Nothing withdrawn
no release was ever pulled
1 years old
8 releases · first in 2025
7 releases in the last 12 months
see the full history below
Release timeline
8 releases · Jul 2025 to Feb 2026Releases
latest 8-
5.3.520 Feb 2026Release notes
Open source →- Added AI skill files in
skills/directory for AI coding assistants - Added AI-Assisted Development section to README
- Added AI skill files in
-
5.3.425 Nov 2025Release notes
Open source →- Restored working example project (was corrupted with memory test code)
- Memory test example preserved in
memory_test/folder
-
5.3.303 Nov 2025 -
5.3.103 Nov 2025 -
5.3.003 Nov 2025Release notes
Open source →New Feature
- Added
lazyparameter to all operators (addresses issue #1)- All operators now support an optional
lazyparameter to control when chains subscribe to sources - All operators default to eager initialization (
lazy=false) to ensure.valueis always correct - Eager initialization subscribes to sources immediately, making
.valuereliable even before adding listeners - Lazy initialization (
lazy=true) delays subscription until first listener is added (memory optimization) - Breaking change: Chains now initialize eagerly by default (opt-in to lazy with
lazy: true)
- All operators now support an optional
Bug Fix
- Fixed
mergeWithstale value issue- Previously,
mergeWithonly subscribed to sources when a listener was added - This meant
.valuecould be stale if sources changed before adding a listener - Now with eager initialization (default), all sources are immediately subscribed
.valueupdates immediately when any source changes, even without listeners- Example that now works correctly:
final notifier1 = ValueNotifier<int>(0); final notifier2 = ValueNotifier<int>(100); final merged = notifier1.mergeWith([notifier2]); notifier2.value = 200; // Change source WITHOUT listener print(merged.value); // Now correctly prints 200 (was 0 in v5.2.1)
- Previously,
Implementation Details
- Added
lazyparameter toFunctionalValueNotifierbase class - Updated all operator classes:
SelectValueNotifier,MapValueNotifier,WhereValueNotifier,DebouncedValueNotifier,AsyncValueNotifier - Updated
CombiningValueNotifierclasses (2-6 sources) withlazyparameter - Added
chainInitializedcheck in alldispose()methods to prevent errors when disposing uninitialized chains
Tests
- Fixed test in
lazy_init_chain_test.dartto passlazy: truefor mergeWith lazy_value_test.dartdemonstrates the fix with output showing correct eager initialization- All 200+ tests pass ✓
- Added
-
5.2.002 Nov 2025Release notes
Open source →New Feature
- Added
fallbackValueparameter towhere()operator- Solves the long-standing issue where the initial value always passes through the filter
- When provided,
fallbackValueis used if the initial value doesn't match the filter condition - Backward compatible - existing code continues to work without changes
- Example:
source.where((x) => x.isEven, fallbackValue: 0)
Tests
- Added 3 new tests for
fallbackValuebehavior:- Fallback ignored when initial value matches filter
- Fallback used when initial value doesn't match filter
- Backward compatibility: no fallback provided (old behavior)
- All 119 tests pass ✓
- Added
-
5.1.001 Nov 2025Release notes
Open source →NEW FEATURE: Merged with listenable_collections
This release merges the
listenable_collectionspackage intolisten_it, creating a unified package for reactive primitives in Flutter.Breaking Changes
- None! This is a backward-compatible feature addition
- All existing
listen_itfunctionality remains unchanged
New Features
- Reactive Collections: Added
ListNotifier,MapNotifier, andSetNotifierfrom listenable_collections- Lists, Maps, and Sets that automatically notify listeners when their contents change
- Support for different notification modes (normal, always, manual)
- Transaction support for batching multiple operations
- Full compatibility with
ValueListenableandValueListenableBuilder
Migration from listenable_collections
If you were using
listenable_collections, migration is simple:- Update
pubspec.yaml: Replacelistenable_collectionswithlisten_it: ^5.1.0 - Update imports: Change
import 'package:listenable_collections/listenable_collections.dart';toimport 'package:listen_it/listen_it.dart'; - All APIs remain identical - no code changes needed!
Exports
- Main export (
listen_it.dart): Includes both operators and collections - Selective export (
collections.dart): Collections only - All existing exports remain unchanged
Dependencies
- Added
collection: ^1.17.2dependency (required for collections)
-
5.0.019 Jul 2025Release notes
Open source →- Although this version doesn't add any new functionality but is just the rebranding of the original functional_listener package I decided to keep the version numbers so it is is easy for anyone switching to the new package and to preserve the history.