f_k_chart 1.6.0 copy "f_k_chart: ^1.6.0" to clipboard
f_k_chart: ^1.6.0 copied to clipboard

outdated

equity market chart.

example/lib/main.dart

import 'dart:convert';
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:f_k_chart/f_k_chart.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<KLineEntity> datas = [];
  bool showLoading = true;
  MainState _mainState = MainState.BOLL;
  bool _volHidden = false;
  SecondaryState _secondaryState = SecondaryState.MACD;
  bool isLine = true;
  bool isChinese = true;
  bool _hideGrid = false;
  bool _showNowPrice = true;
  bool isChangeUI = false;
  String uniqueMark;

  @override
  void initState() {
    super.initState();
    getData('1day');
  }

  @override
  Widget build(BuildContext context) {
    return ListView(
      shrinkWrap: true,
      children: <Widget>[
        Stack(children: <Widget>[
          Container(
            height: 450,
            width: double.infinity,
            child: KlineScrollWidget(
              datas,
              isLine: isLine,
              pointWidth: isLine ? 1.3 : ChartStyle.pointWidth,
              canScale: isLine ? false : true,
              maxRectWidth: isLine ? null : 15.0,
              minRectWidth: isLine ? null : 4.0,
              mainState: _mainState,
              secondaryState: _secondaryState,
              edge: EdgeInsets.only(right: 0.0),
              userFriendlyMinPointWidth: 2,
              uniqueMark: uniqueMark,
            ),
          ),
          if (showLoading)
            Container(
                width: double.infinity,
                height: 450,
                alignment: Alignment.center,
                child: const CircularProgressIndicator()),
        ]),
        buildButtons(),
      ],
    );
  }

  Widget buildButtons() {
    return Wrap(
      alignment: WrapAlignment.spaceEvenly,
      children: <Widget>[
        button("Time Mode", onPressed: () {
          isLine = true;
          uniqueMark = Random().nextDouble().toString();
        }),
        button("K Line Mode", onPressed: () {
          isLine = false;
          uniqueMark = Random().nextDouble().toString();
        }),
        button("Line:MA", onPressed: () => _mainState = MainState.MA),
        button("Line:BOLL", onPressed: () => _mainState = MainState.BOLL),
        button("Hide Line", onPressed: () => _mainState = MainState.NONE),
        button("Secondary Chart:MACD", onPressed: () => _secondaryState = SecondaryState.MACD),
        button("Secondary Chart:KDJ", onPressed: () => _secondaryState = SecondaryState.KDJ),
        button("Secondary Chart:RSI", onPressed: () => _secondaryState = SecondaryState.RSI),
        button("Secondary Chart:WR", onPressed: () => _secondaryState = SecondaryState.WR),
        button("Secondary Chart:Hide", onPressed: () => _secondaryState = SecondaryState.NONE),
        button(_volHidden ? "Show Vol" : "Hide Vol", onPressed: () => _volHidden = !_volHidden),
        button("Change Language", onPressed: () => isChinese = !isChinese),
        button(_hideGrid ? "Show Grid" : "Hide Grid", onPressed: () => _hideGrid = !_hideGrid),
        button(_showNowPrice ? "Hide Now Price" : "Show Now Price", onPressed: () => _showNowPrice = !_showNowPrice),
        button("Customize UI", onPressed: () {
          getData('1day');
        }),
        button("getData", onPressed: () {
          getData2('1day');
        }),
      ],
    );
  }

  Widget button(String text, {VoidCallback onPressed}) {
    return TextButton(
      onPressed: () {
        if (onPressed != null) {
          onPressed();
          setState(() {});
        }
      },
      child: Text(text),
      style: TextButton.styleFrom(
        primary: Colors.white,
        minimumSize: const Size(88, 44),
        padding: const EdgeInsets.symmetric(horizontal: 16.0),
        shape: const RoundedRectangleBorder(
          borderRadius: BorderRadius.all(Radius.circular(2.0)),
        ),
        backgroundColor: Colors.blue,
      ),
    );
  }

  void getData(String period) {
    uniqueMark = Random().nextDouble().toString();
    var parseJson = {"ch": "market.btcusdt.kline.1day", "status": "ok", "ts": 1633682856059, "data": []};
    final list = parseJson['data'] as List<dynamic>;
    datas = list
        .map((item) {
          KLineEntity k = KLineEntity.fromJson(item as Map<String, dynamic>);
          k.time = item['id'];
          return k;
        })
        .toList()
        .reversed
        .toList()
        .cast<KLineEntity>();
    DataUtil.calculate(datas);
    showLoading = false;
    Future.delayed(Duration(seconds: 3), () {
      setState(() {
        //print('${datas}');
      });
    });
    // final Future<String> future = getIPAddress(period);
    // future.then((String result) {
    //   final Map parseJson = json.decode(result) as Map<dynamic, dynamic>;
    //   final list = parseJson['data'] as List<dynamic>;
    //   datas = list
    //       .map((item) => KLineEntity.fromJson(item as Map<String, dynamic>))
    //       .toList()
    //       .reversed
    //       .toList()
    //       .cast<KLineEntity>();
    //   DataUtil.calculate(datas!);
    //   showLoading = false;
    //   setState(() {});
    // }).catchError((_) {
    //   showLoading = false;
    //   setState(() {});
    //   print('### datas error $_');
    // });
  }

  void getData2(String period) {
    uniqueMark = Random().nextDouble().toString();

    List data = getData3();
    var parseJson = {
      "ch": "market.btcusdt.kline.1day",
      "status": "ok",
      "ts": 1633682856059,
       "data":data
    };
    final list = parseJson['data'] as List<dynamic>;
    datas = list
        .map((item) {
          KLineEntity k = KLineEntity.fromJson(item as Map<String, dynamic>);
          // k.time = item['time'];
          k.vol = double.parse(item['time'].toString());
          return k;
        })
        .toList()
        .reversed
        .toList()
        .cast<KLineEntity>();
    DataUtil.calculate(datas);
    showLoading = false;
    Future.delayed(Duration(seconds: 3), () {
      setState(() {
        //print('${datas}');
      });
    });
    // final Future<String> future = getIPAddress(period);
    // future.then((String result) {
    //   final Map parseJson = json.decode(result) as Map<dynamic, dynamic>;
    //   final list = parseJson['data'] as List<dynamic>;
    //   datas = list
    //       .map((item) => KLineEntity.fromJson(item as Map<String, dynamic>))
    //       .toList()
    //       .reversed
    //       .toList()
    //       .cast<KLineEntity>();
    //   DataUtil.calculate(datas!);
    //   showLoading = false;
    //   setState(() {});
    // }).catchError((_) {
    //   showLoading = false;
    //   setState(() {});
    //   print('### datas error $_');
    // });
  }

  List getData3() {
    return [];
  }

// //获取火币数据,需要翻墙
// Future<String> getIPAddress(String? period) async {
//   var url =
//       'https://api.huobi.br.com/market/history/kline?period=${period ?? '1day'}&size=300&symbol=btcusdt';
//   late String result;
//   final response = await http.get(Uri.parse(url));
//   if (response.statusCode == 200) {
//     result = response.body;
//   } else {
//     print('Failed getting IP address');
//   }
//   return result;
// }
}
0
likes
0
pub points
0%
popularity

Publisher

unverified uploader

equity market chart.

Homepage

License

unknown (LICENSE)

Dependencies

cupertino_icons, flutter, intl, rxdart

More

Packages that depend on f_k_chart