PackageTrack
Sign in Get early access

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 2026
2026
Release Pre-release

Releases

latest 8
  1. 5.3.5 20 Feb 2026
    Release notes
    • Added AI skill files in skills/ directory for AI coding assistants
    • Added AI-Assisted Development section to README
    Open source →
  2. 5.3.4 25 Nov 2025
    Release notes

    Remove generated test folder from example

    Open source →
    Release notes
    • Restored working example project (was corrupted with memory test code)
    • Memory test example preserved in memory_test/ folder
    Open source →
  3. 5.3.3 03 Nov 2025
    Release notes

    Release v5.3.3: Use absolute GitHub URL for logo

    Open source →
    Release notes
    • Use absolute GitHub URL for logo in README
    Open source →
  4. 5.3.1 03 Nov 2025
    Release notes

    Release v5.3.3: Use absolute GitHub URL for logo

    Open source →
    Release notes
    • Fixed button sizing in README for pub.dev display
    Open source →
  5. 5.3.0 03 Nov 2025
    Release notes

    Release v5.3.3: Use absolute GitHub URL for logo

    Open source →
    Release notes

    New Feature

    • Added lazy parameter to all operators (addresses issue #1)
      • All operators now support an optional lazy parameter to control when chains subscribe to sources
      • All operators default to eager initialization (lazy=false) to ensure .value is always correct
      • Eager initialization subscribes to sources immediately, making .value reliable 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)

    Bug Fix

    • Fixed mergeWith stale value issue
      • Previously, mergeWith only subscribed to sources when a listener was added
      • This meant .value could be stale if sources changed before adding a listener
      • Now with eager initialization (default), all sources are immediately subscribed
      • .value updates 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)
        

    Implementation Details

    • Added lazy parameter to FunctionalValueNotifier base class
    • Updated all operator classes: SelectValueNotifier, MapValueNotifier, WhereValueNotifier, DebouncedValueNotifier, AsyncValueNotifier
    • Updated CombiningValueNotifier classes (2-6 sources) with lazy parameter
    • Added chainInitialized check in all dispose() methods to prevent errors when disposing uninitialized chains

    Tests

    • Fixed test in lazy_init_chain_test.dart to pass lazy: true for mergeWith
    • lazy_value_test.dart demonstrates the fix with output showing correct eager initialization
    • All 200+ tests pass ✓
    Open source →
  6. 5.2.0 02 Nov 2025
    Release notes

    Release v5.3.3: Use absolute GitHub URL for logo

    Open source →
    Release notes

    New Feature

    • Added fallbackValue parameter to where() operator
      • Solves the long-standing issue where the initial value always passes through the filter
      • When provided, fallbackValue is 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 fallbackValue behavior:
      • 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 ✓
    Open source →
  7. 5.1.0 01 Nov 2025
    Release notes

    NEW FEATURE: Merged with listenable_collections

    This release merges the listenable_collections package into listen_it, creating a unified package for reactive primitives in Flutter.

    Breaking Changes

    • None! This is a backward-compatible feature addition
    • All existing listen_it functionality remains unchanged

    New Features

    • Reactive Collections: Added ListNotifier, MapNotifier, and SetNotifier from 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 ValueListenable and ValueListenableBuilder

    Migration from listenable_collections

    If you were using listenable_collections, migration is simple:

    1. Update pubspec.yaml: Replace listenable_collections with listen_it: ^5.1.0
    2. Update imports: Change import 'package:listenable_collections/listenable_collections.dart'; to import 'package:listen_it/listen_it.dart';
    3. 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.2 dependency (required for collections)
    Open source →
  8. 5.0.0 19 Jul 2025
    Release notes
    • 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.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive