Flutter交易图表展示插件trade_chart的使用
Flutter交易图表展示插件trade_chart的使用
Trade Chart 是由 PT. Mirae Asset Sekuritas Indonesia 特别使用的插件。
修改者
以下是完整的示例代码,用于展示如何在 Flutter 应用程序中使用 trade_chart
插件。
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:http/io_client.dart';
import 'package:trade_chart/chart_style.dart';
import 'package:trade_chart/chart_translations.dart';
import 'package:trade_chart/flutter_k_chart.dart';
import 'package:trade_chart/k_chart_widget.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.green,
),
darkTheme: ThemeData(
brightness: Brightness.dark,
),
themeMode: ThemeMode.system,
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, this.title}) : super(key: key);
final String? title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<KLineEntity>? datas;
bool showLoading = true;
List<DepthEntity>? _bids, _asks;
bool isChangeUI = false;
ChartStyle chartStyle = ChartStyle();
ChartColors chartColors = ChartColors();
IOClient _certification() {
final ioc = HttpClient();
ioc.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
return IOClient(ioc);
}
[@override](/user/override)
void initState() {
chartColors.minColor = Colors.grey;
chartColors.maxColor = Colors.grey;
chartColors.nowPriceUpColor = Colors.yellow;
chartColors.nowPriceDnColor = Colors.yellow;
chartColors.nowPriceTextColor = Colors.black;
chartColors.gridColor = Colors.black54;
chartColors.dnColor = Colors.red;
chartColors.upColor = Colors.green;
chartColors.defaultTextColor = Colors.white;
chartColors.selectFillColor = Colors.grey.withOpacity(1);
chartColors.crossTextColor = Colors.black;
chartColors.hCrossColor = Colors.grey;
chartColors.vCrossColor = Colors.grey;
chartColors.selectBorderColor = Colors.black;
chartColors.infoWindowNormalColor = Colors.black;
chartColors.infoWindowTitleColor = Colors.black;
chartStyle.candleLineWidth = 2;
chartStyle.nowPriceLineWidth = 1;
chartStyle.volWidth = 6;
chartColors.defaultTextColor = Colors.black;
super.initState();
getData('1day');
rootBundle.loadString('assets/depth.json').then((result) {
final parseJson = json.decode(result);
final tick = parseJson['tick'] as Map<String, dynamic>;
final List<DepthEntity> bids = (tick['bids'] as List<dynamic>)
.map<DepthEntity>(
(item) => DepthEntity(item[0] as double, item[1] as double))
.toList();
final List<DepthEntity> asks = (tick['asks'] as List<dynamic>)
.map<DepthEntity>(
(item) => DepthEntity(item[0] as double, item[1] as double))
.toList();
initDepth(bids, asks);
});
}
void initDepth(List<DepthEntity>? bids, List<DepthEntity>? asks) {
if (bids == null || asks == null || bids.isEmpty || asks.isEmpty) return;
_bids = [];
_asks = [];
double amount = 0.0;
bids.sort((left, right) => left.price.compareTo(right.price));
bids.reversed.forEach((item) {
amount += item.vol;
item.vol = amount;
_bids!.insert(0, item);
});
amount = 0.0;
asks.sort((left, right) => left.price.compareTo(right.price));
asks.forEach((item) {
amount += item.vol;
item.vol = amount;
_asks!.add(item);
});
setState(() {});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Container(
height: double.infinity,
width: double.infinity,
child: KChartWidget(
datas,
chartStyle,
chartColors,
isLine: false,
mainState: MainState.BOLL,
volHidden: false,
secondaryState: SecondaryState.NONE,
fixedLength: 2,
timeFormat: TimeFormat.YEAR_MONTH_DAY,
translations: kChartTranslations,
isChinese: false,
hideGrid: false,
bgColor: [Colors.transparent, Colors.transparent],
),
),
),
);
}
void getData(String period) {
final Future<String> future = getIPAddress(period);
future.then((String result) {
final Map parseJson = jsonDecode(result) as Map<dynamic, dynamic>;
final list = parseJson['data'] as List<dynamic>;
datas = list
.map((item) => KLineEntity.fromJson(item as Map<String, dynamic>))
.toList()
.cast<KLineEntity>();
DataUtil.calculate(datas!);
showLoading = false;
setState(() {});
}).catchError((_) {
showLoading = false;
setState(() {});
print('### datas error $_');
});
}
Future<String> getIPAddress(String? period) async {
var url =
'https://api.huobi.br.com/market/history/kline?period=1day&size=300&symbol=btcusdt';
late String result;
final _http = _certification();
final response = await _http.get(Uri.parse(url));
if (response.statusCode == 200) {
result = response.body;
} else {
print('Failed getting IP address');
}
return result;
}
}
更多关于Flutter交易图表展示插件trade_chart的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter交易图表展示插件trade_chart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
trade_chart
是一个用于在 Flutter 应用程序中展示交易图表的插件。它可以帮助开发者轻松地创建和自定义交易图表,如蜡烛图、折线图等。以下是如何使用 trade_chart
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 trade_chart
插件的依赖:
dependencies:
flutter:
sdk: flutter
trade_chart: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入包
在你的 Dart 文件中导入 trade_chart
包:
import 'package:trade_chart/trade_chart.dart';
3. 创建交易数据
你需要准备一些交易数据来展示在图表中。通常,这些数据是一个包含时间、开盘价、最高价、最低价和收盘价的列表。
List<CandleData> candleData = [
CandleData(
time: DateTime(2023, 10, 1),
open: 100.0,
high: 110.0,
low: 95.0,
close: 105.0,
),
CandleData(
time: DateTime(2023, 10, 2),
open: 105.0,
high: 115.0,
low: 100.0,
close: 110.0,
),
// 添加更多数据...
];
4. 使用 TradeChart 组件
现在你可以使用 TradeChart
组件来展示交易图表:
class TradeChartExample extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Trade Chart Example'),
),
body: TradeChart(
candleData: candleData,
volumeData: [], // 如果需要展示成交量数据
// 其他自定义选项
),
);
}
}
5. 自定义图表
TradeChart
组件提供了多种自定义选项,例如:
candleWidth
: 蜡烛图的宽度candleColors
: 蜡烛图的颜色volumeHeight
: 成交量图的高度onScale
: 缩放回调onPan
: 平移回调
TradeChart(
candleData: candleData,
volumeData: [], // 如果需要展示成交量数据
candleWidth: 8.0,
candleColors: CandleColors(
upColor: Colors.green,
downColor: Colors.red,
),
volumeHeight: 100.0,
onScale: (scale) {
// 处理缩放事件
},
onPan: (pan) {
// 处理平移事件
},
);
6. 运行应用
最后,运行你的 Flutter 应用程序,你应该能够看到一个展示交易图表的界面。
void main() {
runApp(MaterialApp(
home: TradeChartExample(),
));
}