使用flutter创建股票的蜡烛图



我正试图使用flutter创建一个web应用程序,以在Panda数据帧中显示股票的蜡烛图,该数据是从雅虎财务包中收到的。

有没有一种简单的方法可以在不从头开始创建图表小部件的情况下呈现这种图表?

您可以将此包与Flask结合使用作为后端web框架。

下面是一个飞镖代码的示例:

这将创建图表:

child: KChartWidget(
datas,
isLine: isLine,
mainState: MainState.NONE,
secondaryState: SecondaryState.NONE,
fixedLength: 2,
timeFormat: TimeFormat.YEAR_MONTH_DAY,
isChinese: false,
bgColor: [
Color(0xFF121128),
Color(0xFF121128),
Color(0xFF121128)
],
),

datas的类型应为List<KLineEntity>

以下函数处理从后端获取数据:

void getData(String period) async {
String result = await getIPAddress('$period');
try {
List parseJson = convert.json.decode(result);
datas = parseJson
.map((item) => KLineEntity.fromJson(item))
.toList()
.cast<KLineEntity>();
DataUtil.calculate(datas);
showLoading = false;
setState(() {});
} on Exception catch (_) {
setState(() {});
print('Error');
}
}
Future<String> getIPAddress(String period) async {
String url = "http://127.0.0.1:5000/?stock_symbol=$stockSymbol";
String result;
var response = await http.get(url);
if (response.statusCode == 200) {
result = response.body;
} else {
print('Failed getting IP address');
}
return result;
}

这就是您从后端获取数据的方式:

from flask import Flask, request, jsonify
from flask_cors import CORS, cross_origin
import requests
import yfinance as yf
app = Flask(__name__)
cors = CORS(app)
app.config['CORS_HEADERS'] = 'Content-Type'
@app.route('/', methods=['GET'])
@cross_origin()
def get_data_as_json():
if request.method == 'GET':
stock_symbol = str(request.args['stock_symbol'])
stock_data = yf.Ticker(stock_symbol)
data = stock_data.history(period="max", interval='1d')
data = data[['Open', 'High', 'Low', 'Close', 'Volume']]
r = requests.get('https://api.huobi.br.com/market/history/kline?period=1day&size=1&symbol=btcusdt')
latest_ts = r.json()['data'][0]['id']
temp = [ts for ts in range(latest_ts, latest_ts - 86400 * len(data), -86400)]
temp.reverse()
data['id'] = temp
data['amount'] = 0.0
data['count'] = 0.0
data_renamed = data.rename(columns={'Open': 'open', 'High': 'high',
'Low': 'low', 'Close': 'close',
'Volume': 'vol'})
data_renamed_as_json = data_renamed.to_json(orient="records")
return data_renamed_as_json

if __name__ == '__main__':
app.run(port=5000)

最新更新