Widget build()

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),
    );
  }