FxDart 101
A hands-on course. Every lesson is a short lecture with live demos and a playground — the code compiles with the real Dart compiler and runs in your browser. Work through the sections in order, or jump to any function below.
fx →
map →
filter →
take →
toList,
then
concurrent.
Jobs:
debounced search
·
bounded concurrent fetch.
📖 Functional Programming Theory — the textbook behind the course →
📒 See it in action: Daily Ledger — a full app built with FxDart →
Section 1 · Getting started
The pipeline model: build lazily, run with a terminal operator.
Section 2 · Generating sequences
Sources you can pipe from.
Section 3 · Transforming
Reshape each element — lazily.
Section 4 · Filtering & deduplication
Keep what you need.
- where
- whereNot
- nonNulls
- distinct
- distinctBy
- uniqStrict
- uniqAdjacent
- takeUniqBy
- difference
- differenceBy
- intersection
- intersectionBy
- compress
Section 5 · Slicing
Windows, prefixes, suffixes, and chunks.
- take
- takeLast
- takeWhile
- takeWhileRight
- takeUntilInclusive
- skip
- dropRight
- skipWhile
- dropWhileRight
- dropUntil
- slice
- chunk
- windowed
- pairwise
- split
Section 6 · Combining
Multiple sequences in, one out.
- append
- prepend
- concat
- zip
- zip3
- zipWith
- indexed
- …WithIndex (map, filter, fold)
- transpose
- reverse
- fork
- tee
- tee3
- ifEmpty
Section 7 · Aggregating
Terminal operators that pull the pipeline and produce a value.
- reduce
- fold
- foldRight
- reduceLazy
- sum
- sumBy
- average
- averageBy
- min
- max
- maxBy
- minBy
- count
- join
- groupBy
- groupedBy
- indexBy
- countBy
- foldBy
- foldByOrSkip
- countWhere
- sort
- sortBy
- sortByDesc
- partition
Section 8 · Access & predicates
Pull single values and test elements.
- firstOrNull
- lastOrNull
- elementAtOrNull
- firstWhereOrNull
- indexWhere
- contains
- isEmpty
- every
- any
- predicates (isNull, isString, …)
Section 9 · Object (Map) functions
FxTS object utilities, ported to Dart Maps.
- fromEntries
- omit
- pick
- omitBy
- pickBy
- prop
- props
- mapValues
- evolve
- compactObject
- resolveProps
- isMatch
- matches
Section 10 · Function utilities
Combinators and helpers.
- identity
- always
- tap
- apply
- juxt
- fxPipe
- memoize
- negate
- not
- predicate combinators
- when
- unless
- throwError
- throwIf
- cases
- add
- gt · gte · lt · lte
- delay & sleep
- unicodeToList
- curried & uncurried
Section 11 · Async & concurrency
The FxAsyncIterable model — FxDart's superpower.
- toAsync
- async variants (mapAsync, …)
- Stream bridges
- concurrent
- mapConcurrent
- concurrentPool
- retry
- timeout
- using
- concurrent or parallel
- parallel
Section 12 · Util
Rate limiting and randomness.
Section 13 · Typed errors
The Kotlin Arrow approach, ported: either, Raise, bind, ensure, error accumulation with Nel, and pipeline-fused validation. Straight-line code, typed failures, no wrapper tower.
- typed errors — full guide
- Either
- Either combinators
- either & Raise scope
- nullable
- NonEmptyList (Nel)
- accumulation (zipOrAccumulate, …)
- Either × pipelines
Section 14 · Event streams (push)
FxDart's push side — Rx-style operators over plain Dart Streams, bridging into the pull pipelines.
- fxEvents
- constructors
- peek · whenComplete
- sampleOn
- combineLatest
- withLatestFrom
- switchMap
- mergeMap
- switchLatest
- mergeScan
- race
- waitAll
- combine
- stopOn
- chunkOn
- windowOn
- groupsBy
- spaceBy
- debounceOn
- retryOn
- onErrorResume
- attempt
- mapEither
- separated
- share
- shareReplay
- LiveValue
- FxSubscriptions
- materialize
Section 15 · Jobs
Cross-surface programs — the reason to import one package rather than three.