convert_object, collection 및 intl에서 유용한 확장 기능과 핵심 API를 다시 내보내는 다트 유틸리티 패키지입니다. 자주 사용하는 작업인 형식 변환, 컬렉션 조작 및 국제화에 편리한 메서드를 제공하여 개발자의 생산성을 높입니다. 가볍고 다양한 플랫폼에서 일상적인 다트 작업을 간소화하도록 설계되었습니다. 외부 종속성 없이 일관되고 재사용 가능한 유틸리티 함수가 필요한 프로젝트에 이상적입니다.
A batteries-included utility package for Dart. One import gives you type-safe
conversions, ergonomic extensions, a serious debouncer, stream superpowers,
and the APIs you already know from convert_object, collection, and intl.
This repository ships a package-specific agent plugin for
Claude Code and OpenAI Codex (this is tooling for coding agents, not
a runtime feature of the Dart package). It teaches the agent the exact
dart_helper_utils APIs - utility member names and semantics, the
Debouncer/throttle/stream lifecycles, the v5-to-v6 breaking migration, and
version-aware upgrades.
Start a new agent session after installing so the skills load. Then try
prompts like "debounce this search field with dart_helper_utils and clean it
up on dispose" or "migrate this project from dart_helper_utils 5.x to 6.x",
or invoke a skill explicitly in Claude Code, e.g.
/dart-helper-utils:use-dart-helper-utils.
The plugin is installed from this Git repository (not from the pub.dev
archive), contains markdown skills only - no hooks, no MCP servers, no
telemetry - and its version tracks the package version. Details, the full
capability list, updating, and uninstalling are in
tooling/ai/dart-helper-utils/README.md.
// Hold events until you are ready for them.final paused = sensorStream.asPausable();
// Cap a noisy source at 5 events per second.final safe = eventStream.rateLimit(5, constDuration(seconds: 1));
// Group events into fixed-size or time-based batches.final batched = logStream.bufferCount(100);
final windowed = logStream.window(constDuration(seconds: 1));
// Behaviour-subject semantics: late subscribers see the last value.final replay = priceStream.withLatestValue();
Bounded concurrency and soft timeouts
// Run at most 4 uploads at once, results in completion order.final urls = await files.mapConcurrent(upload, parallelism: 4);
// Soft timeout: the original task keeps running in the background.try {
final report = awaitTimeUtils.runWithTimeout(
task: fetchReport,
timeout: constDuration(seconds: 5),
);
} onTimeoutException {
showSlowNetworkBanner();
}
Deep map utilities for config-heavy apps
final nested = {
'user': {'name': 'Omar', 'roles': ['admin', 'editor']},
};
final flat = nested.flatMap();
// {user.name: Omar, user.roles.0: admin, user.roles.1: editor}print(flat.unflatten()); // round-trips back to nestedfinal payload = {'users': [{'name': 'A'}, {'name': 'B'}]};
print(payload.getPath('users[1].name')); // B
Also in the box
Everyday sugar that you would otherwise write by hand: the full
stringo string toolkit (case conversion,
slugify, truncate, mask, whitespace normalization) re-exported here,
format validators (isValidEmail, isUuid), parseDuration, MIME checks
(isPDF, isImage, isFont), date helpers (isBetween, addBusinessDays,
daysInMonth), Intl formatters (formatAsCurrency, formatAsCompact,
toOrdinal, pluralize), URI builders (rebuild, mergeQueryParameters,
appendPathSegment), and Iterable<num> statistics (mean, median,
percentile, standardDeviation).
Browse the full API: https://pub.dev/documentation/dart_helper_utils/latest/
Migration notes
6.1.0 moved string text transformations into
stringo, which is re-exported here.
Call sites are unchanged; only explicit extension type names differ (see
the CHANGELOG). Depend on stringo directly if you want the
string helpers without the rest of this package.
v6 moved conversion logic into convert_object, which is re-exported here.
Duplicate iterable and map helpers were removed in favor of
package:collection, which is now also re-exported.
Old JSON helpers like safelyEncodedJson are now toJsonString(...) or
encodeWithIndent from convert_object.
Full guide: https://github.com/omar-hanafy/dart_helper_utils/blob/main/migration_guides.md