问题描述
我希望将数据从Firebase传递到分为7列的颤动图中,以便将其分成几天,以便将其传递到条形图中。我已经尝试将total_Sunday + total_Monday + total_Tuesday + total_Wednesday + total_Thursday + total_Friday + total_Saturday加上我的总和,但是它不起作用,它正在将这些周的总和与我添加的每笔新交易相加。
这是我的代码,用于从Firebase和条形图中读取数据。
void read_data() async {
database.once().then(
(DataSnapshot snapshot) {
Map<dynamic,dynamic> values = snapshot.value;
//for loop
values.forEach(
(key,value) {
setState(() {
_amountController = value['amount'];
_deuration = value['Deuration'];
if (deuration == _deuration) {
if (value['Day'] == "Monday") {
total_Monday = total_Monday + double.parse(_amountController);
print("Monday");
print(total_Monday);
}
if (value['Day'] == "Tuesday") {
total_Tuesday =
total_Tuesday + double.parse(_amountController);
print("Tuesday");
print(total_Tuesday);
}
if (value['Day'] == "Wednesday") {
total_Wednesday =
total_Wednesday + double.parse(_amountController);
print("Wednesday");
print(total_Wednesday);
}
if (value['Day'] == "Thursday") {
total_Thursday =
total_Thursday + double.parse(_amountController);
print("Thursday");
print(total_Thursday);
}
if (value['Day'] == "Friday") {
total_Friday = total_Friday + double.parse(_amountController);
print("Friday");
print(total_Friday);
}
if (value['Day'] == "Saturday") {
total_Saturday =
total_Saturday + double.parse(_amountController);
print("Saturday");
print(total_Saturday);
}
if (value['Day'] == "Sunday") {
total_Sunday = total_Sunday + double.parse(_amountController);
print("Sunday");
print(total_Sunday);
}
}
});
},);
},);
}
List<Map<String,Object>> get groupedTransactionValues {
return List.generate(7,(index) {
final weekDay = DateTime.Now().subtract(
Duration(days: index),);
double totalSum = 0.0;
for (var i = 0; i < widget.recentTransaction.length; i++) {
if ((widget.recentTransaction[i].date.day == weekDay.day) &&
(widget.recentTransaction[i].date.month == weekDay.month) &&
(widget.recentTransaction[i].date.year == weekDay.year)) {
totalSum += widget.recentTransaction[i].amount +
total_Sunday +
total_Monday +
total_Tuesday +
total_Wednesday +
total_Thursday +
total_Friday +
total_Saturday;
print("qqqqqsxdecv");
print(totalSum);
}
}
return {
'day': DateFormat.E().format(weekDay).substring(0,1),'amount': totalSum,// 'totalSunday': total_Sunday,// 'totalMonday': total_Monday,// 'totalTuesday': total_Tuesday,// 'totalWednesday': total_Wednesday,// 'totalThursday': total_Thursday,// 'totalFriday': total_Friday,// 'totalsaturday': total_Saturday,};
}).reversed.toList();
}
double get totaLSpending {
return groupedTransactionValues.fold(0.0,(sum,item) {
return sum + item['amount'];
// item['totalSunday'] +
// item['totalMonday'] +
// item['totalTuesday'] +
// item['totalWednesday'] +
// item['totalThursday'] +
// item['totalFriday'] +
// item['totalsaturday'];
});
}
@override
Widget build(BuildContext context) {
print('build() Chart');
return Card(
elevation: 6,margin: EdgeInsets.all(10),child: Container(
padding: EdgeInsets.all(8),child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,children: groupedTransactionValues.map(
(data) {
return Flexible(
fit: FlexFit.tight,child: ChartBar(
data['day'],data['amount'],totaLSpending == 0.0
? 0.0
: (data['amount'] as double) / totaLSpending),);
},).toList(),),);
}
}
class ChartBar extends StatefulWidget {
final String label;
final double spendingAmount;
final double spendingPercentageOfTotal;
ChartBar(
this.label,this.spendingAmount,this.spendingPercentageOfTotal,);
@override
_ChartBarState createState() => _ChartBarState();
}
class _ChartBarState extends State<ChartBar> {
@override
Widget build(BuildContext context) {
print('build() ChartBar');
return LayoutBuilder(builder: (ctx,constraints) {
return Column(
children: <Widget>[
Container(
height: constraints.maxHeight * 0.15,child: FittedBox(
child: Text('\$${widget.spendingAmount.toStringAsFixed(0)}'),SizedBox(
height: constraints.maxHeight * 0.05,Container(
height: constraints.maxHeight * 0.6,width: 10,child: Stack(
children: <Widget>[
Container(
decoration: Boxdecoration(
border: Border.all(color: Colors.grey,width: 1.0),color: Color.fromrGBO(220,220,borderRadius: BorderRadius.circular(10),FractionallySizedBox(
heightFactor: widget.spendingPercentageOfTotal,alignment: Alignment.bottomCenter,child: Container(
decoration: Boxdecoration(
color: Colors.purple,)),],Container(
height: constraints.maxHeight * 0.15,child: FittedBox(
child: Text(widget.label),)
],);
});
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)