import 'package:charts_flutter/flutter.dart' as charts; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:fcs/model/chart_model.dart'; import 'package:fcs/theme/theme.dart'; import 'package:fcs/vo/po.dart'; import 'package:fcs/widget/local_text.dart'; class POBalanceChart_ extends StatefulWidget { @override _POBalanceChartState createState() => _POBalanceChartState(); } class _POBalanceChartState extends State { static final numberFormatter = new NumberFormat("#,###"); List chartSummary = new List(); List> series; @override void initState() { super.initState(); var chartModel = Provider.of(context, listen: false); if (mounted) { load(chartModel); } } Future load(ChartModel chartModel) async { var _u = await chartModel.loadPOBalancesForBuyer_(); if (_u == null) return; setState(() { this.chartSummary = _u; }); } @override Widget build(BuildContext context) { List> series = [ charts.Series( id: "Subscribers", data: this.chartSummary, domainFn: (POBuyerData series, _) => series.status, measureFn: (POBuyerData series, _) => series.amount, colorFn: (POBuyerData series, _) => charts.ColorUtil.fromDartColor(series.getColor), labelAccessorFn: (POBuyerData series, _) => '${numberFormatter.format(series.amount)}'), ]; return Container( height: 200, child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ LocalText(context, 'po.balances', color: primaryColor, fontSize: 16), IconButton( icon: Icon( Icons.refresh, color: primaryColor, ), onPressed: () { _load(); }, ) ], ), Expanded( child: charts.BarChart( series, animate: true, vertical: false, defaultRenderer: new charts.BarRendererConfig( barRendererDecorator: new charts.BarLabelDecorator( labelPosition: charts.BarLabelPosition.auto, ), ), ), ), ], ), ); } Future _load() async { var chartModel = Provider.of(context); var _s = await chartModel.loadPOBalancesForBuyer_(); if (_s == null) return; setState(() { this.chartSummary = _s; }); } }