trading_chart_flutter 0.0.1
trading_chart_flutter: ^0.0.1 copied to clipboard
Pure-Dart candlestick trading chart widget for Flutter, with custom RenderObject pipeline, Lightweight Charts-style API, and TradingView-like gestures.
import 'package:flutter/material.dart';
import 'okx_chart_example.dart';
import 'synthetic_chart_example.dart';
void main() {
runApp(const ExampleApp());
}
class ExampleApp extends StatelessWidget {
const ExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'trading_chart_flutter example',
debugShowCheckedModeBanner: false,
theme: ThemeData.dark(),
home: const HomePage(),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
appBar: AppBar(
backgroundColor: const Color(0xFF131722),
title: const Text('trading_chart_flutter'),
),
body: SafeArea(
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_DemoTile(
title: 'Synthetic feed',
subtitle: 'Random walk price, 1m candles, local generator.',
onTap: () => Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => const SyntheticChartExample(),
),
),
),
const SizedBox(height: 12),
_DemoTile(
title: 'OKX live (BTC-USDT)',
subtitle:
'REST history + WebSocket trades, real exchange data.',
onTap: () => Navigator.of(context).push(
MaterialPageRoute(builder: (_) => const OkxChartExample()),
),
),
],
),
),
),
);
}
}
class _DemoTile extends StatelessWidget {
const _DemoTile({
required this.title,
required this.subtitle,
required this.onTap,
});
final String title;
final String subtitle;
final VoidCallback onTap;
@override
Widget build(BuildContext context) {
return Material(
color: const Color(0xFF131722),
borderRadius: BorderRadius.circular(10),
child: InkWell(
borderRadius: BorderRadius.circular(10),
onTap: onTap,
child: Padding(
padding: const EdgeInsets.all(16),
child: Row(
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
const SizedBox(height: 4),
Text(
subtitle,
style: const TextStyle(
color: Colors.white70,
fontSize: 13,
),
),
],
),
),
const Icon(Icons.chevron_right, color: Colors.white54),
],
),
),
),
);
}
}