imp_trading_chart 0.2.1
imp_trading_chart: ^0.2.1 copied to clipboard
A controller-driven trading line chart for Flutter with real-time updates, configurable gestures, and viewport-based CustomPainter rendering.
imp_trading_chart #
A controller-driven trading line chart for Flutter
Inspired by TradingView Lightweight Charts
๐ Overview #
imp_trading_chart is a rendering-first trading line chart for Flutter.
It is not a widget-heavy chart, but a CustomPainter + viewport-driven engine designed for performance, precision, and scalability.
Built specifically for:
- ๐ Financial & stock market apps
- ๐น Crypto & trading platforms
- โก Real-time price feeds
- ๐ง Viewport-limited rendering for large datasets
Quick Start #
import 'package:imp_trading_chart/imp_trading_chart.dart';
ImpChart.trading(candles: candles);
// Inspect by holding without allowing drag or zoom.
ImpChart.trading(
candles: candles,
gestureMode: ChartGestureMode.holdOnly,
);
The current renderer draws a line through each candle's close price. The
Candle model also carries OHLC and optional volume values; candle bodies and
volume panels are planned for a later release.
Gesture Modes #
| Mode | Pan | Pinch | Double tap reset | Hold crosshair |
|---|---|---|---|---|
mixed |
Yes | Yes | Yes | Yes |
navigation |
Yes | Yes | Yes | No |
holdOnly |
No | No | No | Yes |
panOnly |
Yes | No | No | No |
zoomOnly |
No | Yes | No | No |
none |
No | No | No | No |
trading defaults to mixed; simple and compact default to navigation;
minimal stays non-interactive unless given a mode or overrides. Existing
enableGestures: false always disables chart gestures. To change one action:
ImpChart.trading(
candles: candles,
gestureOverrides: const ChartGestureOverrides(
pinchZoom: false,
doubleTapReset: false,
),
);
Gesture modes are per widget. Charts may share one controller yet use different
modes. Modes do not change programmatic controller commands or live following.
The Go to live button remains tappable when a chart is in none or holdOnly.
โจ Visual Themes & Styles #
๐ฌ Live Interaction Demos #
๐ Real App Integration #
โถ๏ธ Full Market Simulation #
โ Drag / Pan Viewport #
๐ Pinch-to-Zoom #
๐ Chart Variants #
| Variant | Use Case |
|---|---|
| Trading | Interactive close-price line chart |
| Simple | Clean chart with labels |
| Compact | Dashboards & lists |
| Minimal | Sparklines & previews |
๐ง Engine-First Architecture #
Candle Data (List<Candle>)
โ
ChartEngine (viewport, scaling, mapping)
โ
CustomPainter (pixels only)
Why this matters #
- โ No widget-per-candle
- โ No DateTime math in render loop
- โ No unnecessary rebuilds
โ
Only visible candles are processed
Pan and zoom update a bounded viewport; rendering processes the visible slice.
The reproducible 10k-candle comparison benchmark is in test/benchmark/.
๐ฆ Installation #
dependencies:
imp_trading_chart: ^0.2.1
๐ Basic Usage #
ImpChart.trading(
candles: candles
);
Controller Usage #
final controller = ImpChartController(
defaultVisibleCount: 120,
);
ImpChart.trading(
candles: candles,
controller: controller,
);
controller.scrollToLatest();
controller.zoomIn();
Live Update UX #
imp_trading_chart now uses a preserve-context live-update policy:
- If the chart is at or near the latest candles, it keeps following live data.
- If the user pans into older history, incoming candles update the data without force-scrolling.
- If new candles arrive while detached, the chart shows a
Go to live (+count)action that scrolls back to the latest candles on tap. - Calling
scrollToLatest()or resetting the viewport restores follow-latest behavior.
The internal near-latest threshold is currently 3 candles.
Architecture Highlights #
ImpChartstays easy to use and keeps the controller optional.ImpChartControlleris the public orchestration API for pan, zoom, reset, fit-all, scroll-to-latest, and live updates.ChartPainteris now a rendering shell that delegates to focused internal renderers for line, grid, axis labels, current price, ripple, and crosshair drawing.- Widget-only mechanics are split into focused internal helpers for pulse animation, gesture translation, and live-update affordances.
PaddingResolverowns axis/current-price layout spacing so renderers stay drawing-focused.
๐ฏ Candle Model #
Candle(
time: 1700000000,
open: 100,
high: 120,
low: 90,
close: 110,
);
โ ๏ธ The engine does not aggregate data.
๐งช Example App #
A complete interactive demo is included in the example/ folder.
cd example
flutter run
๐ Documentation #
- ๐ Architecture & Internals โ DOCUMENTATION.md
- โก Quick API Guide โ QUICK_REFERENCE.md
๐ Public API Stability #
Only these are public & stable:
ImpChartImpChartControllerChartGestureModeandChartGestureOverrides- Controller snapshots and
ChartEvent
CandleChartStyleChartLayoutLabelStyles
๐ง Roadmap #
- Indicator overlays (MA, EMA, VWAP)
- Additional theme presets
- Extended visual regression coverage
๐ค Contributing #
We welcome contributions! Please see our CONTRIBUTING.md for guidelines on how to get started, project structure, and our CODE_OF_CONDUCT.md.
For a deep dive into the engine's internals, check out ARCHITECTURE.md.
๐ Stability & Versioning #
This project follows Semantic Versioning (semver).
- v0.x.x: Public API is considered stable but minor breaking changes may occur in minor versions while we approach 1.0.
- Internal APIs: Everything under
lib/src/is considered internal and is not part of the stable public API. Use with caution.
๐ License #
MIT License. See LICENSE for details.