FxDart 101
Практический курс. Каждый урок — это короткая лекция с живыми демо и playground: код компилируется настоящим компилятором Dart и выполняется в вашем браузере. Проходите разделы по порядку или переходите сразу к нужной функции ниже.
fx →
map →
filter →
take →
toList,
затем
concurrent.
Задачи:
поиск с debounce
·
ограниченный concurrent fetch.
📖 Теория функционального программирования — учебник в основе курса →
📒 Посмотрите в деле: Daily Ledger — полноценное приложение на FxDart →
Раздел 1 · Начало работы
Модель конвейера: строим лениво, запускаем терминальным оператором.
Раздел 2 · Генерация последовательностей
Источники, с которых начинается конвейер.
Раздел 3 · Преобразование
Меняем форму каждого элемента — лениво.
Раздел 4 · Фильтрация & дедупликация
Оставляем только нужное.
- where
- whereNot
- nonNulls
- distinct
- distinctBy
- uniqStrict
- uniqAdjacent
- takeUniqBy
- difference
- differenceBy
- intersection
- intersectionBy
- compress
Раздел 5 · Срезы
Окна, префиксы, суффиксы и блоки.
- take
- takeLast
- takeWhile
- takeWhileRight
- takeUntilInclusive
- skip
- dropRight
- skipWhile
- dropWhileRight
- dropUntil
- slice
- chunk
- windowed
- pairwise
- split
Раздел 6 · Объединение
На входе несколько последовательностей, на выходе одна.
- append
- prepend
- concat
- zip
- zip3
- zipWith
- indexed
- …WithIndex (map, filter, fold)
- transpose
- reverse
- fork
- tee
- tee3
- ifEmpty
Раздел 7 · Агрегация
Терминальные операторы: тянут конвейер и выдают значение.
- 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
Раздел 8 · Доступ & предикаты
Получаем отдельные значения и проверяем элементы.
- firstOrNull
- lastOrNull
- elementAtOrNull
- firstWhereOrNull
- indexWhere
- contains
- isEmpty
- every
- any
- predicates (isNull, isString, …)
Раздел 9 · Функции для объектов (Map)
Утилиты FxTS для объектов, портированные на Map в Dart.
- fromEntries
- omit
- pick
- omitBy
- pickBy
- prop
- props
- mapValues
- evolve
- compactObject
- resolveProps
- isMatch
- matches
Раздел 10 · Утилиты для функций
Комбинаторы и вспомогательные функции.
- 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
Раздел 11 · Асинхронность & конкурентность
Модель FxAsyncIterable — главное преимущество FxDart.
- toAsync
- async variants (mapAsync, …)
- Stream bridges
- concurrent
- mapConcurrent
- concurrentPool
- retry
- timeout
- using
- concurrent or parallel
- parallel
Раздел 12 · Util
Ограничение частоты и случайность.
Раздел 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
Раздел 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
Раздел 15 · Jobs
Cross-surface programs — the reason to import one package rather than three.