import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:robo_advisory/providers/transaction_provider.dart'; import 'package:robo_advisory/providers/user_provider.dart'; class ExpensesChart extends StatefulWidget { @override State createState() => ExpensesChartState(); } class ExpensesChartState extends State { int touchedIndex; @override Widget build(BuildContext context) { List categories = Provider.of(context, listen: true).categories; return Row( children: [ Expanded( child: PieChart( PieChartData( pieTouchData: PieTouchData(touchCallback: (pieTouchResponse) { setState(() { if (pieTouchResponse.touchInput is FlLongPressEnd || pieTouchResponse.touchInput is FlPanEnd) { touchedIndex = -1; } else { touchedIndex = pieTouchResponse.touchedSectionIndex; if (touchedIndex != null) { Provider.of(context, listen: false) .setSelectedTabIndex(3); Provider.of(context, listen: false) .setSelectedCategory(categories[touchedIndex + 1]); } } }); }), borderData: FlBorderData( show: false, ), sectionsSpace: 1, centerSpaceRadius: 70, sections: showingSections()), ), ), ], ); } List showingSections() { return List.generate(4, (i) { final isTouched = i == touchedIndex; final double fontSize = isTouched ? 25 : 16; final double radius = isTouched ? 60 : 50; switch (i) { case 0: return PieChartSectionData( color: const Color(0xff0293ee), value: 50, title: '50%', radius: radius, titleStyle: TextStyle( fontSize: fontSize, fontWeight: FontWeight.bold, color: const Color(0xffffffff)), ); case 1: return PieChartSectionData( color: const Color(0xfff8b250), value: 12, title: '12%', radius: radius, titleStyle: TextStyle( fontSize: fontSize, fontWeight: FontWeight.bold, color: const Color(0xffffffff)), ); case 2: return PieChartSectionData( color: const Color(0xff13d38e), value: 13, title: '13%', radius: radius, titleStyle: TextStyle( fontSize: fontSize, fontWeight: FontWeight.bold, color: const Color(0xffffffff)), ); case 3: return PieChartSectionData( color: const Color(0xff845bef), value: 25, title: '25%', radius: radius, titleStyle: TextStyle( fontSize: fontSize, fontWeight: FontWeight.bold, color: const Color(0xffffffff)), ); default: return null; } }); } }