Возникла проблема при изменении значений в p ie флаттер диаграммы - PullRequest
0 голосов
/ 26 мая 2020

Я впервые попробовал этот код, и он отлично работает.

double a = 2, b = 3, c = 5;
var color;
Map<String, double> dataMap = Map();
List<Color> colorList = [
  Colors.red,
  Colors.green,
  Colors.yellow,
];

void changeGraph() {
  dataMap.putIfAbsent("Fat", () => c);
  dataMap.putIfAbsent("Protein", () => b);
  dataMap.putIfAbsent("Carbs", () => a);
}

void initState() {
  super.initState();
  changeGraph();
}

и

PieChart(
  dataMap: dataMap,
  animationDuration: Duration(milliseconds: 800),
  chartLegendSpacing: 32.0,
  chartRadius: MediaQuery.of(context).size.width / 2.7,
  showChartValuesInPercentage: true,
  showChartValues: true,
  showChartValuesOutside: false,
  chartValueBackgroundColor: Colors.grey[200],
  colorList: colorList,
  showLegends: true,
  legendPosition: LegendPosition.right,
  decimalPlaces: 1,
  showChartValueLabel: true,
  initialAngle: 0,
  chartValueStyle: defaultChartValueStyle.copyWith(
    color: Colors.blueGrey[900].withOpacity(0.9),
  ),
  chartType: ChartType.disc,
)

затем, получив значения от пользователя, я попробовал этот метод для изменения графика

setState(() {
  a = newA;
  b = newB;
  c = newC;
});

также пытаюсь вызвать метод changeGraph () , но график не меняется и показывает значение, которое он показывает в первый раз. Есть ли способ изменить значения?

1 Ответ

0 голосов
/ 26 мая 2020

Здесь вы меняете только значения переменных, а не значения внутри карты. Карта имеет значение a = 2, а не ссылку на a.

Это означает, что когда вы говорите dataMap.putIfAbsent("Carbs", () => a);, значение «Carbs» не равно a, а фактически равно 2, поскольку здесь значение является целым числом, а не ссылкой.

Чтобы изменить значение углеводов на карте вам необходимо изменить непосредственно с самой карты, например, datamap["Carbs"] = newA. То же самое с b и c

Сообщите мне, если это не сработает

...