Можно ли построить собственный рендерер точек, который показывает разные цвета в зависимости от значения - PullRequest
0 голосов
/ 21 октября 2019

Я создаю диаграмму временных рядов во флаттере, но она показывает только один цвет для точек. Я хотел бы назначить разные цвета для точек на основе их значений. Например, значения 1 и 2 - красные, а 3 и 4 - оранжевые. Возможно ли это?

Вот что я пробовал:

 @override
  Widget build(BuildContext context) {
    return new charts.TimeSeriesChart(
      seriesList,
      animate: animate,
      defaultRenderer: new charts.LineRendererConfig(
        includePoints: true,
        includeArea: true,
        radiusPx: 6,
      ),
      // Provides a custom axis ensuring that the ticks are in whole numbers.
      primaryMeasureAxis: new charts.NumericAxisSpec(
          tickProviderSpec: new charts.BasicNumericTickProviderSpec(
            desiredTickCount: 11,
          ),
          renderSpec: new charts.GridlineRendererSpec(

              // Tick and Label styling here.
              labelStyle: new charts.TextStyleSpec(
                  fontSize: 14, // size in Pts.
                  color: charts.MaterialPalette.black),

              // Change the line colors to match text color.
              lineStyle: new charts.LineStyleSpec(
                  color: charts.MaterialPalette.transparent))),

      domainAxis: new charts.DateTimeAxisSpec(
          renderSpec: new charts.GridlineRendererSpec(

              // Tick and Label styling here.
              labelStyle: new charts.TextStyleSpec(
                  fontSize: 14, // size in Pts.
                  color: charts.MaterialPalette.black),

              // Change the line colors to match text color.
              lineStyle: new charts.LineStyleSpec(
                  color: charts.MaterialPalette.transparent))),
    );
  }


  static List<charts.Series<MoodRow, DateTime>> _buildData(
      List<_mood.Mood> moodEntries) {
    List<MoodRow> data = new List();

    for (_mood.Mood mood in moodEntries) {
      data.add(new MoodRow(mood, mood.moodDate, mood.moodStatus));
    }

    return [
      new charts.Series<MoodRow, DateTime>(
        id: 'MoodStatus',
        colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
        domainFn: (MoodRow row, _) => row.timeStamp,
        measureFn: (MoodRow row, _) => row.moodStatus,
        data: data,
      )
    ];
  }  

1 Ответ

0 голосов
/ 21 октября 2019

Вы можете использовать это:

Color((math.Random().nextDouble() * 0xFFFFFF).toInt() << 0)
              .withOpacity(1.0);

изменить math.Random (). NextDouble () с нужным номером

...