Reputation: 65
I want to sum all the data of different objects together, like they belong to a list. **outletExpansionAchievementAbRhHoBarGraphList: [ OutletExpansionAchievementAbRhHoBarGraphModel{month: 6, count: 3},
OutletExpansionAchievementAbRhHoBarGraphModel{month: 1, count: 3},
OutletExpansionAchievementAbRhHoBarGraphModel{month: 7, count: 2},
OutletExpansionAchievementAbRhHoBarGraphModel{month: 2, count: 15},
OutletExpansionAchievementAbRhHoBarGraphModel{month: 8, count: 2},
OutletExpansionAchievementAbRhHoBarGraphModel{month: 4, count: 4},
OutletExpansionAchievementAbRhHoBarGraphModel{month: 5, count: 5},
OutletExpansionAchievementAbRhHoBarGraphModel{month: 3, count: 2},
OutletExpansionAchievementAbRhHoBarGraphModel{month: 9, count: 5} ]**
like outletExpansionAchievementAbRhHoBarGraphList is my list which contains 9 objects I want to sum the all count value and keep them into a variable for future use. Like sum= 3+3+2+15+2+4+5+2+5=?? This is what I tried, and sum is a global variable. How ever I have to keep in mind that it also work for double value.
StreamBuilder<
Resource<OutletExpansionAchievementAbRhHoBarGraphListModel>>(
stream: widget.bloc
.outletExpansionAchievementAbRhHoBarGraphListModelPublisherStream,
builder: (_, snapshot) {
sum = snapshot.data?.model?.outletExpansionAchievementAbRhHoBarGraphList.fold(0.0, (sum, item) => sum! + item.count!.toDouble());
return snapshot.hasData &&
snapshot.data?.model.toString()!=null &&
snapshot.data?.model
?.outletExpansionAchievementAbRhHoBarGraphList !=
null && snapshot.data!.model!.outletExpansionAchievementAbRhHoBarGraphList.toString().isNotEmpty
? DisplayGraph(
'Outlet Expansion',
Padding(
padding: const EdgeInsets.all(8.0),
child: OutletExpansionAchievementBarGraphWidget(
widget.bloc,
sortOutletExpansionBarGraph(snapshot.data?.model
?.outletExpansionAchievementAbRhHoBarGraphList ??
[])),
),
snapshot
.data
?.model
?.outletExpansionAchievementAbRhHoBarGraphList
.length ??
0,
)
: SizedBox();
},
),
this is my model class
import 'package:agent_banking/base/base_model.dart';
import 'package:json_annotation/json_annotation.dart';
part 'outlet_expansion_achievement_ab_rh_ho_bar_graph_list_model.g.dart';
@JsonSerializable()
class OutletExpansionAchievementAbRhHoBarGraphListModel{
List<OutletExpansionAchievementAbRhHoBarGraphModel> outletExpansionAchievementAbRhHoBarGraphList;
OutletExpansionAchievementAbRhHoBarGraphListModel(
this.outletExpansionAchievementAbRhHoBarGraphList);
factory OutletExpansionAchievementAbRhHoBarGraphListModel.fromJson(Map<String, dynamic> json) =>
_$OutletExpansionAchievementAbRhHoBarGraphListModelFromJson(json);
Map<String, dynamic> toJson() => _$OutletExpansionAchievementAbRhHoBarGraphListModelToJson(this);
@override
String toString() {
return 'OutletExpansionAchievementAbRhHoBarGraphListModel{outletExpansionAchievementAbRhHoBarGraphList: $outletExpansionAchievementAbRhHoBarGraphList}';
}
}
@JsonSerializable()
class OutletExpansionAchievementAbRhHoBarGraphModel {
OutletExpansionAchievementAbRhHoBarGraphModel({
this.count,
this.month,});
@JsonKey(name: 'MONTH')
int? month;
@JsonKey(name: 'COUNT')
int? count;
factory OutletExpansionAchievementAbRhHoBarGraphModel.fromJson(Map<String, dynamic> json) =>
_$OutletExpansionAchievementAbRhHoBarGraphModelFromJson(json);
Map<String, dynamic> toJson() => _$OutletExpansionAchievementAbRhHoBarGraphModelToJson(this);
@override
String toString() {
return 'OutletExpansionAchievementAbRhHoBarGraphModel{month: $month, count: $count}';
}
}
class OutletExpansionAchievementAbRhHoBarGraphListModelCreator extends BaseModelCreator<OutletExpansionAchievementAbRhHoBarGraphListModel>{
@override
OutletExpansionAchievementAbRhHoBarGraphListModel fromJson(Map<String, dynamic> json) {
// TODO: implement fromJson
throw UnimplementedError();
}
@override
OutletExpansionAchievementAbRhHoBarGraphListModel fromList(List jsonList) {
List<OutletExpansionAchievementAbRhHoBarGraphModel> list = [];
jsonList.forEach((element) {
list.add(OutletExpansionAchievementAbRhHoBarGraphModel.fromJson(element));
});
return OutletExpansionAchievementAbRhHoBarGraphListModel(list);
}
}
Upvotes: 0
Views: 470
Reputation: 2705
You should be able to use map to map your classes to the integer value that you want to add and then reduce to sum the values.
class MyClass {
MyClass(this.month, this.count);
int month;
int count;
}
void main() {
List<MyClass> myList = List.generate(8, (i) => MyClass(i, i+1));
int sum = myList.map((item) => item.count).reduce((x, y) => x + y);
print(sum);
}
That will output 36
when you run it.
I added a minimum example that you can copy and run on a Dart pad to make changes and adapt it to your needs.
Upvotes: 2