in web/github_dataviz/lib/main.dart [82:175]
Widget build(BuildContext context) {
// Combined contributions data
List<DataSeries> dataToPlot = [];
if (contributions != null) {
List<int> series = [];
for (UserContribution userContrib in contributions!) {
for (int i = 0; i < userContrib.contributions.length; i++) {
ContributionData data = userContrib.contributions[i];
if (series.length > i) {
series[i] = series[i] + data.add;
} else {
series.add(data.add);
}
}
}
dataToPlot.add(DataSeries('Added Lines', series));
}
if (starsByWeek != null) {
dataToPlot
.add(DataSeries('Stars', starsByWeek!.map((e) => e.stat).toList()));
}
if (forksByWeek != null) {
dataToPlot
.add(DataSeries('Forks', forksByWeek!.map((e) => e.stat).toList()));
}
if (pushesByWeek != null) {
dataToPlot
.add(DataSeries('Pushes', pushesByWeek!.map((e) => e.stat).toList()));
}
if (issueCommentsByWeek != null) {
dataToPlot.add(DataSeries(
'Issue Comments', issueCommentsByWeek!.map((e) => e.stat).toList()));
}
if (pullRequestActivityByWeek != null) {
dataToPlot.add(DataSeries('Pull Request Activity',
pullRequestActivityByWeek!.map((e) => e.stat).toList()));
}
LayeredChart layeredChart =
LayeredChart(dataToPlot, weekLabels, interpolatedAnimationValue);
const double timelinePadding = 60.0;
var timeline = Timeline(
numWeeks: dataToPlot.isNotEmpty ? dataToPlot.last.series.length : 0,
animationValue: interpolatedAnimationValue,
weekLabels: weekLabels,
mouseDownCallback: (double xFraction) {
setState(() {
timelineOverride = true;
_animation?.stop();
interpolatedAnimationValue = xFraction;
});
},
mouseMoveCallback: (double xFraction) {
setState(() {
interpolatedAnimationValue = xFraction;
});
},
mouseUpCallback: () {
setState(() {
timelineOverride = false;
createAnimation(
interpolatedAnimationValue * earlyInterpolatorFraction);
});
},
);
Column mainColumn = Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: [
Expanded(child: layeredChart),
Padding(
padding: const EdgeInsets.only(
left: timelinePadding,
right: timelinePadding,
bottom: timelinePadding),
child: timeline,
),
],
);
return Container(
color: Constants.backgroundColor,
child:
Directionality(textDirection: TextDirection.ltr, child: mainColumn),
);
}